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] Combo dans champ table avec valeurs différentes à chaque ligne


Sujet :

WinDev

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    oK, cela semble fonctionner avec une fenêtre interne qui contient mon champ combo. Ce champ combo est alimenté par programmation et non pas par une requête paramétrée ..
    Je fais encore 1-2 test et je reconfirme ...

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par forstera Voir le message
    oK, cela semble fonctionner avec une fenêtre interne qui contient mon champ combo. Ce champ combo est alimenté par programmation et non pas par une requête paramétrée ..
    Je fais encore 1-2 test et je reconfirme ...
    bon, je ne suis pas plus avancé qu'avant car je devrais maintenant sélectionner un valeur par défaut dans ma liste combo et il y a trop d'éléments en cascade, ça ne marche pas ...

    ma combo se trouve ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LigneEncours = ListeCherche(TABLE_CreationClasses[TABLE_CreationClasses].COL_Volee.CFI_ListeVolees.COMBO_REQ_VoleesParAnneeScolaireEtSection, IntituleVolee)
    le système reconnait bien le chemin jusqu'à ma fenêtre interne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TABLE_CreationClasses[TABLE_CreationClasses].COL_Volee.CFI_ListeVolees.
    mais si j'ajoute encore mon champ combo, cela fait trop.

    Ya-a-t-il un autre moyen d'accéder à mon champ combo ?

  3. #23
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    J'ai voulu tester.
    J'ai créé une fenêtre vierge, une table 'remplie par programmation', j'ai une colonne COL2 qui est de type combo. J'ai juste cliqué sr suivant à chaque occasion, j'ai gardé tous les paramètres par défaut.

    J'ai ajouté un bouton avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ch est une chaîne
    tablesuprimetout(table1)
    POUR i = 1 À 5
    	TableAjouteLigne (Table1)
    	ch = "A"+i +"_1"
    	POUR j = 2 _À_ i+2
    		ch = ch + RC+ "A"+i+ "_" + j 
    	FIN
    	Table1.Col2[i]..Contenu = ch 
    	Table1.Col2[i] = i 
    FIN
    J'obtiens le résultat voulu. J'ai un peu galéré, et c'est cette page de la doc qui m'a donné la réponse.

    De manière générale, les fenêtre internes ne me semblent pas faites pour ça. Si visuellement, on veut casser la logique de colonnes, et mettre dans une même colonne plusieurs objets, alors on passe par une fenêtre interne. Ok, dans ce cas, pas d'autre solution (ou peut être les conteneurs)
    Autre cas, si on veut faire une espèce de boite noire avec 3 ou 4 champs qui communiquent entre eux, on met ces champs dans une fenêtre interne, et ensuite on peut réutiliser cet objet. Le champ fenêtre interne est un facilitateur, pour avoir un code mieux structuré. Mais c'est tout.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    J'ai voulu tester.
    J'ai créé une fenêtre vierge, une table 'remplie par programmation', j'ai une colonne COL2 qui est de type combo. J'ai juste cliqué sr suivant à chaque occasion, j'ai gardé tous les paramètres par défaut.

    J'ai ajouté un bouton avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ch est une chaîne
    tablesuprimetout(table1)
    POUR i = 1 À 5
    	TableAjouteLigne (Table1)
    	ch = "A"+i +"_1"
    	POUR j = 2 _À_ i+2
    		ch = ch + RC+ "A"+i+ "_" + j 
    	FIN
    	Table1.Col2[i]..Contenu = ch 
    	Table1.Col2[i] = i 
    FIN
    J'obtiens le résultat voulu. J'ai un peu galéré, et c'est cette page de la doc qui m'a donné la réponse.

    De manière générale, les fenêtre internes ne me semblent pas faites pour ça. Si visuellement, on veut casser la logique de colonnes, et mettre dans une même colonne plusieurs objets, alors on passe par une fenêtre interne. Ok, dans ce cas, pas d'autre solution (ou peut être les conteneurs)
    Autre cas, si on veut faire une espèce de boite noire avec 3 ou 4 champs qui communiquent entre eux, on met ces champs dans une fenêtre interne, et ensuite on peut réutiliser cet objet. Le champ fenêtre interne est un facilitateur, pour avoir un code mieux structuré. Mais c'est tout.
    Oui top et merci pour ton aide ... j'avais également cette solution avant que je ne chercher autre chose car le problème ici est que je ne peux pas afficher un élément spécifique comme valeur par défaut lors de l'affichage de ma combo. Si par exemple j'ai 5 éléments dans ma combo et que j'aimerais afficher le 3e je ne peux pas .. enfin je n'y suis pas arrivé

  5. #25
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    Je ne comprends pas la question.
    Au moment de l'initialisation de la table, tu sais que pour telle ligne, tu veux voir 2025 par exemple, et tu veux que la combo propose les valeurs 2025, 2026 et 2027.
    Et pour la ligne suivante, tu veux voir 2030, et la combo devra proposer 20027,2028,2029,2030.

    Une solution, c'est d'ajouter une colonne COL_VALEUR_INITIALE qui sera invisible dans la version finale, et qui contient la valeur (2025 et 2030 dans mon exemple)
    Et quelque chose comme ça:

    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
    ch est une chaîne
    j0 est un entier 
    ch0 est  une chaîne 
    POUR i = 1 À 5
    	TableAjouteLigne (Table1)
    	Table1.COL_VALEUR_INITIALE [i] = NumériqueVersChaîne(2025+(i-1)*5) 
    	j0=1
    	ch = ""
    	POUR j = 1 _À_ i+2
    		ch0 = NumériqueVersChaîne(2022+j+2*i)
    		ch += [ RC] + ch0
    		SI ch0 = Table1.COL_VALEUR_INITIALE [i] ALORS j0 = j  
    	FIN
    	Table1.Colonne2[i]..Contenu = ch 
    	Table1.Colonne2[i] = j0 
    FIN
    Quand je prépare le contenu de ma combo, je regarde quel n° de ligne contient la valeur qui doit être pré-sélectionnée.
    La colonne COL_VALEUR_INITIALE n'est pas indispensable, mais ça donne de la 'traçabilité'.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Je ne comprends pas la question.
    Au moment de l'initialisation de la table, tu sais que pour telle ligne, tu veux voir 2025 par exemple, et tu veux que la combo propose les valeurs 2025, 2026 et 2027.
    Et pour la ligne suivante, tu veux voir 2030, et la combo devra proposer 20027,2028,2029,2030.

    Une solution, c'est d'ajouter une colonne COL_VALEUR_INITIALE qui sera invisible dans la version finale, et qui contient la valeur (2025 et 2030 dans mon exemple)
    Et quelque chose comme ça:

    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
    ch est une chaîne
    j0 est un entier 
    ch0 est  une chaîne 
    POUR i = 1 À 5
    	TableAjouteLigne (Table1)
    	Table1.COL_VALEUR_INITIALE [i] = NumériqueVersChaîne(2025+(i-1)*5) 
    	j0=1
    	ch = ""
    	POUR j = 1 _À_ i+2
    		ch0 = NumériqueVersChaîne(2022+j+2*i)
    		ch += [ RC] + ch0
    		SI ch0 = Table1.COL_VALEUR_INITIALE [i] ALORS j0 = j  
    	FIN
    	Table1.Colonne2[i]..Contenu = ch 
    	Table1.Colonne2[i] = j0 
    FIN
    Quand je prépare le contenu de ma combo, je regarde quel n° de ligne contient la valeur qui doit être pré-sélectionnée.
    La colonne COL_VALEUR_INITIALE n'est pas indispensable, mais ça donne de la 'traçabilité'.
    Ok je pense voir ce que tu essaies de faire ... donc avec ta dernière commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.Colonne2[i] = j0
    le champ combo va se positionner sur cette valeur ?

    J'avais tenté un listeselectplus mais ça ne marchait pas car le champ combo remplir de cette manière n'est pas reconnu en tant que liste ..

    J'essaie ta méthode cet après-midi et je poste le résultat

  7. #27
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 187
    Points : 9 171
    Points
    9 171
    Par défaut
    Ce que je ne comprends pas, c'est ta "non possibilité" de sélection par défaut. Si tu mets un listeselectplus après le remplissage des combos, ça ne fonctionne pas ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  8. #28
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Ce que je ne comprends pas, c'est ta "non possibilité" de sélection par défaut. Si tu mets un listeselectplus après le remplissage des combos, ça ne fonctionne pas ?
    alors non ça ne fonctionne pas pour un champ combo rempli par .contenu = valeur1 + RC + valeur2, etc moi je recevais une erreur m'informant que mon champ n'était pas une liste

    mais à confirmer car j'ai peut-être commis une erreur ...

  9. #29
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    J'ai donc testé avec ajout par "contenu"

    comme je traite le contenu d'une requête, ce n'est qu'à la première itération que je crée mon entrée dans la table. Ensuite, j'ajoute juste des valeurs différentes dans ma colonne de contenu..

    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
    SI HExécuteRequêteSQL(MasourceVolees,hRequêteDéfaut,MaListeVolees) ALORS
        MonCompteur = 0
     
       POUR TOUT MasourceVolees 
    	SI MonCompteur = 0 ALORS
               MaLigne = 
    TableAjouteLigne(TABLE_CreationClasses,sdMesSections.Intitule,sdMesSections.idsectionFiliere,1,MasourceVolees.IDVolee,sdMaSrcGrille.DescGrille,sdMaSrcGrille.IDGrille,sdMesSections.DénominationClasses,sdMesSections.IDSemestreDemarrage,sdMesSections.NBSemestresDeFormation,sdMesSections.LettreDeDemarrage)	
    	 TABLE_CreationClasses.COL_Volee[MaLigne].Contenu	= MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)		
        SINON
            TABLE_CreationClasses.COL_Volee[MaLigne].Contenu = TABLE_CreationClasses.COL_Volee[MaLigne].Contenu + RC + MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)
        FIN
        MonCompteur++
     FIN
     
    TABLE_CreationClasses.COL_Volee[MaLigne] = IntituleVoleeBase

    Mon champ combo m'affiche bien, pour chaque ligne, les volées liées à l'année scolaire définie

    Nom : 2023-01-20_13-01-35.jpg
