Comment limiter l'action d'une macro

Fermé
Tireur50 Messages postés 12 Date d'inscription vendredi 14 avril 2023 Statut Membre Dernière intervention 8 mai 2023 - 7 mai 2023 à 21:34
yg_be Messages postés 23346 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 24 novembre 2024 - 8 mai 2023 à 11:26

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 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
8 mai 2023 à 07:21

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 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
8 mai 2023 à 07:23

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 vendredi 14 avril 2023 Statut Membre Dernière intervention 8 mai 2023
8 mai 2023 à 09:10

Bonjour,

Les données à enregistrer sont fictives !

Merci de votre participation,

Bon week end,

0
yg_be Messages postés 23346 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 24 novembre 2024 Ambassadeur 1 552
8 mai 2023 à 11:26

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