Test sur plusieurs CheckBoxs

dudulleray -  
 dudulleray -
Bonjour a toutes et tous, Forum bonjour



J'ai un UserForm1 plus un Frame3 ou j'ai placer 14 CheckBoxs de 1 à 14
ainsi que 14 Labels de 82 à 95
Je souhaiterai svp si possible afficher la date du jour dans les Labels

Ex: Si je clic pour coché sur un des CheckBoxs que cela m'affiche la date du jour dans le Label correspondant et si je reclic que ça efface (au cas ou je me planterai de ligne), LOL

Ex:
Checkbox1 pour Label82
Checkbox2 pour Label83
Checkbox3 pour Label84 Etc etc

PS: Code bon pour affichage de la date
WorksheetFunction.Proper(Format(Now, "Dddd dd Mmmm yyyy"))


Le but étant de valider des dépenses mensuelles une fois débiter de mon compte.
Donc il faudrai que les ChecBoxs restent cochés afin de les retrouver dans l'état quand je ré-ouvre l'userform1, ca va de soi LOL

j'ai vu qu'on pouvait par une boucle gérer tout ça, afin d'éviter 14 fois une répètition du code, mais je ne retrouve pas ce code.

Merci a vous, bon Dimanche et a plus tard

Bye Raymond
A voir également:

13 réponses

dudulleray
 
Bonjour a toutes et tous, forum bonjour

J'ai chercher et fait maintes essais et je ne trouve pas comment faire

Svp si quelqu'un a un petit code, pour mon programme ça m'arrangerai

bien et me permettrai d'avancer. merci d'avance

Sinon je vous souhaitent une bonne après midi

Merci de votre temps et de votre aide

Cdlt
1
Yoda
 
Bonjour,

Tu dois reserver une partie de ta feuille Excel pour stocker les états des checkboxes et les libellés des labels si tu veux les retouver à la prochaine session.
Du coup, ce serait plus simple en utilisant un beau tableau excel avec les formules adéquates, pas besoin de code VBA pour faire ce que tu demandes.

;)
1
Yoda
 
Voilà un exemple, j'ai pris feuil1 pour conserver les valeurs mais tu peux changer le nom

'cette procédure est a compléter ou à créer dans le code de UserForm1
Private Sub UserForm_Initialize()
'Tes instructions
'................
Init_CheckBox
End Sub

'cette procédure est à coller dans le code de UserForm1
'faire autant de procédures que de checkbox
'modifier les numéros des chekbox et des labels
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
   Label1.Caption = WorksheetFunction.Proper(Format(Now, "Dddd dd Mmmm yyyy"))
   Sheets("feuil1").Range("A1").Value = 1
   Sheets("feuil1").Range("B1").Value = Label1.Caption
Else
   Label1.Caption = ""
   Sheets("feuil1").Range("A1").Value = 0
   Sheets("feuil1").Range("B1").Value = Label1.Caption
End If
End Sub

'cette procédure est à coller dans le code de le code de UserForm1
'compléter le code suivant le modèle de Checkbox1
'autant de fois que de checkboxs
'modifier les numéros des chekboxs et des labels
Private Sub Init_CheckBox()
'Checkbox1
If Sheets("feuil1").Range("A1") = 1 Then
   CheckBox1.Value = True
   Label1.Caption = Sheets("feuil1").Range("B1").Value
Else
   CheckBox1.Value = False
   Label1.Caption = Sheets("feuil1").Range("B1").Value
End If

'Checkbox2
'........
'........

End Sub

Bon courage.
1
Paf
 
Bonjour,

pour le problème de boucle:
Dim MonControl As Control 
For i = 1 To 25 
  MaCheck = "CheckBox" & i on crée une var contenant le nom de la checkbox 
  MonLab = "Label" & i + 81 'on crée le nom du Label correspondant 
    If Controls(MaCheck).Value = True Then 
        Controls(MonLab).Caption = "C'est Coché  "  
    Else 
        Controls(MonLab).Caption = "C'est décoché"  
    End If 
Next
ce code sera lancé par un bouton par exemple.