Affichages : 132
Taille : 110,6 Ko

    Par contre, au démarrage, et je pense en aison de la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TABLE_CreationClasses.COL_Volee[MaLigne] = IntituleVoleeBase
    je n'ai aucune valeur par défaut qui s'affiche alors que j'aurais souhaité que la valeur 23 (sélectionnée en haut de l'écran) s'affiche par défaut

    Nom : 2023-01-20_13-04-52.jpg
Affichages : 131
Taille : 86,8 Ko

  10. #30
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    La doc dit que ces 2 instructions ci-dessous sont équivalentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ListeSelectPlus(<Champ Liste>, <Indice>)
    <Champ Liste> = <Indice>
    Mais c'est partiellement vrai.
    Dans les faits, ListeSelectPlus est utile uniquement si on a de la multi-sélection. Dans les autres cas, la 2ème syntaxe est soit identique, soit mieux que la syntaxe avec ListeSelectPlus.

    Quand on a un champ combo1 dans une fenêtre, et qu'on a combo1 dans le code, combo1 représente parfois le champ (combo1..x=10 : on déplace le champ combo1 à tel endroit), et parfois, combo1 renvoie un entier, le numéro de la ligne de la combo qui a été sélectionnée par l'utilisateur, ou -si aucune linge n'a été sélectionnée.
    Le ""compilateur"" arrive généralement à savoir si combo1 dans le code, ça représente le champ, ou cet entier.
    Mais dès qu'on sort du champ combo basique, le compilateur a de plus en plus en plus de mal, et quand il voit Table1.colcombo[3], est-ce que ceci représente le champ combo qui est dans la ligne 3 de table1 en colonne COLCOMBO, (et dans ce cas on peut modifier son contenu, sa couleur, sa police de caractère) , ou bien, est-ce que ça représente le n° de la ligne sélectionnée dans cette même combo, ce n'est jamais très clair. Souvent, on aimerait que ça représente le champ, et au final, c'est juste un entier égal à -1, parce que ça représente un n° de ligne, et s'il n'y a pas de ligne sélectionnée, c'est la valeur -1.

    Table1.ColCombo[i]..Contenu : là, ça va, il y a ..Contenu derrière, donc forcément, c'est le champ qu'on veut traiter, et pas l'entier 'ligne sélectionnée'.

    Avec la syntaxe <Champ Liste> = <Indice>, on est tranquille. A gauche du signe = , on a forcément un truc qu'on cherche à modifier. Le compilateur ne peut pas se tromper. combo=5, ça veut dire qu'on veut sélectionner la ligne 5 de cette combo.
    Avec la syntaxe ListeSelectPlus(<Champ Liste>, <Indice>) ,le compilateur commence par remplacer <Champ Liste> par sa valeur, et en l'occurrence, il fait le mauvais choix, il remplace ce truc par le numéro de ligne actuellement sélectionnée (-1 en général), puis il essaie de faire ListeSelectPlus(-1, <Indice>).

    Quelque part, le compilateur a en mémoire la liste des champs 'natifs' : les objets qu'on voit dans la description de la fenêtre. Quand l'objet qu'on manipule est facilement identifiable comme un de ces objets, il ne se trompe pas. Sinon, c'est mort.

    Ici, on a aussi cette syntaxe qui fonctionne : Table1.Colonne2[i]..valeur = j0
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  11. #31
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    Merci pour toutes ces informations, c'est très sympa et m'aide mais ....

    J'ai modifié mon code et après avoir rempli mon champ combo, je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TABLE_CreationClasses.COL_Volee[MaLigne]..Contenu = IntituleVoleeBase
    mais cette fois, toutes les lignes de mon champ combo ont été supprimées et remplacées par une valeur unique qui est 'IntituleVoleeBase'...

    J'ai dû manquer quelque chose ...

    Nom : 2023-01-20_13-24-00.jpg
