Excel2010 traitement auto checkbox pour listbox

Résolu
ced3c Messages postés 240 Statut Membre -  
ced3c Messages postés 240 Statut Membre -
Bonjour et merci d'avance pour votre aide,
Dans un userform j'ai 31 checkbox et 1 listbox
J'aimerai quand je coche certaines checkbox, que le caption des checkbox s affiche dans la listbox et s enlève si je décoche
J'arrive a le faire en individuel

Private Sub CheckBox1_Click() 
If CheckBox1 = True Then 
ListBox1.AddItem CheckBox1.Caption 
ElseIf CheckBox1 = False Then 
ListBox1.RemoveItem CheckBox1 
Else 
End If 
End Sub


mais je ne sais pas comment le faire pour toutes mes checkbox (je cherche à éviter de répéter 31 fois le meme code pour chaque checkbox)

Toute aide est la bienvenue
merci

7 réponses

  1. ced3c Messages postés 240 Statut Membre 5
     
    je continue de chercher sur le net
    Je pense qu'il faut passer par une boucle du style
    for i = 1 to 31
    mais je ne sais pas comment le construire

    Une petite aide svp ?
    0
  2. ced3c Messages postés 240 Statut Membre 5
     
    désolé de relancer le sujet mais je ne trouve pas comment faire

    Je dois faire une procedure générique et l'appeller pour chaque checkbox ?
    j'ai essayer quelques chose comme cela mais bien évidement cela ne marche pas

    Sub traitement()
    Dim i As Integer
    For i = 1 To 31
        If CheckBox(i) = True Then
        ListBox1.AddItem CheckBox(i).Caption
        ElseIf CheckBox(i) = False Then
        ListBox1.RemoveItem CheckBox(i)
        Else
        End If
    Next
    End Sub


    dans ce code je voulais remplacer le chiffre des checkbox par "i" pour en faire un code générique

    puis je voulais appeler cette procedure pour chaque checkbox soit :

    Private Sub CheckBox1_Click()
    Call traitement
    End Sub

    Private Sub CheckBox1_Click()
    Call traitement
    End Sub

    etc ... jusqu'a checkbox31

    visiblement ce n'est pas bon du tout. Peut etre meme que je complique le code

    Pourriez vous me dire comment je dois procéder svp ?
    0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    boucle sur des textbox :
    For i = 1 to 20
    UserForm1.Controls("textbox" & i).value= "blablabla..."
    next i

    Mais essaie plutôt en passant le n° checkbox en paramètre pour n'agir que sur celui cliqué.

    Et n'oublie pas qu'en joignant systématiquement un fichier de test tu augmentes les réponses.
    Déposer le fichier xls (réduit au nécessaire et anonymisé) sur cjoint.com et coller ici le lien fourni.

    eric

    Jamais tu ne répondras à un mp non sollicité...
    Bon, ça c'est fait.
    0
  4. ced3c Messages postés 240 Statut Membre 5
     
    oui c est vrai que j aurai pu joindre le fichier
    J essaie votre solution

    Merci beaucoup pour votre reponse
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      J'ai ajouté ça :
      Mais essaie plutôt en passant le n° checkbox en paramètre pour n'agir que sur celui cliqué.
      Je ne sais pas si tu l'as vu...

      eric
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ced3c Messages postés 240 Statut Membre 5
     
    J ai essayer d'integrer tout ca mais je suis visiblement pas tres doué

    Je joint le fichier si vous avez la patience de regarder
    le code est en debut du userform "vente" dans la procedure "traitement"

    https://www.cjoint.com/?3KnoEe5Woy7

    merci d avance
    0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour tout le monde,

    En fait, ce serait plus "compliqué", mais plus propre de passer par un module de classe.

    Mais sinon, pour répondre à la question telle qu'elle est posée :

    Option Explicit
    
    Sub traitement(numCheck As Integer)
    Dim i As Integer
    
        If Me.Controls("CheckBox" & numCheck) = True Then
            ListBox1.AddItem Me.Controls("CheckBox" & numCheck).Caption
        ElseIf Me.Controls("CheckBox" & numCheck) = False Then
            For i = 0 To ListBox1.ListCount - 1
                If ListBox1.List(i) = Me.Controls("CheckBox" & numCheck).Caption Then
                    ListBox1.RemoveItem i
                    Exit For
                End If
            Next i
        Else
        End If
    End Sub
    
    
    Private Sub CheckBox1_Change()
    Call traitement(1)
    End Sub
    
    Private Sub CheckBox2_Change()
    Call traitement(2)
    End Sub
    
    Private Sub CheckBox3_Change()
    Call traitement(3)
    End Sub
    
    Private Sub CheckBox4_Change()
    Call traitement(4)
    End Sub
    
    Private Sub CheckBox5_Change()
    Call traitement(5)
    End Sub
    
    Private Sub CheckBox6_Change()
    Call traitement(6)
    End Sub
    
    'etc etc etc etc..... 
    
    Private Sub CheckBox31_Change()
    Call traitement(31)
    End Sub
    
    

    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Voici une astuce CCM traitant de ce genre de code avec module de classe :
      https://www.commentcamarche.net/faq/10397-vba-et-les-collections-d-objets

      Salut Eric, excuse je n'avais pas vu que tu proposais déjà de placer le numéro du check en paramètre...
      0
  8. ced3c Messages postés 240 Statut Membre 5
     
    merci beaucoup pour la reponse :)
    C'est exactement ce que j esperai
    je vais regarder le lien du module de classe

    Grand merci a vous 2
    0