Comment limiter l'action d'une macro

Tireur50 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -

Bonsoir,

J'ai fais un petit programme pour suivre les recettes et les dépenses de notre association. En début de chaque mois, nous avons des dépenses et des recettes récurrentes.

J'essaye d'automatiser ces tâches avec un programme qui crée des entrées automatiquement dans chaque tableau (tableau Dépenses et tableau Revenus) le problème est qu'à chaque fois que j'ouvre le classeur, les entrée se cumulent.

Je ne vois pas comment limiter l'action de la macro à 1 fois par mois.

Voici le code:

Private Sub Workbook_Open()

    'Vérifier si la date est entre le 5 et le 15 de chaque mois
    If Day(Date) >= 5 And Day(Date) <= 15 Then
    
        'Vérifier si le code a déjà été exécuté ce mois-ci
        If Worksheets("Dépenses").Range("A1").Value <> Month(Date) Then
        
            'Mettre à jour la date du mois dernier pour éviter une nouvelle exécution du code ce mois-ci
            Worksheets("Dépenses").Range("A1").Value = Month(Date)
            
            'Trouver la dernière ligne des tableaux Dépenses et Revenus
            Dim lastRowDepenses As Long
            lastRowDepenses = Worksheets("Dépenses").Cells(Rows.Count, "A").End(xlUp).Row
            
            Dim lastRowRevenus As Long
            lastRowRevenus = Worksheets("Revenus").Cells(Rows.Count, "A").End(xlUp).Row
            
            'Ajouter une ligne automatiquement à la fin des tableaux Dépenses et Revenus
            Worksheets("Dépenses").Range("A" & lastRowDepenses + 1).Value = Date
            Worksheets("Dépenses").Range("C" & lastRowDepenses + 1).Value = "aaaaaa"
            Worksheets("Dépenses").Range("D" & lastRowDepenses + 1).Value = "bbbbbb"
            Worksheets("Dépenses").Range("F" & lastRowDepenses + 1).Value = "ccccccc"
            Worksheets("Dépenses").Range("H" & lastRowDepenses + 1).Value = 2
            
            Worksheets("Revenus").Range("A" & lastRowRevenus + 1).Value = Date
            Worksheets("Revenus").Range("C" & lastRowRevenus + 1).Value = "aaaaaa"
            Worksheets("Revenus").Range("D" & lastRowRevenus + 1).Value = "bbbbbbb"
            Worksheets("Revenus").Range("G" & lastRowRevenus + 1).Value = "cccccccc"
            Worksheets("Revenus").Range("I" & lastRowRevenus + 1).Value = 2
            
        End If
        
    End If
    
End Sub

Merci de votre aide,
Windows / Edge 113.0.1774.35

A voir également:

3 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 

Bonjour,

Chez moi, pas de probleme.

Le test A1 mois enregistre <> mois date est ok

Par contre, d'ou sortent vos donnees a enregistrer?

0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 

Suite:

Purquoi n'utilisez vous pas le code donne ici:

Code vba ne fonctionne pas [Résolu] (commentcamarche.net)

0
Tireur50 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour,

Les données à enregistrer sont fictives !

Merci de votre participation,

Bon week end,

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

Au lieu d'enregistrer le numéro du mois, j'enregistrerais la date du premier jour du mois:

    Dim todayDate As Date, cemois As Date
    todayDate = Date
        cemois = DateSerial(Year(todayDate), Month(todayDate), 1)
        If [a1] <> cemois Then
              [a1] = cemois
              ' ...
0