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

Macros et VBA Excel Discussion :

[VBA-E] Affichage captions des chekbox actifs dans une list box


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut
    Bonsoir Bbil, bonsoir tous,
    voila j'ai une petite question a te poser Bbil, a partir d'un userfurm j'ai plusieurs checkboxs et une listbox , je veux en fait afficher ds la listbox tout les captions des checkboxs que j'ai couché , je sais que ce n'est pas compliqué , mais je n'arrive pas a le faire je pensais que si je fait une boucle ds le userform ca devait marcher mais non! c'est pas le cas

    merci de votre réponse

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Si, c'est possible en examinant le type ou le nom du contrôle que tu veux identifier. Si je ne me trompe pas, Silky a donné la solution récemment en passant par le type du contrôle. Malheureusement, je n'ai pas retrouvé la syntaxe.
    Pour identifier les contrôles par leurs noms, une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For each Contrôle in Userform1.controls
        LeNomDuContrôle = Contrôle.name
    Next
    Avant de connaître la syntaxe sur le type, j'utilisais un nom dont une partie était commune à tous les contrôles que je voulais traiter en même temps. Ensuite, dans la boucle, je faisais une recherche sur cette partie commune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if instr(lcase(Contrôle.name), PartieCommune) <> 0 then
    Tu dis

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut Application en VBA
    Bonjour ouskel'n'or, bonjour Bbil, bonjour tous,
    merci ouskel'n'or de ta reponse mais je n'ai pas trop compris ce que tu m'as proposé
    pour le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For each Contrôle in Userform1.controls
        LeNomDuContrôle = Contrôle.name
    Next
    je ne peux pas l'appliquer car je travaille sur une page ( mon Userform contient plusieurs pages, et j'en ai d'autre checkbox dans d'autre pages en fait dans ma page j'ai 10 CheckBox et une list box
    voila le 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
     
    Private Sub CheckBox1_Click()
    Select Case CheckBox1.Value
            Case True: ListBox.AddItem CheckBox1.Caption
            Case False: ListBox.Clear                           
    End Select
    End Sub
    .
    .
    .
    Private Sub CheckBox10_Click()
    Select Case CheckBox10.Value
            Case True: ListBox.AddItem CheckBox10.Caption
            Case False: ListBox.Clear                           
    End Select
    End Sub
    le probleme maintenant qui se pose pour moi c'est que quand j'active un checkbox il s'ajoute bien dans la listbox mais quand je le desactive y'a tout les autres CheckboxX.caption qui s'efface de la listbox

    coemment faire dans ce cas la ?

    merci pour vos suggestions

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bonjour,
    je n'ai pas lu le début de ce post, mais il me semble que si tu fait un ListBox.Clear, tout le contenu de la ListBox va s'effacer. Si tu ne souhaites effacer que certains elements de ta ListBox, il faut la parcourir jusqu'à ce que tu trouves l'élément à supprimer puis le supprimer.
    Si tu as un AddItem tu devrais avoir un RemoveItem.

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut
    ça n'a pas marché
    j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Select Case CheckBox1.Value
            Case True: ListBox.AddItem CheckBox1.Caption
            Case False: ListBox.RemoveItem CheckBox1.Caption
     
    End Select
    et j'ai comme message d'erreur:
    argument non Valide!

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Heu... est ce que tu as regardé une doc pour savoir comment s'utilise la méthode RemoveItem d'une ListBox ?
    Tu doit lui passer en paramètre la position de l'item à supprimer.
    CheckBox1.Caption -> est ce un nombre ? Je ne pense pas, pour moi un caption est une string, je peut me tromper, mais j'en doute.

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut
    mais je n'ai pas indexé ma liste a ce que je sache
    (je sais , je sais je suis trop nulle pour comprendre ce que tu dis )
    veux tu stp m'expliquer d'avange!
    merci a toi

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je n'ai jamais utlisé de ListBox en VB, mais cela doit être comme toute liste. Lorsque Tu ajoutes un élément dans ta liste, cet élément aura un index. Un peu comme une liste de course où devant chaque article que tu acheteras un numero sera affecté. Tu demarre de 0 ou de 1 pour le premier article et tu incrémente de 1 en 1 pour les suivant que tu ajoute à ta liste. Un remove d'une liste ne fonctionne que si tu lui donne le numéro d'index de l'item à supprimer. Donc dans ton cas, tu doit parcourir ta liste du début (0 ou 1) à la fin (fin de la liste, peut être que la méthode count, renvoyant le nombre d'élément, est implémenté pour une ListBox). Et pendant ce parcours tu tests pour chaque élément s'il correspond à celui que tu recherches. Et lorsque tu l'as trouvé, tu notes le numéro d'index (un index que tu incrémentes à chaque tour de boucle te permet de connaitre le numero d'index) et une fois sortie de la boucle, tu peut faire ton RemoveItem.
    C'est assez simple, non ? .
    Si tu veux des meilleurs explications, il doit y avoir des docs sur la ListBox. D'ailleur tu devrais faire une recherche sur les ListBox, pour connaître toute les méthodes utilisable pour cette objet.

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut
    ok merci je vais regarder ça

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut
    Bonjour a tous,
    voila pour faire un essai j'ai pris un Userform avec deux CheckBox et une listBox, j'ai appliqué ce code pour qu'a chaque fois que je coche un checkbox sa propriété caption viens s'ajouter a ma listbox et si je la decoche qu'il s'efface de la listbox

    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
     
    Private Sub CheckBox1_Change()
    If CheckBox1.Value = True Then
        ListBox1.AddItem CheckBox1.Caption, 0
        Else
      ListBox1.RemoveItem 0
    End If
    End Sub
     
    Private Sub CheckBox2_Change()
    If CheckBox2.Value = True Then
        ListBox1.AddItem CheckBox2.Caption, 1
        Else
      ListBox1.RemoveItem 1
    End If
    End Sub
    ça a marché mais il faut absolument cocher le premier chekcbox pour commencer ! si je coche directement le deuxieme, il me genere un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Erreur d'execution '-2147024809(80070057)'
    Argument non valide
    pourriez vous me dire qu'est ce que je dois faire dans ce cas la ?
    merci

  11. #11
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Pas si simple ton histoire
    tu n'as pas le droit d'ajouter un élément d'une liste avec l'index 1 si la liste est vide
    Le plus simple, à mon sens est de régénérer ta liste à chaque click sur un Checkbox :
    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
    Private Sub RemplirList()
    Dim Ctrl As Control
        ListBox1.Clear
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is msforms.CheckBox Then _
               If Ctrl.Value Then ListBox1.AddItem Ctrl.Caption
        Next
    End Sub
     
    Private Sub CheckBox1_Click()
        RemplirList
    End Sub
     
    Private Sub CheckBox2_Click()
        RemplirList
    End Sub

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Lorsque tu fais un additem, tu lui spécifie l'index pour l'ajout. Donc si tu commence par la checkbox 2 , tu veux ajouter à l'index 1 or je pense que c'est impossible, il doit falloir absolument commencer par l'index 0.

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Ok, par contre je ne sais pas si t réponse va lui convenir, parce que justement, au début il cherché à effacer une seule checkbox de la listbox sans supprimer les autres et il utilisais clear parce qu'il ne connaissais pas removeitem. Et ensuite son problème devenais dans l'utilisation de removeitem qui demande en parametre un numero d'index et il ne le savais pas et il ne svaias pas forcement comment le récuperer.

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut
    vous dites qu'il fallait absolument que je commence mon code par l'index 0 c'est ce que j'ai fait, d'ailleur je l'ai noté sur le code de mon message !

  15. #15
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par accro-macro
    vous dites qu'il fallait absolument que je commence mon code par l'index 0 c'est ce que j'ai fait
    Ah oui, surtout si tu commences par clicker la Checkbox n2

    un petit effort de compréhension, stp

  16. #16
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 11
    Points
    11
    Par défaut
    ce que je cherche a faire Cedric c'est que si je coche mon checkbox qu'il s'affiche sur ma listbox et si je le decoche qu'il s'efface c'est tout

  17. #17
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par accro-macro
    ce que je cherche a faire Cedric c'est que si je coche mon checkbox qu'il s'affiche sur ma listbox et si je le decoche qu'il s'efface c'est tout
    Et tu as essayé ce que je t'ai mis !!!!!!!!!


    Non, mais c'est pas vrai

  18. #18
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Ce que l'on te disais, c'est que le premier élément que tu ajoutes à listbox, tu doit l'ajouter avec l'index 0. Or si tu commences par cliquer sur la checkbox 2, tu l'ajoutes à l'index 1.

    ThierryAim, dans ton code tu efface bien la listbox à chaque appel ? Dans ce cas, tu n'ajoute pas un élément à la listbox, tu en recrés une et tu y ajoute un element, est ce que je me trompe ?

  19. #19
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par cedric600
    ThierryAim, dans ton code tu efface bien la listbox à chaque appel ? Dans ce cas, tu n'ajoute pas un élément à la listbox, tu en recrés une et tu y ajoute un element, est ce que je me trompe ?
    Oui
    il n'a pas 250000 checkboxs a mettre dans sa liste alors qu'est-ce qui est le plus simple en code et le plus rapide, d'après toi ?
    - faire une recherche dans la liste en comparant le caption (puisque tu ne sais pas dans quel ordre l'ajout s'est fait)
    - ou détruire la liste et la reconstruire à chaque click

    et explique moi la différence au final

  20. #20
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Voila c'est que moi je suis partis de la :
    le probleme maintenant qui se pose pour moi c'est que quand j'active un checkbox il s'ajoute bien dans la listbox mais quand je le desactive y'a tout les autres CheckboxX.caption qui s'efface de la listbox
    je n'ai pas lu le debut de la discussion par ce que quand j'ai vu dans le code listbox.clear ca me paraissais normal que tout disparaisse et pas juste 1 checkbox. Donc je lui ai dit.
    Et donc avec ta solution j'ai l'impression que l'on retombe sur son problème. Maintenant je pense que c accro-macro qui nous dira si ton code lui conviens ou non, et ceci en l'essayant.
    Sinon ton code est très bien .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Afficher des données importées dans une list box
    Par accessbeginner dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 11/06/2015, 15h51
  2. Problème de l'affichage de deux colonnes filtrés dans une liste box
    Par Dr walid dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/06/2014, 02h35
  3. Copier des cellules excel dans une liste déroulante vba
    Par Papillon34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/01/2010, 16h03
  4. affichage des polices dans une liste box
    Par sanach dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/03/2008, 16h22
  5. Insérer des check buttons dans une list box
    Par cecile900 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 09/01/2007, 12h10

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