|
| Traitement sur 2 enregistrements sélectionnés |
| Débuté par BrunoPqs, 19 mai 2024 19:11 - 24 réponses |
| |
| | | |
|
| |
Membre enregistré 64 messages |
|
| Posté le 19 mai 2024 - 19:11 |
Bonjour,
J'ai mis en place dans mon logiciel, des cases de sélection devant les enregistrements de la table. Il y a la possibilité de filtrer les enregistrements avec les champs de saisie au-dessus.
Comment puis-je en cochant 2, 3 ou plus enregistrement, affecter par exemple la valeur AAA par exemple dans la colonne Lettrage. La personne aveugle après avoir s"électionnés les enregistrements au clavier, lancera une fenêtre pour affecter une valeur comme AAA, puis AAB, AAC, etc.

Merci,
Bruno |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 020 messages |
|
| Posté le 20 mai 2024 - 00:49 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 20 mai 2024 - 06:47 |
Bonjour,
Voici la fenêtre attendu :

Lorsque ma stagiaire appuie sur CTRL + L après avoir coché les lignes, cela ouvre la petite fenêtre. Dans cele-ci, elle tape par exemple AAA ; valide avec le bouton Ajouter. Cette donnée se met en colonne Lettrage pour les 2 éléments sélectionnés.
Cordialement,
Bruno |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 20 mai 2024 - 07:45 |
Bonjour, As-tu tenté de boucler via un TableSelect éventuellement associé à un TableEnregistre en fonction des réglages. Regarde le chapitre "Fonction de gestion des champs table", il y a de nombreuses infos utiles.
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFMMessage modifié, 20 mai 2024 - 07:51 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 20 mai 2024 - 07:56 |
Bonjour Voro, Quand tu dis Regarde le chapitre... Où cela se trouve ? C'est bon j'ai trouvé le chapitre dans l'aide.Message modifié, 20 mai 2024 - 08:18 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 20 mai 2024 - 10:48 |
Re,
J'ai déjà mis ce bout de code sur la colonne où se trouve les coches :
Ind est un entier POUR Ind = 1 _À_ TableOccurrence(Table_Ecritures2) SI Col_sel[Ind] = Vrai ALORS TableSelectPlus(Table_Ecritures2, Ind) SINON TableSelectMoins(Table_Ecritures2,Ind) FIN FIN
Puis ce bout de code sur la table :
ExécuteTraitement(Col_sel,trtModification) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 20 mai 2024 - 12:25 |
Dans un premier temps, pourquoi utiliser des coches et pas simplement la sélection de ligne ?
ExécuteTraitement : Quelle horreur
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 20 mai 2024 - 13:25 |
Re,
Car le logiciel est à destination d'une de mes stagiaires qui est aveugle et cela est plus pratique de sélectionner des lignes avec la case à cocher. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 20 mai 2024 - 16:07 |
Dans ce cas, les TableSelectPlus/Moins sont inutile, il suffit de boucler sur les lignes est de vérifier l'état de la colonne
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 20 mai 2024 - 18:03 |
Voroltinquo, Peux-tu être plus concret avec du code ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 020 messages |
|
| Posté le 20 mai 2024 - 18:45 |
Bonjour Bruno,
Quelque chose comme ça :
i est un entier POUR i = 1 _À_ MaTable..Occurrence SI MaTable.MonSélecteur[i] = Vrai ALORS FIN FIN
Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 20 mai 2024 - 18:55 |
Merci Cédric, Et je peux ensuite ouvrir la fenêtre et modifier les 2 enregistrements en même temps ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 20 mai 2024 - 19:05 |
A la volée:
FONCTION LettrerOpération(saLettrage est chaîne) :booléen nNoLigne est un entier
POUR nNoLigne=1 _À_ TableOccurrence(TABLE_Lettrage) SI COL_Select[nNoLigne] ALORS COL_Lettrage[nNoLigne]=saLettrage TableEnregistre(TABLE_Lettrage) FIN FIN RENVOYER Vrai
CAS ERREUR: SELON ErreurInfo(errCode) AUTRE CAS ErreurConstruit("L'application a déclenché l'erreur %1%2%3",ErreurInfo(errCode),CRLF,ErreurInfo(errMessage)) RENVOYER Faux FIN CAS EXCEPTION: SELON ExceptionInfo(errCode)
AUTRE CAS ErreurConstruit("L'application a déclenché l'exception %1%2%3",ExceptionInfo(errCode),CRLF,ExceptionInfo(errMessage)) RENVOYER Faux FIN
Utilisation :
saLettrage est une chaîne
Saisie("Entrez le lettrage",saLettrage) LettrerOpération(saLettrage) -- Il y a peut être plus simple, mais, ça tourneMessage modifié, 20 mai 2024 - 19:23 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 21 mai 2024 - 18:14 |
Bonjour Voroltinquo,
Ces 2 codes, je les collent où ?
Cdlmt,
Bruno |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 020 messages |
|
| Posté le 21 mai 2024 - 19:22 |
Bonjour Bruno, Dans windev, une fonction est comme une procédure mais la fonction renvoie une valeur. Vous créer donc une procédure, mais le mot Fonction remplace le mot Procédure.
Ensuite vous déclenchez le code (la partie "utilisation") avec votre raccourci clavier.
PS: je n'avais pas vu votre code #6, vous y étiez presque, il restait à appeler le Dialogue Saisie Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 22 mai 2024 - 19:20 |
Bonsoir,
Help, j'ai une partie du code en rouge....