Affichages : 123
Taille : 41,7 Ko

  12. #32
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 187
    Points : 9 171
    Points
    9 171
    Par défaut
    Oui, là tu dis que tu n'as qu'une valeur dans ta combo.

    Il faut que tu regardes du côté de listerecherche et de listeselectplus
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  13. #33
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    Je regarde ce code :
    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
     
    SI HExécuteRequêteSQL(MasourceVolees,hRequêteDéfaut,MaListeVolees) ALORS
       MonCompteur = 0
     
       POUR TOUT MasourceVolees 
    	SI MonCompteur = 0 ALORS
                 MaLigne = 
    TableAjouteLigne(TABLE_CreationClasses,sdMesSections.Intitule,sdMesSections.idsectionFiliere,1,MasourceVolees.IDVolee, sdMaSrcGrille.DescGrille,sdMaSrcGrille.IDGrille,sdMesSections.DénominationClasses, sdMesSections.IDSemestreDemarrage,sdMesSections.NBSemestresDeFormation,sdMesSections.LettreDeDemarrage)	
    	   TABLE_CreationClasses.COL_Volee[MaLigne].Contenu	= MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)		
           SINON
              TABLE_CreationClasses.COL_Volee[MaLigne].Contenu = TABLE_CreationClasses.COL_Volee[MaLigne].Contenu + RC + MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)
           FIN
           MonCompteur++
       FIN  //FIN POUR TOUT
       TABLE_CreationClasses.COL_Volee[MaLigne] = IntituleVoleeBase
    FIN
    Ta commande tableAjouteLigne() est plus ou moins condamnée à planter.

    Je remplacerais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableAjouteLigne(TABLE_CreationClasses,sdMesSections.Intitule,sdMesSections.idsectionFiliere,1,MasourceVolees.IDVolee,sdMaSrcGrille.DescGrille,sdMaSrcGrille.IDGrille,sdMesSections.DénominationClasses,sdMesSections.IDSemestreDemarrage,sdMesSections.NBSemestresDeFormation,sdMesSections.LettreDeDemarrage)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TableAjouteLigne(TABLE_CreationClasses)
    MaLigne = tableOccurence (TABLE_CreationClasses)
    TABLE_CreationClasses.Col_Intitule[i] =sdMesSections.Intitule
    TABLE_CreationClasses.Col_sectionFiliere[i] =sdMesSections.idsectionFiliere
    etc
    Pourquoi ? Avant ce TableAJouteLigne, la ligne n'existe pas, évidemment. La combo n'existe pas. Le tableAjouteLigne est donc amené à initialiser la combo, et choisir une ligne de la combo, et ensuite, dans les instructions suivantes, tu vas modifier TABLE_CreationClasses.COL_Volee[MaLigne].Contenu ; ça ne peut pas marcher.

    Etape 1 : tu insères une ligne Vide.
    Etape 2 : tu remplis tous les champs un par un
    Etape 3 : tu crées ta combo TABLE_CreationClasses.COL_Volee[MaLigne].Contenu = ... la liste des volées possibles pour cette ligne.
    Etape 4 : tu fais en sorte d'afficher la volée qui a été renvoyée par ta requête : TABLE_CreationClasses.COL_Volee[MaLigne].Valeur = ...


    Je viens de comprendre un autre truc dans ton code.

    Tu batis le contenu de ta combo 'en direct', c'est à dire en modifiant pas à pas le contenu du champ TABLE_CreationClasses.
    En terme de performance, tu as plutôt intérêt à jouer avec des variables autres que celles qui sont visibles à l'écran, et à la fin, informer l'écran : coucou, écran, affiche moi ce truc.
    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
     
    contenu_future_combo est une chaine
    SI HExécuteRequêteSQL(MasourceVolees,hRequêteDéfaut,MaListeVolees) ALORS
       MonCompteur = 0
       contenu_future_combo =""
       POUR TOUT MasourceVolees 
    	SI MonCompteur = 0 ALORS
                 MaLigne = 
    TableAjouteLigne(TABLE_CreationClasses,sdMesSections.Intitule,sdMesSections.idsectionFiliere,1,MasourceVolees.IDVolee, sdMaSrcGrille.DescGrille,sdMaSrcGrille.IDGrille,sdMesSections.DénominationClasses, sdMesSections.IDSemestreDemarrage,sdMesSections.NBSemestresDeFormation,sdMesSections.LettreDeDemarrage)	
    	   contenu_future_combo 	= MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)		
           SINON
              contenu_future_combo  = contenu_future_combo  + RC + MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)
           FIN
           MonCompteur++
       FIN  //FIN POUR TOUT
       TABLE_CreationClasses.COL_Volee[MaLigne]..contenu  = contenu_future_combo 	
       TABLE_CreationClasses.COL_Volee[MaLigne] = IntituleVoleeBase
    FIN
    Le truc qui te préoccupe, c'est la ligne TABLE_CreationClasses.COL_Volee[MaLigne] = IntituleVoleeBase
    IntituleVoleeBase , c'est un nombre , un n° d'année : 23, 24 ou 25 par exemple.

    Dans ton instruction contenu_future_combo = contenu_future_combo + RC + MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee) , MasourceVolees.Intitule , c'est aussi un n° d'année, et MasourceVolees.IDVolee , c'est un identifiant sans réelle signification pour l'utilisateur (101,102, 103 par exemple)

    L'intérêt de gValeurMémorisée(), c'est pour dire : ok, à l'affichage, on voit 23, 24 ou 25, mais la valeur que je veux traiter par programmation, c'est une autre, c'est 101, 102, 103.
    Quand tu fais TABLE_CreationClasses.COL_Volee[MaLigne] = IntituleVoleeBase , avec IntituleVoleeBase =23, tu dis au programme : Dans la combo, active la ligne où il y a 23 dans la gValeurMémorisée. Or, il n'y a aucune ligne avec 23 dans la gValeurMémorisée, toutes les lignes ont des numéros 'non-significatifs pour l'utilisateur'.
    Je pars du principe qu'à d'autres endroits de ta fenêtre , tu auras effectivement besoin de ces codes 101,102,103, donc on n'y touche pas.

    Je vais reproposer un truc très similaire à l'idée précédente :
    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
    22
     
    contenu_future_combo est une chaine
    j0 est un entier 
    SI HExécuteRequêteSQL(MasourceVolees,hRequêteDéfaut,MaListeVolees) ALORS
       MonCompteur = 0
       contenu_future_combo =""
       j0=1
       POUR TOUT MasourceVolees 
    	SI MonCompteur = 0 ALORS
                 MaLigne = 
    TableAjouteLigne(TABLE_CreationClasses ,sdMesSections.Intitule,sdMesSections.idsectionFiliere,1,MasourceVolees.IDVolee, sdMaSrcGrille.DescGrille,sdMaSrcGrille.IDGrille,sdMesSections.DénominationClasses, sdMesSections.IDSemestreDemarrage,sdMesSections.NBSemestresDeFormation,sdMesSections.LettreDeDemarrage)	
    	   contenu_future_combo 	= MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)
               si 		IntituleVoleeBase =MasourceVolees.Intitule  alors j0=1 
           SINON
              contenu_future_combo  = contenu_future_combo  + RC + MasourceVolees.Intitule + gValeurMémorisée(MasourceVolees.IDVolee)
               si 		IntituleVoleeBase =MasourceVolees.Intitule  alors j0=MonCompteur+1
           FIN
           MonCompteur++
       FIN  //FIN POUR TOUT
       TABLE_CreationClasses.COL_Volee[MaLigne]..contenu  = contenu_future_combo 	
       TABLE_CreationClasses.COL_Volee[MaLigne]..valeur = j0
    FIN
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  14. #34
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    TABLE_CreationClasses.COL_Volee[MaLigne]..Contenu = IntituleVoleeBase

    ..Contenu, ça sert à définir le contenu (total) de la combo : la liste de TOUTES les volées possibles.

    C'est ..Valeur qui permet de choisir une des années parmi ces années, mais avec des galères, puisque ..Valeur attend un n° d'option : si les options proposées sont 2023, 2024 et 2025, et si on veut sélectionner 2024, il faut dire ..Valeur = 2 , et pas ..Valeur = 2024.
    Et ça peut être encore autre chose si on travaille avec les gValeurMémorisée.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  15. #35
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    ouhla, beaucoup de choses, merci beaucoup tbc92...

    alors pour cela, j'ai compris merci

    L'intérêt de gValeurMémorisée(), c'est pour dire : ok, à l'affichage, on voit 23, 24 ou 25, mais la valeur que je veux traiter par programmation, c'est une autre, c'est 101, 102, 103.
    Quand tu fais TABLE_CreationClasses.COL_Volee[MaLigne] = IntituleVoleeBase , avec IntituleVoleeBase =23, tu dis au programme : Dans la combo, active la ligne où il y a 23 dans la gValeurMémorisée. Or, il n'y a aucune ligne avec 23 dans la gValeurMémorisée, toutes les lignes ont des numéros 'non-significatifs pour l'utilisateur'.
    Je pars du principe qu'à d'autres endroits de ta fenêtre , tu auras effectivement besoin de ces codes 101,102,103, donc on n'y touche pas.
    J'ai également compris que construire ma liste totale avant de l'affecter à ma liste combo est mieux, merci. Par contre, tu dis que que mon code ne marche pas ... mais il fonctionne. J'ai bien ma liste combo qui est remplie et avec les bonnes valeurs (mais cela ne change pas le fait qu'il est mieux de créer ma liste de valeurs avant de l'affecter à ma combo.)

    je modifie mon code pour coller à ton exemple et je poste le résultat...
    Merci infiniment pour toutes ces explications très claires

  16. #36
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    Fantastique !!

    Cela fonctionne très bien !!

    L'astuce était bien, comme tu l'as très bien mentionné, dans le fait d'indiquer la valeur pour la recherche et que cette dernière était liée à la valeur mémorisée et non pas à la valeur affichée...

    Toutes les volées possibles pour l'année scolaire affichée sont disponibles et la volée par défaut sélectionnée est bien celle affichée en haut de mon écran ... c'est parfait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TABLE_CreationClasses.COL_Volee[MaLigne]..valeur = j0
    Nom : 2023-01-20_15-48-38.jpg
