Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Une macro qui ne se lance que tous les 15 jours

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Troudz

XLDnaute Occasionnel
Bonjour à tous,

Je reviens vers car je me trouve face à un problème.

J'ai une macro qui doit se lancer à l'ouverture de mon classeur mais seulement 2 fois dans le mois. Elle ne doit être exécutée que lors de la 1ère ouverture du classeur après le 1er et le 15 du mois. Ainsi, si la première ouverture au cours du mois est fait le 3 octobre, ma macro doit être exécutée et ne doit plus être relancée avant la 1ère ouverture suivant le 15 octobre.

J'ai beau me casse le crâne, je ne trouve pas comment limiter l'exécution.

J'espère que vous saurez m'aider.

En vous remerciant par avance,

Bonne journée
 
Re : Une macro qui ne se lance que tous les 15 jours

Bonjour Troudz, bonjour le forum,

En pièce jointe une proposition qui utilise un onglet nommé caché ayant la proriété Visible = 2 - XlSheetVeryHidden. C'est l'inconvénient de ma solution car elle va écrire des données sur cet onglet masqué. À tester...

Le code :
Code:
Private Sub Workbook_Open()
Dim m As Byte 'déclare la variable m (Mois)
Dim j As Byte 'déclare la variable j (Jour)
 
m = Month(Date) 'définit la variable m
j = Day(Date) 'définit la variable j
 
With Sheets("Caché") 'prend en compte l'onglet "caché"
    If m <> .Range("A1").Value Then 'condition 1 : si le mois de la date en cours est différent du mois inscrit en A1
        .Range("A1:A3").ClearContents 'efface la plage A1:A3
        If .Range("A1").Value = "" Then .Range("A1").Value = m 'si A1 est vide, donne à A1 la valeur du mois de la date en cours
        If j < 15 Then 'conditin 2 : si je jour de la date en cours est inférieur a 15
            If .Range("A2").Value = "" Then .Range("A2").Value = j 'si A2 est vide, donne à A2 la valeur du jour de la date en cours
        Else 'sinon (condition 2)
            If .Range("A3").Value = "" Then .Range("A3").Value = j 'si A3 est vide, donne à A3 la valeur du jour de la date en cours
        End If 'fin de la condition 2
    End If 'fin de la condition 1
 
    If j < 15 Then 'condition : si le jour de la date en cours est inférieur à 15
        If .Range("A2").Value <> "X" Then 'condition 2 : si A2 est différent de "X"
            Call Ma_Macro 'appelle la macro "Ma_Macro"
            .Range("A2").Value = "X" 'place "X" en A2
        End If 'fin de la condition 2
    End If 'fin de la condition 1
 
    If j >= 15 Then 'condition : si le jour de la date en cours est supérieur ou égal à 15
        If .Range("A3") <> "X" Then 'condition 2 : si A3 est différent de "X"
            Call Ma_Macro 'appelle la macro "Ma_Macro"
            .Range("A3").Value = "X" 'place "X" en A2
        End If 'fin de la condition 2
    End If 'fin de la condition 1
End With 'fin de la prise en compte de l'onglet "caché"
End Sub

Le fichier :
 

Pièces jointes

Re : Une macro qui ne se lance que tous les 15 jours

Ça ne me dérange pas du tout qu'il faille avoir une feuille masquée. De toute façon, on est bien obligé de "garder en mémoire" la dernière date d'exécution de cette macro si on veut éviter qu'elle ne se lance à chaque systématiquement.

Je vais essayer ta solution et je te tiendrais au courant du résultat.

Je te remercie grandement !

Bonne journée
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…