Checkbox en Boucle ?

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...
 
P

pascal21

Guest
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
 

Hervé

XLDnaute Barbatruc
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
 

Robert

XLDnaute Barbatruc
Repose en paix
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
 

Bebere

XLDnaute Barbatruc
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
 

Startus

XLDnaute Occasionnel
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
 

Statistiques des forums

Discussions
312 449
Messages
2 088 508
Membres
103 873
dernier inscrit
Sabin