IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

[W27] Recherche dans une liste intégrée dans un tableau


Sujet :

WinDev

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut [W27] Recherche dans une liste intégrée dans un tableau
    Bonjour à tous,

    Je chercher à chercher un élément d'une liste qui est elle-même intégrée dans un tableau rempli par programmation.

    Mon tableau se présente sous la forme suivante avec une liste au format combo :

    Nom : Capture d’écran 2022-11-02 141921.png
Affichages : 206
Taille : 12,4 Ko

    lors de l'affichage du tableau, j'aimerais qu'une valeur par défaut de cette liste soit affichée. Cette valeur est le résultat d'un calcul qui se rapporte aux infos de la ligne.
    C'est un peu compliqué à expliquer .. donc voici comment je remplis mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    	    // Je crée ma liste pour mon champ combo
    		POUR TOUT volees 
    			ListeAjoute(TABLE_CreationClasses.COL_Volee, volees.Intitule + gValeurMémorisée(volees.IDVolee))
    		FIN
     
    		//J'ajoute les lignes à mon tableau
    		sMonSQL = [
    			SELECT * FROM SECTIONSFilieres,Sections Where sectionsfilieres.idsection = sections.idsection AND sectionsfilieres.idfiliere = %1
    			]
     
    		sMonSQL = ChaîneConstruit(sMonSQL,COMBO_Filiere.ValeurMémorisée)
     
    		SI HExécuteRequêteSQL(sdMaSrc,hRequêteDéfaut,sMonSQL) ALORS
     
    			POUR TOUT sdMaSrc 
    				TableAjouteLigne(TABLE_CreationClasses,sdMaSrc.Intitule,sdMaSrc.idsectionFiliere,1)				
    			FIN
    		FIN
    Jusque-là tout se passe bien. Ensuite, lors de l'affichage d'une ligne, je tente de sélectionner une élément de la liste de ma colonne combo et là ça marche pas. J'ai essayé selon le schéma suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nResultat	est un entier
    //je cherche dans la liste de la colonne combo de mon tableau une valeur
     
    nResultat = ListeCherche(TABLE_CreationClasses.COL_Volee, <ValeurChercheée>)
     
    SI nResultat > 0 ALORS
    	// j'affiche l'élément de ma liste
    	ListeSelectPlus(TABLE_CreationClasses.COL_Volee,nResultat)
    FIN
    Mais la recherche échoue toujours...

    je ne sais pas si ce type de recherche est possible ; qu'en pensez-vous ?
    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 261
    Par défaut
    Quand tu fais les listeAjoute, tu ajoutes : volees.Intitule + gValeurMémorisée(volees.IDVolee)
    Et quand tu ajoutes d'autres lignes, tu as une logique très différente, tu ajoutes par : TableAjouteLigne(TABLE_CreationClasses, sdMaSrc.Intitule, sdMaSrc.idsectionFiliere, 1)
    Déjà, à ce niveau, c'est bizarre.

    Quand tu fais ta recherche, tu recherche volees.Intitule ou volees.IDVolee , ou sdMaSrc.idsectionFiliere ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Quand tu fais les listeAjoute, tu ajoutes : volees.Intitule + gValeurMémorisée(volees.IDVolee)
    Et quand tu ajoutes d'autres lignes, tu as une logique très différente, tu ajoutes par : TableAjouteLigne(TABLE_CreationClasses, sdMaSrc.Intitule, sdMaSrc.idsectionFiliere, 1)
    Déjà, à ce niveau, c'est bizarre.

    Quand tu fais ta recherche, tu recherche volees.Intitule ou volees.IDVolee , ou sdMaSrc.idsectionFiliere ?
    hello tbc92.

    Effectivement la logique n'est pas la même, mais je constate que mes explications ne sont pas forcément très claires...

    Je dois donc créer des classes pour une nouvelle année scolaire. Chaque classe fait partie d'une volée ; la volée détermine l'année terminale.
    Ensuite, en fonction des sections de mon école, la durée des études n'est pas la même.

    par exemple, la durée d'études de ma section monolingue est de 3 ans et la durée de ma section bilingue est de 4 ans.

    Sachant que nous sommes en 2022, une classe créé cette année en section monolingue fera partie de la volée 25 car les élèves termineront leurs études en 2025.
    Pour la section bilingue qui est de 4 ans, les classes créées cette années feront partie de la volée 26

    L'idée est donc de proposer un tableau avec les différentes sections et de pré-inscrire la volée de chaque section. L'utilisateur n'aura ainsi plus qu'à entrer le nombre de classes de chaque section.

    Je remplis donc un tableau en mode programmation qui est composé de 3 colonnes.
    première colonne = le nom de la section
    deuxième colonne = le nombre de classe a créer
    troisième colonne = volée des classes créées

    Le problème est que ma troisième colonne (volée) est un champ combo que je remplis également par programmation. J'aimerais en effet que le pré-remplissage de la volée puisse être modifié si un événement x se passait.

    J'ai donc tenté et cela semble fonctionne de créer en premier la liste de mes volées pour alimenter mon champ combo par la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    POUR TOUT volees 
    	ListeAjoute(TABLE_CreationClasses.COL_Volee, volees.Intitule + gValeurMémorisée(volees.IDVolee))
    FIN
    Ce champ combo contient la volée affichée ainsi que la clé primaire en valeur mémorisée
    ce champ combo affiche les volées (24,25,26,27, etc.)

    une fois que j'ai créé la liste pour mon champ combo, je passe en revue toutes les sections de ma filière et, pour chacune, j'ajoute une ligne à mon tableau.

    Je sélectionne ici toutes les sections de ma filière (nous avons plusieurs filières dans notre école)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sMonSQL = [SELECT * FROM SECTIONSFilieres,Sections Where sectionsfilieres.idsection = sections.idsection AND sectionsfilieres.idfiliere = %1 	]
    sMonSQL = ChaîneConstruit(sMonSQL,COMBO_Filiere.ValeurMémorisée)
     
    SI HExécuteRequêteSQL(sdMaSrc,hRequêteDéfaut,sMonSQL) ALORS
    et, pour chaque section trouvée, j'ajoute une ligne à mon tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        POUR TOUT sdMaSrc 
            TableAjouteLigne(TABLE_CreationClasses,sdMaSrc.Intitule,sdMaSrc.idsectionFiliere,<1>)				
       FIN
    FIN
    j'ai remarqué que lorsque j'ajoute une ligne à mon tableau, il récupère automatiquement la liste des volées créée précédemment

    Je ne dais pas si cela est plus clair comme cela

    Merci pour ton aide

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 261
    Par défaut
    Oui, j'avais mal lu... le tableajouteligne est différent et c'est normal.
    La question finale était : Quand tu fais ta recherche, tu recherches volees.Intitule ou volees.IDVolee ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Oui, j'avais mal lu... le tableajouteligne est différent et c'est normal.
    La question finale était : Quand tu fais ta recherche, tu recherches volees.Intitule ou volees.IDVolee ?
    oui merci
    alors je fais une recherche sur volees.intitule car en partant de ma sélection de mon année scolaire (en haut de mon écran) qui possède deux champs (date de début et date de fin), je récupère les 2 derniers chiffres de l'année de démarrage (par exemple, pour 2022 -> 22) et j'ajoute la durée d'études ; par exemple 3 ans. Le résultat (ici 25) est ce que je recherche dans ma liste. Si je le trouve, je récupère la position et à l'aide d'un selectplus, je me positionne à la position trouvée ..


    j'ai essayé plusieurs manières différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nResultat = ListeCherche(TABLE_CreationClasses.COL_Volee, <ValeurChercheée>)
    nResultat = ListeCherche(TABLE_CreationClasses.COL_Volee.valeur, <ValeurChercheée>)
    mais le résultat est toujours négatif

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 261
    Par défaut
    J'ai regardé la doc, ici : documentation gValeurMémorisée
    C'est écrit noir sur blanc : La fonction ListeCherche tient compte des valeurs ajoutées par la fonction gValeurMémorisée.

    Dans une combo, tu peux faire en sorte que la partie qui se déroule soit une table, et non une liste. Tu peux mettre 2 colonnes, une avec l'année 25 ou 26, et l'autre sera cette colonne volees.IDVolee, puisque je suppose que tu en as besoin.
    Et cette colonne idVolée peut être invisible, pas de problème.
    Et au lieu de ListeCherche(), tu feras donc TableCherche(), en précisant la bonne colonne.
    De manière générale, pour une combo, utiliser une table plutôt qu'une liste est plus ouvert. Tu as potentiellement plusieurs colonnes, et donc plus de souplesse.
    Cf le paragraphe Type de la zone déroulée du champ Combo dans cette doc

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Wow,
    tu es bien plus assidu que moi dans le parcours de l'aide Windev .. ¨

    Effectivement, je m'étais focalisé sur la création d'un champ combo par programmation et là, toute référence était liée à la fonction 'listeajoute'. J'ai cherché un certain temps ce matin comment lier mon champ combo à un fichier ; le tout par programmation (hmmm) jusqu'à ce que je comprenne que je devais le définir au niveau de la description de mon champ table , même si ce dernier était rempli par programmation !

    Nom : ChampTableCreationClasse.png