Pour qu'un clic sur une checkbox mette à jour son label, et sans copier le code pour chaque checkbox, il faut utiliser des collections d'objets et des collections de classe .

Pour cela se référer au dossier de lermite222 en suivant le lien ci dessous
http://www.commentcamarche.net/faq/31279-vba-ajouter-des-controles-dynamiquement-dans-un-userform

Bonne suite et bonne lecture
1
dudulleray
 
Salut Paf

Merci pour ta réponse, je vais testé ce code également et pour le lien, je sais bien
mais les modules de classe hum pas encore assez costaud pour faire

par contre il y a beaucoup de doc sur le net pour les modules de classe, je regarderai aussi

Encore merci a toi je te souhaite une bonne fin d'après midi

Cdlt Ray
0

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

Posez votre question
gardiendelanuit Messages postés 1854 Statut Membre 264
 
Bonjour,

Ton problème serait peut-être mieux dans la partie Bureautique.
0
dudulleray
 
Bonjour gardiendelanuit,

J'ai vérifier je suis dans le bon Forum, vu que je demande un code Excel 2007
pour résoudre un problème auquel je ne suis pas parvenu

Pour la bureautique pas du tout ma tasse de thé

Merci tout de mème de ta réponse

Cdtl
0
dudulleray
 
Salut Yoda,

Merci beucoup pour ta réponse, j'ai la place pour la réservation sur ma feuille, mais je ne sais pas pour coder pour stocker les états et les labels.

Si tu a le temps et si tu veux bien me faire un exemple en vba après je me débrouillerai

je vais continuer mon programme car trop avancé pour faire marche arrière
j'ai passer des heures a contruire sur le papier etc etc

Merci d'avance pour ton aide

Cdlt Ray
0
dudulleray
 
Re Salut yoda

Je te remercie beaucoup pour le code , je vais essayer dès que possible, je fini la compta, pendant que je suis dans les chiffres, pas le droit a l'erreur.

j'ai regarder le code heureusement que je n'ai pas 200 CheckBoxs

Une question svp, pourquoi ne pas faire une boucle sur le nombre de CheckBoxs , cela
éviterai le répètitif, je n'ai pas vraiment trouver sur le net quelque chose de concret
sur les checkBoxs.

if i =1 to 25 
if checkboxs(i) =true then 

next i


Bon voila, encore merci pour l'aide que tu m'apportes

bonne apres midi

Cdlt
0
Yoda
 
Il doit y avoir moyen d'accéder aux checkboxs par une boucle For Each ... Next.
Mais de tête je ne sais plus, il faut chercher sur internet et j'ai un peu la flemme.
Cette methode est lourde, mais finalement assez simple.

A moins qu'un spécialiste VBA Excel ne veuille prendre le relais...
;)
0
dudulleray
 
Re

Ok merci pour la réponse, c'est un code avec une boucle For Each ... Next que j'avais
vu, je vais essayer de nouveau retrouver et de chercher dans ce sens.

sinon je ferais des essais avec ton code, j'ai imprimer comme je perds pas

A plus tard et encore merci a toi, c'est sympa

Cdlt Ray
0
dudulleray
 
Bonjour Yoda, Bonjour Paf, forum



J'ai réussi a faire le code ci dessous ca fonctionne sauf que lorsque je réouvre mon fichier, les données des Labels sont bien restitués MAIS toutes les CheckBoxs se trouvent décochés, je ne sais pas pourquoi.
Merci pour vos conseils d'hier, c'est gentil a vous, si une solution LOL je suis preneur

Bonne journée a vous

Cordialement Ray

Private Sub UserForm_Initialize()
Dim I
'*** Récupérer les valeurs des CheckBox et labels
For I = 1 To 14
Me.Controls("Label" & 180 + I) = Sheets("USF").Cells(I, 2)
If Me.Controls("Label" & 180 + I) <> "" Then
Me.Controls("Label" & 180 + I).BackColor = vbGreen
End If
Next I
End Sub

