Checkbox en Boucle ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Startus

XLDnaute Occasionnel
Bonjour tous le monde,

Voila, je me casse la tête sur un problème concernant les checkbox à faire tourner dans une boucle.

Je m'explique:
Dans un Userform nommé 'News' il y a 13 Checkbox,
je voudrai que seule les checkbox 2 to 12 soit 11 Checkbox fasse une action lorsque leur valeur = true

Le code suivant marche mais il faudrai que je le réecrive 11 fois ce qui est fastidieux et ralentirai très certainement ma macro :

Code:
Private Sub CommandButton3_Click()
ActiveSheet.Unprotect
Range('A65536').End(xlUp).Offset(1, 0).Select
      If CheckBox2 = True Then
        ActiveCell = Format(TextBox2.Value, 'mm/dd')
        ActiveCell.Offset(0, 2) = CheckBox2.Caption
        ActiveCell.Offset(0, 1) = 'Prélvt'
        ActiveCell.Offset(0, 4) = TextBox3.Value
      End If
Range('A65536').End(xlUp).Offset(1, 0).Select
      If CheckBox3 = True Then
        ActiveCell = Format(TextBox2.Value, 'mm/dd')
        ActiveCell.Offset(0, 2) = CheckBox3.Caption
        ActiveCell.Offset(0, 1) = 'Prélvt'
        ActiveCell.Offset(0, 4) = TextBox4.Value
      End If
Range('A65536').End(xlUp).Offset(1, 0).Select
      If CheckBox4 = True Then
        ActiveCell = Format(TextBox2.Value, 'mm/dd')
        ActiveCell.Offset(0, 2) = CheckBox4.Caption
        ActiveCell.Offset(0, 1) = 'Prélvt'
        ActiveCell.Offset(0, 4) = TextBox5.Value
      End If
Range('A65536').End(xlUp).Offset(1, 0).Select
ActiveSheet.Protect
      Unload News
End Sub

Les éléments à faire tourner sont :
Checkbox 2 to 12
Textbox 3 to 13

Si une idée vous vient afin de me donner secours ca me faciliterai beaucoup le tache...
Merci par avance...
 
salut
j'avais moi aussi ce genre de souci avec un code à copier un trentaine de fois ce que j'avais fais
par la suite on m'avais donné la solution pour raccourcir ce code
je n'ai pas remarqué que la macro était plus lente ou plus rapide
utilise le copier coller et tu rectifie juste les paramettres changeants
bon tu fais ce que tu veux de mon conseil de débutant
les pros eux auront une solution plus technique à te donner
 
bonjour startus

peut etre comme ceci (sans avoir testé)

dim i as byte

for i=2 to 12
if controls('Checkbox' & i)=true
ActiveCell = Format(TextBox2.Value, 'mm/dd')
ActiveCell.Offset(0, 2) = controls('Checkbox' & i).Caption
activeCell.Offset(0, 1) = 'Prélvt'
ActiveCell.Offset(0, 4) = controls('Textbox' & i+1).Value
end if
next i

salut

edition : bonjour pascal

Message édité par: hervé, à: 15/02/2006 14:59
 
Bonjour Startus, Pascal, Hervé, bonjour le forum,

Sans avoir testé non plus mais en corrigeant les oublis d'Hervé...


Dim i As Byte

For i = 2 To 12
If Me.Controls('Checkbox' & i) = True Then
ActiveCell = Format(TextBox2.Value, 'mm/dd')
ActiveCell.Offset(0, 2) = Me.Controls('Checkbox' & i).Caption
ActiveCell.Offset(0, 1) = 'Prélvt'
ActiveCell.Offset(0, 4) = Me.Controls('Textbox' & i+1).Value
End If
Next i

Message édité par: Robert, à: 15/02/2006 15:14
 
bonjour à tous

une autre solution mais en partie comme Hervé

Private Sub CommandButton3_Click()
Dim I As Byte, L As Integer
ActiveSheet.Unprotect
For I = 2 To 12
If Controls('CheckBox' & I) = True Then
L = Range('A65536').End(xlUp).Row + 1
Range('A' & L) = Format(TextBox2.Value, 'mm/dd')
Range('B' & L) = 'Prélvt'
Range('C' & L) = Controls('CheckBox' & I).Caption
Range('E' & L) = Controls('TextBox' & I + 1).Value
End If
Next I
ActiveSheet.Protect
Unload News
End Sub
à bientôt
 
Bonsoir à tous,

Je vous remercie pour ces réponses plus que rapide...
Moi que me suis cassé la tête sur ce code depuis plusieurs jours et voila que quelques génies passe par là et mon userform est fin prêt.

Merci les gars...

J'ai opté pour le code de Robert que je trouve plus compréhensible pour mon niveau en le modifiant comme ceci :
Code:
Private Sub CommandButton3_Click()
ActiveSheet.Unprotect
Dim i As Byte
For i = 2 To 12
If Me.Controls('Checkbox' & i) = True Then
Range('A65536').End(xlUp).Offset(1, 0).Select
    ActiveCell = Format(TextBox2.Value, 'mm/dd')
    ActiveCell.Offset(0, 2) = Me.Controls('Checkbox' & i).Caption
    ActiveCell.Offset(0, 1) = 'Prélvt'
    ActiveCell.Offset(0, 4) = Me.Controls('Textbox' & i + 1).Value
End If
Next i
ActiveSheet.Protect
Unload News
End Sub

Merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
263
Réponses
4
Affichages
199
Réponses
10
Affichages
289
Réponses
5
Affichages
240
Retour