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

13 réponses

  1. 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
  2. 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
  3. 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
  4. 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
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
     
    Bonjour,

    Ton problème serait peut-être mieux dans la partie Bureautique.
    0
  7. 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
  8. 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
  9. 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
    1. 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
  10. 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
  11. 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
    1. 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
  12. 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
    1. 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
  13. 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
    1. 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
  14. 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