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