'********** TEXTBOX (1)
Private Sub TextBox1_Change()
Sheets("USF").Cells(TextBox2.Value, 1) = TextBox1.Value
If TextBox1.Value = 0 Then
Me.Controls("Label" & 180 + TextBox2.Value).BackColor = &HFFFFC0
Me.Controls("Label" & 180 + TextBox2.Value).Caption = ""
Sheets("USF").Cells(TextBox2.Value, 2) = ""
Else
Me.Controls("Label" & 180 + TextBox2.Value).BackColor = vbGreen
Me.Controls("Label" & 180 + TextBox2.Value).Caption = WorksheetFunction.Proper(Format(Now, "Dddd dd Mmmm yyyy"))
Sheets("USF").Cells(TextBox2.Value, 2) = WorksheetFunction.Proper(Format(Now, "Dddd dd Mmmm yyyy"))
End If
End Sub

'********** TEXTBOX (2)
Private Sub TextBox2_Change()
Sheets("USF").Cells(TextBox2.Value, 1) = TextBox1.Value
If TextBox1.Value = 0 Then
Me.Controls("Label" & 180 + TextBox2.Value).BackColor = &HFFFFC0
Me.Controls("Label" & 180 + TextBox2.Value).Caption = ""
Sheets("USF").Cells(TextBox2.Value, 2) = ""
Else
Me.Controls("Label" & 180 + TextBox2.Value).BackColor = vbGreen
Me.Controls("Label" & 180 + TextBox2.Value).Caption = WorksheetFunction.Proper(Format(Now, "Dddd dd Mmmm yyyy"))
Sheets("USF").Cells(TextBox2.Value, 2) = WorksheetFunction.Proper(Format(Now, "Dddd dd Mmmm yyyy"))
End If
End Sub

'############## CHECKBOX (1 à 14)  LABELS (181 à 194)
Private Sub CheckBox1_Click()
TextBox2.Value = 1
TextBox1.Value = CheckBox1.Value * -1
End Sub

Private Sub CheckBox2_Click()
TextBox2.Value = 2
TextBox1.Value = CheckBox2.Value * -1
End Sub

Private Sub CheckBox3_Click()
TextBox2.Value = 3
TextBox1.Value = CheckBox3.Value * -1
End Sub

Private Sub CheckBox4_Click()
TextBox2.Value = 4
TextBox1.Value = CheckBox4.Value * -1
End Sub

Private Sub CheckBox5_Click()
TextBox2.Value = 5
TextBox1.Value = CheckBox5.Value * -1
End Sub

Private Sub CheckBox6_Click()
TextBox2.Value = 6
TextBox1.Value = CheckBox6.Value * -1
End Sub

Private Sub CheckBox7_Click()
TextBox2.Value = 7
TextBox1.Value = CheckBox7.Value * -1
End Sub

Private Sub CheckBox8_Click()
TextBox2.Value = 8
TextBox1.Value = CheckBox8.Value * -1
End Sub

Private Sub CheckBox9_Click()
TextBox2.Value = 9
TextBox1.Value = CheckBox9.Value * -1
End Sub

Private Sub CheckBox10_Click()
TextBox2.Value = 10
TextBox1.Value = CheckBox10.Value * -1
End Sub

Private Sub CheckBox11_Click()
TextBox2.Value = 11
TextBox1.Value = CheckBox11.Value * -1
End Sub

Private Sub CheckBox12_Click()
TextBox2.Value = 12
TextBox1.Value = CheckBox12.Value * -1
End Sub

Private Sub CheckBox13_Click()
TextBox2.Value = 13
TextBox1.Value = CheckBox13.Value * -1
End Sub

Private Sub CheckBox14_Click()
TextBox2.Value = 14
TextBox1.Value = CheckBox14.Value * -1
End Sub

0
Yoda
 
Bonjour,

Tu as oublié d'initialiser les CheckBox.

Private Sub UserForm_Initialize()
Dim I
'*** Récupérer les valeurs des CheckBox et labels
For I = 1 To 14
'Init CheckBox
If Sheets("USF").Cells(I, 1)>0 Then
   Me.Controls("CheckBox" & I).Value = True
Else
   Me.Controls("CheckBox" & I).Value = False