Cdlmt,
Bruno |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 291 messages |
|
| Posté le 22 mai 2024 - 19:57 |
Bonsoir,

SI COL_Select[nNoLigne] ALORS
FabriceMessage modifié, 22 mai 2024 - 19:59 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 22 mai 2024 - 20:27 |
| Sur la ligne nNoLigne=1 _À_ nNoLigne est rouge et j'ai ce message d'erreur "Impossible d'utiliser une syntaxe de boucle optimisée à cause du compteur : utilisez plutôt comme compteur de boucle un compteur local ou une variable locale de type entier ou réel. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 291 messages |
|
| Posté le 22 mai 2024 - 21:35 |
Bonsoir Je ne vois pas ce qu'il y a au dessus de la FONCTION LettrerOpération, mais il semblerait qu'il y ait du code !?!?!
Je pense que vous n'avez pas "réellement" créé de procédure comme l'avait indiqué Cédric plus haut
Normalement vous devriez avoir ceci pour une procédure locale :

Ou ceci pour une procédure interne :

Cordialement, Fabrice |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 020 messages |
|
| Posté le 23 mai 2024 - 00:50 |
Bonjour, Je pense que Fabrice N a raison, une procédure interne aurait simplifié les choses. De plus, il me semble qu'il y a une confusion totale dans tous les codes ci-dessus.
J'ai volontairement fait le ménage (plus de procédure ni de fonction), essayez le code ci-dessous :
saLettrage est une chaîne nNoLigne est un entier POUR nNoLigne=1 _À_ TableOccurrence(Table_Ecritures2) SI Col_sel[nNoLigne] ALORS Saisie("Entrez le lettrage",saLettrage) COL_Lettrage[nNoLigne]=saLettrage TableEnregistre(Table_Ecritures2) FIN FIN
Dites nous si le résultat correspond à peu près à vos attentes. Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 23 mai 2024 - 06:05 |
Bonjour Cédric,
Merci bcp de votre aide, il y a-t-il moyen d'automatiser les lettres sans que la personne aveugle est à chercher où elle en ai. Exemple : AAA puis AAB, AAC. Arrivé à AAZ, on passe à ABA puis ABB, puis ABC, etc.
Cordialement,
Bruno |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 020 messages |
|
| Posté le 23 mai 2024 - 09:49 |
Pour le lettrage automatique, oui il y a moyen comme je vous le disais sur le post #2, inutile de réinventer la roue. Le code sur cette page fonctionne très bien : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/182705-incrementation-alphabetique-resolu/read.awp
Comment allez-vous débuter, la personne saisit le premier lettrage (et comment le choisit-elle) ou faut-il aller chercher la dernière valeur dans la table ?
Edit : la saisie par la personne est-elle bien nécessaire, une fois la première valeur déterminée, le programme peut très bien faire le travail ?Message modifié, 23 mai 2024 - 10:04 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 23 mai 2024 - 14:01 |
UneCédric_34 a écrit :
Comment allez-vous débuter, la personne saisit le premier lettrage (et comment le choisit-elle) ou faut-il aller chercher la dernière valeur dans la table ?
Une solution consiste à utiliser CHargeParamètre/SauveParamètre
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages |
|
| Posté le 23 mai 2024 - 19:12 |
Bonjour,
Le lettrage commence à AAA, puis AAB. la personne n'est pas obligé de taper la valeur, cela peut être automatique.
Cdlmt,
Bruno |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 020 messages |
|
| Posté le 23 mai 2024 - 20:56 |
La difficulté pour un tri sur une rubrique alphabétique réside dans le fait que pour les valeurs AA, ZZ, AAA, la dernière valeur pour un ordre croissant sera ZZ alors que dans le cas qui vous intéresse, la dernière valeur devrait être AAA. Pour contrer, il faut créer dans la table une colonne invisible nommée : TailleLettrage (inutile de créer une liaison au fichier HFSQL) Le code ci dessous commencera par remplir cette colonne avec la taille de chaque chaîne. Ainsi, le tri par ordre décroissant sortira d'abord 3 pour AAA, puis sortira l'ordre alphabétique décroissant pour les chaines de 3 caractères.
saLettrage est une chaîne nNoLigne est un entier VarIndice est un booléen
POUR nNoLigne= 1 _À_ TableOccurrence(Table_catalogues_fournisseurs) TailleLettrage[nNoLigne] = Taille(COL_Lettrage[nNoLigne]) FIN
TableTrie(Table_catalogues_fournisseurs, "-TailleLettrage", "-COL_Lettrage") saLettrage = COL_Lettrage[1] TableTrie(Table_catalogues_fournisseurs, "reference")
POUR nNoLigne= 1 _À_ TableOccurrence(Table_catalogues_fournisseurs) SI Ligne_Select[nNoLigne] ET COL_Lettrage[nNoLigne] = "" ALORS SI saLettrage <> "" ALORS IncrementLettrage(saLettrage) SINON saLettrage = "AAA" FIN VarIndice = HLitRecherchePremier(catalogues_fournisseurs, IDcatalogue_fournisseurs, IDcatalogue_fournisseurs[nNoLigne]) SI HTrouve(catalogues_fournisseurs) = Vrai ALORS catalogues_fournisseurs.Lettrage[VarIndice] = saLettrage HEnregistre(catalogues_fournisseurs) Ligne_Select[nNoLigne] = Faux FIN FIN FIN TableAffiche(Table_catalogues_fournisseurs)
PROCEDURE INTERNE IncrementLettrage(sTexte est une chaîne) nTaille est un entier = Taille(sTexte) i est un entier = nTaille nbDeA est un entier = 0 POUR i = nTaille À 1 PAS -1 SI sTexte[[i]] = "Z" ALORS sTexte[[i]] = "A" nbDeA++ SINON sTexte[[i]] = Caract(Asc(sTexte[[i]]) + 1) SORTIR FIN FIN SI nbDeA = nTaille ALORS sTexte = sTexte + "A" RENVOYER sTexte FIN
Attention, ne prenez pas ce code pour argent comptant car je n'ai pas fait les essais nécessaires pour prétendre que tout est OK. Donc faites des essais, tout le monde peut se tromper.
Il existe d'autres solutions comme l'a précisé Voroltinquo (sauvegarde de la dernière valeur). Dites-nous si ça fonctionne pour vous. CdltMessage modifié, 23 mai 2024 - 20:58 |
| |
| |
| | | |
|
| | | | |
| | |
|