XL 2010 VBA - Macro fin de mois et heure fixe

romubzh35

XLDnaute Occasionnel
Bonjour,
je voudrais exécuter une macro le dernier jour ouvré du mois à minuit, et cela, tous les mois.
pourriez vous m'aider sur le sujet.
le but est de remplacer le bouton Archive et que cette macro se lancer automatiquement
la macro qui fonctionne avec le bouton est la suivante :

Code:
Sub copie_feuilleokdemcharg()
    Dim nom$
    nom = "OK DEM CHARG - " & UCase(MonthName(Month(Date))) & "-" & Year(Date)
    Application.ScreenUpdating = False
    On Error Resume Next
    Worksheets(nom).Activate
    If Err.Number <> 0 Then
        Worksheets("OK DEM CHARG").Copy after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = nom
        Worksheets("OK DEM CHARG").Select
        Worksheets("OK DEM CHARG").Range("A8:AF60000").ClearContents

     End If
End Sub
merci d'avance pour votre aide
Capture.JPG
 

Lone-wolf

XLDnaute Barbatruc
Bonjour romubzh

Si j'ai bien compris.

Public Sub Fin_Mois()
If Date = Range("ak2").Value And Now() = Range("ak3") Then Call copie_feuilleokdemcharg
End Sub

Mais, dis moi une chose, est-ce que le classeur est ouvert avant minuit?? :rolleyes:

Edit: voici une macro de pierrejean pour afficher la fin d'un mois, change le nom de la feuille. À mettre dans un module standard.

VB:
Sub test()
Dim dt1 As Date
    With Feuil2
        dt1 = .Range("ah1").Value
        .Range("ak2") = derjourb(CDate(dt1))
    End With
End Sub

Function derjourb(LaDate As Date)
    If Month(LaDate) = 12 Then
        derjourb = CDate("01/01/" & Year(LaDate) + 1) - 1
    Else
        derjourb = CDate("01/" & Month(LaDate) + 1 & "/" & Year(LaDate)) - 1
    End If
End Function
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Une autre manière de trouver le dernier jour
VB:
Sub ThisIsTheEnd_ofTheMonth()
'Doors tribute ;-)
'en une seule fois
MsgBox CDate(DateSerial(Year(Date), Month(Date) + 1, 0))
'ci dessous avec un fonction
MsgBox DernierJ("05/12/2018")
End Sub
Function DernierJ(D As Date)
DernierJ = CDate(DateSerial(Year(D), Month(D) + 1, 0))
End Function
 

youky(BJ)

XLDnaute Barbatruc
Bonjour le fil, JM, Love-Wolf,
C'est bien beau de trouver quand envoyer la macro, mais si on veux pas faire lever à minuit notre ami Romu...
pour cliquer sur le bouton vous avez oubliés de mentionner la méthode Application.OnTime qui le permet.
Bruno
 

romubzh35

XLDnaute Occasionnel
bonjour,
et non je vais pas me lever pour lancer la macro :)
le but est de tout automatiser si c'est possible
le dernier jour ouvré j'avais la formule
l'heure choisie est minuit
ce qu'il me manque est le morceau de code avec
Application.OnTime
ou l'on fait mention du jour et de l'heure choisie
merci d'avance
 

youky(BJ)

XLDnaute Barbatruc
Hhhaa!! Lone-wolf t'as plus d'un tour dans ton sac.
Je profite de l'instant..... si tu veux mettre Poker Game sur le site je te laisse faire peut être sans la musique pour alléger.
Bruno

Edit: message croisé
écris Application.ontime dans l'éditeur et presse F1 tu auras facilement tout les renseignements.
 

youky(BJ)

XLDnaute Barbatruc
Bon je donne un coup de pouce car pas si simple tout de même
ce code à copier dans module1 ou autre (non testé)
Bruno
VB:
Public mydate As Date
Sub My_Minuit()
'ta macro de minuit sera exécutée ici le 1er jour du mois à la 1ère seconde
'ici ta macro
mydate = CDate(DateSerial(Year(Date), Month(Date) + 1, 0)) + 1
mydate = mydate + "00:00:01"
MsgBox mydate
Application.OnTime mydate, "My_Minuit"
End Sub
Sub Annule_My_minuit()
Application.OnTime EarliestTime:=mydate, _
Procedure:="My_Minuit", Schedule:=False
End Sub
 

romubzh35

XLDnaute Occasionnel
bonjour Bruno
et merci encore pour ton aide
je viens de copier le code dans le module 1
lorsque je lance pour faire l'essai j'obtiens une fenêtre ou est indiqué 01/05/2108 à 00:00:01
quand tu mets "'ici ta macro" je dois ajouter ma macro à cet endroit on est d'accord ?
j'ajoute juste un call...
 

youky(BJ)

XLDnaute Barbatruc
Oups! supprime la ligne en faute c'était juste pour mes essais.
Oui tu copies ta macro à cet endroit.
à l'endroit de ta macro tu peux simplement mettre le nom de ta macro avec ou sans Call
La macro doit s'exécuter le 1er du mois c'est déjà parti si tu n'arrêtes pas le PC si tu là modifie fait la macro Annule_My_minuit et reExécute My_Minuit
Bruno
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum, Mon Voisin ;) , Lone-Wolf, youky(BJ)

Si le classeur est ouvert 24h/24h c'est que le PC l'est aussi donc.

Dans ce cas, pourquoi ne pas simplement utiliser le planificateur de tâches de Windows?
(avec une tache qui s’exécute le 1er jour du mois à minuit)
Voir ici par exemple pour plus de détails
 

Discussions similaires