Affichages : 158
Taille : 25,8 Ko


    Finalement, une fois avoir fait cela, ma rechercher fonctionne bien, comme tu l'avais mentionné ! Merci à toi .

    Voici le code final d'affichage de chaque ligne de mon tableau et le calcul, pour chaque ligne, de la volée des nouvelles classes en fonction de leur section

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    nResultat est un entier
    nIndice est un entier
    // On Récupère la section
    HLitRecherchePremier(SectionsFilieres,IDSectionFiliere,TABLE_CreationClasses.COL_IDSectionFiliere)
     
    SI HTrouve ALORS
           // A partir de la section, on obtient le nombre de semestres d'études -> semestres/2 = nb années d'études
          //  On ajoute ce dernier à l'année de démarrage et on obtient la volée 
     
    	nResultat = Droite( SAI_Sai_anneeDemarrage + (SectionsFilieres.NBSemestresDeFormation/2),2)
    FIN
     
    // On chercher la volée dans mon fichiers de volées
    nIndice = ListeCherche(TABLE_CreationClasses.COL_Volee, nResultat)
     
    SI nIndice > 0 ALORS
             // J'ai la position dans ma liste,
    	// j'affiche l'élément de ma liste
    	ListeSelectPlus(TABLE_CreationClasses.COL_Volee,nIndice)
    FIN
    Voici le résultat final
    Nom : ResultatFinal.png
