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 :

Champ liste et champ de saisie [WD20]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 88
    Points : 12
    Points
    12
    Par défaut Champ liste et champ de saisie
    Bonjour à tous,

    Je n'avais jamais eu à utiliser un champ liste dans windev et je me retrouve bloqué sur quelque chose de simple pour lequel je n'ai pas réussi à trouver la solution précisément.

    J'ai un champ Liste_Email lié à un fichier de données Contacts. Ce champ liste est en multisélection.
    Je veux, en sélectionnant dans la liste, récupérer les emails sélectionnés pour alimenter un champ de saisie SAI_Destinataires.

    Pas de souci, ça fonctionne quand je sélectionne une ligne de la liste, mais pas quand j'en sélectionne plusieurs.
    Autrement dit, comment faire pour que mon champ SAI_Destinataires récupère toutes les adresses multisélectionnées dans la Liste_Email et pas seulement une seule.

    D'avance merci du coup de pouce.

  2. #2
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 751
    Points
    9 751
    Par défaut
    Bonjour,

    Regardes l'aide Windev sur la fonction ListeSelect, ça devrait t'éclairer.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    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 057
    Points : 9 396
    Points
    9 396
    Par défaut
    "ça fonctionne quand je sélectionne une ligne de la liste, mais pas quand j'en sélectionne plusieurs."
    Je crois que tu aurais pu dire : "ça fonctionne quand je sélectionne une ligne de la liste, mais évidemment pas quand j'en sélectionne plusieurs."

    Si ton code ne fait pas de boucle pour traiter toutes les lignes sélectionnées, il ne traite qu'une ligne.
    Et si ton code fait une boucle pour traiter toutes les lignes sélectionnées, ça veut dire que tu as déjà cherché/trouvé comment connaître le nombre de lignes sélectionnées... et donc tu as la solution.

    Montrer le code 'actuel' est systématiquement une bonne piste pour lancer une question.
    Plus précisément, montrer les 5 ou 6 lignes utiles, en enlevant tout ce qui concerne autre chose. C'est utile, déjà parce que ça oblige la personne qui pose la question à réfléchir encore quelques secondes.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 88
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    "ça fonctionne quand je sélectionne une ligne de la liste, mais pas quand j'en sélectionne plusieurs."
    Je crois que tu aurais pu dire : "ça fonctionne quand je sélectionne une ligne de la liste, mais évidemment pas quand j'en sélectionne plusieurs."

    Si ton code ne fait pas de boucle pour traiter toutes les lignes sélectionnées, il ne traite qu'une ligne.
    Et si ton code fait une boucle pour traiter toutes les lignes sélectionnées, ça veut dire que tu as déjà cherché/trouvé comment connaître le nombre de lignes sélectionnées... et donc tu as la solution.

    Montrer le code 'actuel' est systématiquement une bonne piste pour lancer une question.
    Plus précisément, montrer les 5 ou 6 lignes utiles, en enlevant tout ce qui concerne autre chose. C'est utile, déjà parce que ça oblige la personne qui pose la question à réfléchir encore quelques secondes.
    tbc92, je vais te donner le code de mon bouton ; j'ai compris qu'il fallait parcourir toute la liste, j'ai compris qu'il fallait faire une boucle, mais au final, je n'arrive pas à mettre tout bout à bout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Rang est un entier = 1 
    Indice est un entier = 1 
    BOUCLE
    Rang = Rang + 1
    Indice = ListeSelect(LISTE_desEmails, Rang)
    SI Indice = -1 ALORS SORTIR
     
    POUR Indice = 1 A LISTE_desEmails..Occurrence
    SAI_Destinataires=LISTE_desEmails[indice]
     
    FIN

  5. #5
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 751
    Points
    9 751
    Par défaut
    Bonjour,

    Si tu avais été voir l'aide en ligne de Windev tu aurais trouvé un exemple explicite.

    Code WINDEV : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Lignes sélectionnées dans un champ Liste multisélection
    i est un entier = 1
    IndiceLigneSelectionnee est un entier
    IndiceLigneSelectionnee = ListeSelect(LISTE_Liste1, 1)
    TANTQUE IndiceLigneSelectionnee <> -1
      Trace("La ligne n°" + IndiceLigneSelectionnee + " est sélectionnée")
      i++
      IndiceLigneSelectionnee = ListeSelect(LISTE_Liste1, i)
    FIN
    Source

    C'est pas le plus propre, mais ça fonctionne.

    Ton 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
     
     
    Rang est un entier = 1 
    Indice est un entier = 1 
    BOUCLE
      Rang = Rang + 1
      Indice = ListeSelect(LISTE_desEmails, Rang)
      SI Indice = -1 ALORS SORTIR
     
      POUR Indice = 1 A LISTE_desEmails..Occurrence  //Pourquoi cette boucle POUR dans la BOUCLE principale ? 
        SAI_Destinataires=LISTE_desEmails[indice]       //Là, cette ligne met dans le champ de saisie SAI_Destinataires l'email sélectionné, et efface le précédent !
     
      FIN
    FIN //Il manque le dernier FIN, je suppose que c'est un mauvais copier-coller
    Je pense que tu devrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Rang est un entier = 1 
    Indice est un entier = 1 
    BOUCLE
      Indice = ListeSelect(LISTE_desEmails, Rang)
      SI Indice = -1 ALORS SORTIR
      SAI_Destinataires+= ["/"]+LISTE_desEmails[indice]
     Rang = Rang + 1
    FIN
    Voilà, je n'ai pas testé, mais ça devrait fonctionner.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    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 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Dans le code que tu proposes, il y a plein de choses à dire.
    L'indentation (= les espaces en début de ligne). Personnellement, je suis incapable de lire un programme où l'indentation n'est pas correcte. C'est un peu comme un texte où on aurait enlevé toute la ponctuation. Illisible. Soit tu es très brillant, et ça ne te pose pas de problème, mais je n'y crois pas du tout, soit tu devrais faire l'effort de mettre une indentation correcte. En plus, dans Windev, il y a une option pour le faire à ta place (regarde toutes les options du menu Code pour la trouver)
    L'instruction BOUCLE : Les ingénieurs de PCSoft sont sympas, dès qu'une syntaxe particulière existe dans tel autre langage, il essaient de la reproduire. Mais c'est un cadeau empoisonné. Je n'ai jamais vu cette instruction dans aucun programme. Oublie cette instruction, il y a d'autres façons beaucoup plus propres de faire des boucles. Je dirais même que tu as l'embarras du choix.
    Et l'instruction SORTIR : là, je suis un peu plus mitigé. Il doit y avoir des cas particuliers où cette instruction est utile. Je pense que je l'ai utilisée aussi à mes débuts. Mais dès que j'ai un peu progressé, j'ai appris à m'en passer. Instruction interdite aussi de mon point de vue.

    Sinon, pour revenir à ton problème précis, je pense que les conseils de JS sont complets. (surtout la première ligne : aller voir l'aide en ligne)
    Perso, même si j'ai pondu des milliers de lignes de code en Windev, je continue d'aller consulter cette aide en ligne dès que j'ai le moindre doute. Ca me prend 1 minute à chaque fois, mais ça me permet de ne pas galérer pendant une heure pour un petit programme de 12 lignes.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 88
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Jon Shannow Voir le message
    Bonjour,

    Si tu avais été voir l'aide en ligne de Windev tu aurais trouvé un exemple explicite.

    Code WINDEV : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Lignes sélectionnées dans un champ Liste multisélection
    i est un entier = 1
    IndiceLigneSelectionnee est un entier
    IndiceLigneSelectionnee = ListeSelect(LISTE_Liste1, 1)
    TANTQUE IndiceLigneSelectionnee <> -1
      Trace("La ligne n°" + IndiceLigneSelectionnee + " est sélectionnée")
      i++
      IndiceLigneSelectionnee = ListeSelect(LISTE_Liste1, i)
    FIN
    Source

    C'est pas le plus propre, mais ça fonctionne.

    Ton 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
     
     
    Rang est un entier = 1 
    Indice est un entier = 1 
    BOUCLE
      Rang = Rang + 1
      Indice = ListeSelect(LISTE_desEmails, Rang)
      SI Indice = -1 ALORS SORTIR
     
      POUR Indice = 1 A LISTE_desEmails..Occurrence  //Pourquoi cette boucle POUR dans la BOUCLE principale ? 
        SAI_Destinataires=LISTE_desEmails[indice]       //Là, cette ligne met dans le champ de saisie SAI_Destinataires l'email sélectionné, et efface le précédent !
     
      FIN
    FIN //Il manque le dernier FIN, je suppose que c'est un mauvais copier-coller
    Je pense que tu devrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Rang est un entier = 1 
    Indice est un entier = 1 
    BOUCLE
      Indice = ListeSelect(LISTE_desEmails, Rang)
      SI Indice = -1 ALORS SORTIR
      SAI_Destinataires+= ["/"]+LISTE_desEmails[indice]
     Rang = Rang + 1
    FIN
    Voilà, je n'ai pas testé, mais ça devrait fonctionner.

    JS
    JS je te remercie pour tes conseils et ta pédagogie qui me permettent de comprendre mes erreurs. Je crois comprendre ce qui n'allait pas dans ma logique. Encore merci pour ton aide et ton écoute.

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

Discussions similaires

  1. champ de saisie liste deroulante
    Par bjo393 dans le forum Langage
    Réponses: 7
    Dernier message: 02/05/2013, 16h53
  2. Réponses: 2
    Dernier message: 09/06/2009, 09h28
  3. Liste déroulante avec champ de saisie
    Par midotoon dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/03/2009, 17h46
  4. Réponses: 18
    Dernier message: 09/11/2006, 17h28
  5. [STRUTS] Liste de champs de saisie
    Par Resyek dans le forum Struts 1
    Réponses: 3
    Dernier message: 09/03/2006, 17h54

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