Code checkbox

Bonjour à tous,

Me revoilà avec mes soucis de novice…

Je suis toujours sur une gestion de trésorerie sur excel : ça avance pas mal grâce à toutes les infos glanées ici et là sur la toile, mais là, je bloque…

les saisies de débit et de crédit au jour le jour fonctionnent à peu près (je reviendrais sans doute vers vous pour la touche finale d’optimisation de code).

Je bloque sur les charges récurrentes (EDF, téléphone, etc) : je m’explique…

J’ai envisagé 4 cas de figure : mensuelle, bimensuelle, trimestrielle et autre (avec un choix de checkbox à cocher en fonction des mois)

Pour la mensuelle, ce code fonctionne :

Sub mensuel()
Sheets(Mois).Activate
  Do Until ActiveSheet.Name = "Données"
  Mois_Charge = CDate(Range("C3").Value2)
  Mois_Charges = Jour & "/" & Format(Mois_Charge, "mm/yy")
Call charges
Sheets(ActiveSheet.Index + 1).Activate
Loop
End Sub

Sub charges()
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Activate
ActiveCell = CDate(Mois_Charges) 'Cdate permet le bon affichage de la date
ActiveCell.Offset(0, 2) = ajout_Ben_Char
ActiveCell.Offset(0, 3) = CDbl(Montant_HT)
ActiveCell.Offset(0, 4) = CDbl(Montant_TVA)
ActiveCell.Offset(0, 5) = CDbl(Montant_TTC)
End Sub

Par contre, même si les champs sont correctement renseignés, j’ai une erreur sur bimensuel et trimestriel

Sub bimensuel()
Sheets(Mois).Activate
  Do Until ActiveSheet.Name = "Données"
  Mois_Charge = CDate(Range("C3").Value2)
  Mois_Charges = Jour & "/" & Format(Mois_Charge, "mm/yy")
Call charges
Sheets(ActiveSheet.Index + 2).Activate
Loop
End Sub

Je vois bien d’où viens l’erreur (une fois sur la feuille "juin" il va vérifier 2 feuilles plus loin si c’est la feuille "Données"…) mais je ne vois pas comment faire…

Voilà un premier problème.

Le deuxième, et là, je n’ai vraiment aucune idée, c’est lorsqu’on choisit autre et que le userform du choix des mois s’affiche, comment aller ventiler les données dans les mois concernés.

userform3 userform4

Merci de votre aide,

Cordialement,

Gildas

Bonsoir,

vous pouvez essayer ceci :

Sub bimensuel()
    Sheets(Mois).Activate
    Do Until ActiveSheet.Name = "Données"
        Mois_Charge = CDate(Range("C3").Value2)
        Mois_Charges = Jour & "/" & Format(Mois_Charge, "mm/yy")
        Call charges
        On Error Resume Next
            Sheets(ActiveSheet.Index + 2).Activate
            If Err > 1 Then Exit Do
        On Error GoTo 0
    Loop
End Sub

mise en place de la gestion d'erreur :

si une feuille avec un index supérieur au nombre maxi de feuille du classeur (dans votre cas 14) alors on continue le code

On error resume next

mais le code erreur est mis en mémoire.

On test la mémoire erreur avec

If ERR>1 si supérieur à1 c'est qu'il y a une erreur donc on sort de la boucle

On réactive la surveillance des erreurs par

On error goto 0

Merci du retour

@ bientôt

LouReeD


Pour le deuxième problème mon idée serait d'utiliser les "captions" des checkbox,

puis pour la ventilation il suffit d'appeler la feuille avec le"caption"du checkbox :

Sheets(Checkbox.name).activate

Reste à voir si cela marche....

Private Sub CommandButton1_Click()
    Dim I
    For I = 1 To 12 ' on scan les 12 checkbox
        If Controls("CheckBox" & I) = True Then ' si la checkbox est cochée
            Sheets(Controls("CheckBox" & I).Caption).Activate
            MsgBox ("ok")
        End If
    Next I
End Sub

biensur, à la place de MsgBox il vous faire ce qu'il y a à faire sur les feuilles...

@ bientôt

LouReeD

Bonjour LouReeD,

Merci pour ton code pour bimensuel, ça fonctionne nickel...

Par contre, je ne vois pas comment récupérer en variable les mois cochés après avoir validé les checkbox : je dois les utiliser après avoir rempli le reste du userform...

   
Private Sub CommandButton1_Click()
        Dim I
        For I = 1 To 12 ' on scan les 12 checkbox
           If Controls("CheckBox" & I) = True Then ' si la checkbox est cochée
               Sheets(Controls("CheckBox" & I).Caption).Activate
                MsgBox (Controls("CheckBox" & I).Caption)
            End If
        Next I
   End Sub

Merci pour ton aide,

and always walk on the wild side...

Gildas

Bonsoir,

modifications mineures...

Principe : définition d'une variable public "tableau" afin de mettre en mémoire le choix des mois de la récurrence "Autre".

Une fois les checkbox cochées ou pas on met en mémoire le nom des mois cochés et un vide si pas cochés.

Ensuite dans la sub Autre on boucle sur le tableau, s'il y a autre chose que rien alors on active la feuille et on y fait ce qu'il y a à faire, sinon on passe à la valeur suivante du tableau.

Création du code pour "Autre récurrence" :

Sub Autre()
    Dim Cpt As Integer
    For Cpt = 1 To 12
        If Tablo_Mois(Cpt) <> "" Then
            Sheets(Tablo_Mois(Cpt)).Activate
            Mois_Charge = CDate(Range("C3").Value2)
            Mois_Charges = Jour & "/" & Format(Mois_Charge, "mm/yy")
            Call charges
        End If
    Next Cpt
End Sub

Dans le module ajout de la variable Tablo_Mois afin de mettre en mémoire la liste des mois sélectionnés lors du choix des mois pour la récurrence.

Modification du code du USF du choix des mois pour la récurrence :

Private Sub CommandButton1_Click()
    Dim I
    ReDim Tablo_Mois(13)
    For I = 1 To 12 ' on scan les 12 checkbox
        If Controls("CheckBox" & I) = True Then ' si la checkbox est cochée
            Tablo_Mois(I) = Controls("CheckBox" & I).Caption
        End If
    Next I
    Unload Me
End Sub

Modification du test de récurrence afin d'appeler le code "Autre" avec simplification du code :

If recurrence = "mens" Then
    Call mensuel
ElseIf recurrence = "bim" Then
    Call bimensuel
ElseIf recurrence = "trim" Then
    Call trimestriel
Else
    Call Autre
End If

Après à vous de vous imprégner de ma façon de voir les choses...

Je vous joint le fichier modifié :

@ bientôt

LouReeD

Bonjour LouReeD,

Merci beaucoup pour ton code, c'est exactement ce que je souhaitais...

Je ne savais pas que l'on pouvait faire un tableau "volatile" : j'étais parti sur un tableau en "dur" :

Private Sub CheckBox1_Click()
Sheets("Données").Activate
Range("P" & Rows.Count).End(xlUp).Offset(1, 0).Activate
ActiveCell = (Controls("CheckBox1").Caption)
End Sub

Un énorme merci encore et je clos le post comme résolu...

Gildas

Bonsoir et merci pour votre merci !

@ bientôt sur le forum

LouReeD

Rechercher des sujets similaires à "code checkbox"