End If

'Init Label
Me.Controls("Label" & 180 + I) = Sheets("USF").Cells(I, 2)
If Me.Controls("Label" & 180 + I) <> "" Then
Me.Controls("Label" & 180 + I).BackColor = vbGreen
End If
Next I
End Sub
0
dudulleray
 
Re salut yoda

Merci pour ta réponse, Génial ca fonctionne très bien, je te remercie beaucoup pour la modification, nickel super sympa.

Une question svp j'ai bien regarder le code en entier et Je pense qu'il doit etre possible de supprimer les deux Textboxs (1 et 2) et de modifier le code pour envoyer les données des checkboxs et des Labels directement sur la feuille, mais la je ne sais pas faire.

Encore merci et merci, vu l'heure je te souhaite un bon app

A plus tard de te relire avec plaisir

Cordialement Ray
0
Yoda
 
Tout juste, je me demandais porquoi tu avais mis des textbox...

A la place je mettrais une procedure qui reçoit deux paramètres, le n° du checkbox et sa valeur.
Voila le nouveau code, à toi de compléter pour les autres checkbox.

Private Sub UserForm_Initialize()
Dim i
'*** Récupérer les valeurs des CheckBox et labels
For i = 1 To 14
'CheckBox
If Sheets("USF").Cells(i, 1) > 0 Then
   Me.Controls("CheckBox" & i).Value = True
Else
   Me.Controls("CheckBox" & i).Value = False
End If

'Label
Me.Controls("Label" & i) = Sheets("USF").Cells(i, 2)
If Me.Controls("Label" & i + 180) <> "" Then
   Me.Controls("Label" & i + 180).BackColor = vbGreen
Else
   Me.Controls("Label" & i + 180).BackColor = &HFFFFC0
End If
Next i
End Sub

Private Sub Save_Data(i As Integer, v As Boolean)
If v = False Then
   Sheets("USF").Cells(i, 1) = 0
   Me.Controls("Label" & i + 180).BackColor = &HFFFFC0
   Me.Controls("Label" & i + 180).Caption = ""
Else
   Sheets("USF").Cells(i, 1) = 1
   Me.Controls("Label" & i + 180).BackColor = vbGreen
   Me.Controls("Label" & i + 180).Caption = WorksheetFunction.Proper(Format(Now, "Dddd dd Mmmm yyyy"))
End If
Sheets("USF").Cells(i, 2) = Me.Controls("Label" & i + 180).Caption
End Sub

Private Sub CheckBox1_Click()
Save_Data 1, CheckBox1.Value
End Sub

Private Sub CheckBox2_Click()
Save_Data 2, CheckBox2.Value
End Sub


'Continue pour les autres CheckBox
0
dudulleray
 
Salut yoda
Merci pour la modification, je vais essayer ça mais avant
Je viens de penser que mème si ça marche
j'ai peur qu'a la prochaine ouverture de l'usf elle va se remettre à la date du jour
ce qui veux dire que aujourd'hui mardi c'est ok mais demain mercredi tout les labels que j'ai coché la veille vont passer a mercredi et ainsi de suite.
lors de la réouverture du fichier parce que ça déclenche une évènementielle qui remet la date du jour dans les cellules concernées

en ce qui concerne le 2 textbox, ils sont là pour mémoriser le contenu et la position du CheckBox coché ou décochés ils sont nécessaire au fonctionnement

quand penses tu svp

a plus tard et merci
0
Yoda
 
Dans la modification que je te propose, plus besoin de textbox, c'est ce que tu voulais.

En ce qui concerne la date, elle ne changera que si tu desactive/reactive les checkbox.
En somme, comme c'est là, une fois cochée la checkbox devrait rester dans cet état et ne plus changer.

A+.
0
dudulleray
 
ok bien reçu tes infos, et je t'en remercie

"Dans la modification que je te propose, plus besoin de textbox, c'est ce que tu voulais. "

oui oui on est bien d'accord, d'ailleurs je commence a essayer les modifs

je te tient au courant pour la date et les modifs

Merci a toi j'y retourne a plus tard

Ray
0