Excel2010 traitement auto checkbox pour listbox

Résolu/Fermé
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - Modifié par ced3c le 9/11/2012 à 15:43
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - 13 nov. 2012 à 14:54
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

A voir également:

7 réponses

ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
9 nov. 2012 à 15:45
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
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
11 nov. 2012 à 18:24
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 11/11/2012 à 20:04
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
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
11 nov. 2012 à 20:05
oui c est vrai que j aurai pu joindre le fichier
J essaie votre solution

Merci beaucoup pour votre reponse
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
11 nov. 2012 à 20:07
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
13 nov. 2012 à 14:31
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
13 nov. 2012 à 14:42
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
13 nov. 2012 à 14:44
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
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
13 nov. 2012 à 14:54
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