Affichages : 169
Taille : 11,2 Ko

    Merci encore à tbc92 pour sa précieuse aide

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 261
    Par défaut
    L'aide de Windev est très bien faite. C'est le point fort du produit. Et même si on parle plus ou moins bien anglais, une aide en français apporte un confort énorme.
    Donc il faut vraiment lire et relire l'aide, ligne à ligne, quand un truc ne marche pas.

    En plus ici, il y a une certaine logique. On a d'un côté la valeur visible pour l'utilisateur, et de l'autre la valeur 'mémorisée', celle qui est utilisée pour les traitements.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    L'aide de Windev est très bien faite. C'est le point fort du produit. Et même si on parle plus ou moins bien anglais, une aide en français apporte un confort énorme.
    Donc il faut vraiment lire et relire l'aide, ligne à ligne, quand un truc ne marche pas.

    En plus ici, il y a une certaine logique. On a d'un côté la valeur visible pour l'utilisateur, et de l'autre la valeur 'mémorisée', celle qui est utilisée pour les traitements.
    oui, j'acquiesce sur la qualité de la doc qui est très bien faite.
    Pour ce qui concerne la valeur affichée VS valeur mémorisée, j'avais pensé que macolonne.valeuraffichée pouvait faire le job mais voilà j'apprends..
    Merci encore pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche d'une liste de doc dans des ensembles de doc
    Par TophiTh dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/08/2019, 14h58
  2. Réponses: 2
    Dernier message: 05/04/2018, 09h38
  3. Réponses: 8
    Dernier message: 02/02/2018, 20h48
  4. [MySQL-5.5] Recherche d'une liste de mots dans une chaine
    Par Phiss dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/07/2014, 16h08
  5. Recherche d'une liste de valeurs dans une autre
    Par charlebakhtovsky dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/02/2011, 09h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo