Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Boucle CheckBox, comment faire plus simple?

jeanba

XLDnaute Occasionnel
Bonjour à tous,

Je suis déjà assez content d'être arrivé jusque là dans mon projet, grâce à la contribution de notre communauté.
Mais, face à un USF avec 12 CkecBox, j'ai cherché en vain comment faire le contrôle en fonction de la case cochée, faire exécuter ensuite mon code, sans avoir à répéter 12 fois la même chose...


Private Sub USF12_CommandButton2_Click()
Unload Me
If USF12_CheckBox1.Value = True Then
With Sheets("Janvier")
mon code...

If USF12_CheckBox2.Value = True Then
With Sheets("Février")

mon code...

End Sub


Je suis certain qu'au lieu de répéter 12 fois ce code, il y a moyen de faire plus court..
Merci d'avance!
Jeanba
 

pierrejean

XLDnaute Barbatruc
A tester:

Private Sub USF12_CommandButton2_Click()
Unload Me
Mois=Array("Janvier","Fevrier",".......)
For n=1 to 12
If Me.Controls("CheckBox" & n).Value = True Then
With Sheets(Mois(n-1))
mon code...

End Sub
 

jeanba

XLDnaute Occasionnel
Bonjour pierrejean,

Merci pour ta réponse rapide.
J'ai testé le code, il bloque sur cette ligne:

If Me.Controls("CheckBox" & n).Value = True Then

Y a peut-être un truc qu'il n'y a pas apprécié...?
 

jeanba

XLDnaute Occasionnel
Mon Cher pierrejean,

Désolé pour le temps de réponse, faut aller chercher les mom de l'école et bazar des bouchons...
Ecoute, je viens de retester, et en fait, ça marche!
Y avait une erreur dans mon code en bas..
Merci beaucoup!

Jeanba
 

jeanba

XLDnaute Occasionnel
(Avec un peu de chance, un insomniaque comme moi pourrait peut-être y jeter un coup d'oeil...)

Bonsoir,

Là, je n'y comprends rien: la journée, ce code fonctionnait à merveille. Et voilà qu'avant d'aller me coucher, j'ai décidé de faire le point des sous-programmes. Et là!!! ça marche plus!!!

Private Sub USF5_CommandButton2_Click()
Unload Me
Mois = (Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", _
"Décembre"))
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then 'Le programme bloque sur cette ligne d'instruction
With Sheets(Mois(i - 1))
If Range("D4").Value <> "" Then
réponse = MsgBox("Le document " & i & " a déjà été imprimé!" & Chr(13) & Chr(10) & "Cliquer sur OUI pour le réimprimer ou sur NON pour annuler cette opération", vbYesNo, "Procédure de clôture à confirmer")
If réponse = vbNo Then
MsgBox ("Procédure annulée!")
End If
.Visible = True
.Select
Call Deverrouiller_Feuille
Call Masque_Lignes_vides
Range("D4").Value = "Journal imprimé le " & Now
Call Proteger_Feuille
.PrintOut
.Visible = False
End If
End With
End If
Next i
End Sub


Merci par avance
Jeanba
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je ne sais pas répondre à ton problème car je ne suis pas un expert en VBA (d'ailleurs je bloque dès la première ligne de ta macro car je ne comprends pas pourquoi il y a un "Unload Me"... ), mais pour mettre ton code en forme je sais que tu peux utiliser la balise "code" avec le paramètre "VB".
Donc :
- tu ouvres la balise ainsi : code=VB que tu mets entre crochets,
- tu colles ton code,
- tu fermes la balise ainsi : /code que tu mets entre crochets.

VB:
Private Sub USF5_CommandButton2_Click()
Unload Me
Mois = (Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"))
For i = 1 To 12
    If Me.Controls("CheckBox" & i).Value = True Then   'Le programme bloque sur cette ligne d'instruction
          With Sheets(Mois(i - 1))
              If Range("D4").Value <> "" Then
                  réponse = MsgBox("Le document " & i & " a déjà été imprimé!" & Chr(13) & Chr(10) & "Cliquer sur OUI pour le réimprimer ou sur NON pour annuler cette opération", vbYesNo, "Procédure de clôture à confirmer")
                  If réponse = vbNo Then
                      MsgBox ("Procédure annulée!")
                  End If
                  .Visible = True
                 .Select
                 Call Deverrouiller_Feuille
                 Call Masque_Lignes_vides
                 Range("D4").Value = "Journal imprimé le " & Now
                 Call Proteger_Feuille
                 .PrintOut
                 .Visible = False
             End If
         End With
    End If
Next i
End Sub
 

jeanba

XLDnaute Occasionnel
Bonjour Marcel32 et merci pour le conseil . Je saurai m'en souvenir .

J'espère qu'il y aura quelqu'un qui pourra m'aider pour le reste.

Pierrejean , je sais que tu attendais un fichier exemple . Le problème est que dans le fichier exemple , ton code fonctionne bien . Mais , lorsque je l'intègre dans mon projet final , il bug sur la ligne soulignée . ..

Encore merci !
 

jeanba

XLDnaute Occasionnel
Bonjour Marcel32,

Tu es bien trop modeste pour dire que t'es pas un expert en vba. Pourtant, tu viens de trouver la réponse à mon souci . ..
C'était là évidemment, car j'ai la fâcheuse habitude de rattacher chaque checkbox à son usf. Merci beaucoup !
 

jeanba

XLDnaute Occasionnel
Bonjour Marcel32,

Tu es bien trop modeste pour dire que t'es pas un expert en vba. Pourtant, tu viens de trouver la réponse à mon souci . ..
C'était là évidemment, car j'ai la fâcheuse habitude de rattacher chaque checkbox à son usf. Merci beaucoup !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…