Affichages : 115
Taille : 83,8 Ko


    Un gigantesque merci pour toutes ces explications

  17. #37
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 187
    Points : 9 171
    Points
    9 171
    Par défaut
    Je plussoie tbc92 qui t'a montré plein de trucs vachement bien

    Tu as aussi la possibilité d'utiliser ..ValeurAffichée.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  18. #38
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Je plussoie tbc92 qui t'a montré plein de trucs vachement bien

    Tu as aussi la possibilité d'utiliser ..ValeurAffichée.
    oui, c'est vraiment génial, je n'aurais pas trouvé cela tout seul ! D'ailleurs il me semble que l'aide Windev n'en parle pas non plus ...

    Selon ta remarque et si je comprends bien ...

    En utilisant macombo[indice]..valeur = xx j'active la ligne qui contient xx dans la valeur mémorisée
    En utilisant macombo [indice]..ValeurAffichée = xx j'active la ligne qui contient xx dans la valeur affichée

    est-ce bien cela ?

  19. #39
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    En utilisant macombo [indice]..ValeurAffichée = xx j'active la ligne qui contient xx dans la valeur affichée ?

    Je ne crois pas.
    La doc dit que ..ValeurAffichée permet de connaître la valeur Affichée, mais pas de modifier quoi que ce soit. C'est un truc qui est en lecture seule.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [WD25] Positionner Colonne COMBO dans une table à la valeur du fichier
    Par scn68100 dans le forum WinDev
    Réponses: 2
    Dernier message: 20/03/2020, 16h00
  2. Champs identiques avec valeur différente where dans une même table
    Par Cyrus59 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/11/2014, 16h56
  3. [WD18] Remplir combo dans une table avec valeurs différentes
    Par turkijudo dans le forum WinDev
    Réponses: 1
    Dernier message: 03/11/2014, 10h27
  4. [WD15] Combo dans champ table mémoire
    Par GCASPIC10 dans le forum WinDev
    Réponses: 2
    Dernier message: 03/02/2011, 11h49
  5. Réponses: 2
    Dernier message: 21/12/2007, 16h05

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