XL 2013 Exécuter une macro uniquement si la date d'une cellule est inférieure à la date du jour

WIsh_

XLDnaute Occasionnel
Bonjour,

A l'ouverture d'un classeur Excel, je souhaite qu'une macro s'exécute uniquement si la date présente dans la cellule B1 est inférieure à la date du jour.
Hors, la macro s'exécute à chaque ouverture.

- Soit la syntaxe de ma condition n'est pas bonne;
- Soit le format de la date dans le code n'est pas correct.

Dans la cas où la macro s'exécute, la valeur de la cellule B1 est remplacée par une date récupérée dans un autre fichier qui est au format now (exemple : 10/12/2020 6:07:19). Fatalement, si je compare cette date avec celle de maintenant (10/12/2020 09:14:08), elle sera inférieure. Je ne souhaite prendre en compte que le jour, le mois et l'année (10/12/2020).

Merci d'avance pour votre aide.

VB:
Public Sub MàJ()

Application.ScreenUpdating = False

Set wk = ThisWorkbook

wk.Unprotect ("xxxxxx")

dat5 = wk.Worksheets("Total").Range("B1").Value

If CDate(dat5) < CDate(Now) Then
' si la date de la cellule B1 est inférieure à la date du jour, exécuter la macro
Else
'sinon, reverrouiller la feuille et le classeur et quitter la macro
With Worksheets("Total")
.EnableAutoFilter = True
.EnableOutlining = True
.Protect Contents:=True, Password:="xxxx", AllowUsingPivotTables:=True, DrawingObjects:=False, Scenarios:=False
End With
wk.Protect ("xxxxxx")
Exit Sub
End If

'suite de la macro:
With wk.Worksheets("Total")
.Unprotect "xxxx"
End With

'Etc
End sub
 
Dernière édition:
Solution
Bonjour,

Si votre cellule B1 de la feuille "Total" contient bien une date et non un texte alors le test suivant est suffisant :
VB:
dat5 = Wk.Worksheets("Total").Range("B1").Value2
If dat5 < Date Then
    ' Code date inférieur aujourd'hui
Else
    ' Code date supérieur ou égale aujourd'hui
End If

A noter :
1 - 'Date' renvoie la date du jour (10/12/2020) et 'Now' la date et l'heure (10/12/2020 10:07:38) donc que Date n'est égale à Now qu'une seconde à minuit et est inférieur le reste du temps.

2 - Si votre cellule vous montre 10/12/2020 10:07:38 ou simplement 10/12/2020 sa valeur réelle (Value2) sera pour le premier cas 44175,4220601852 et le second 44175.

3 - Si vous tapez dans la fenêtre exécution (CTRL+G) de l'éditeur de macro...

WIsh_

XLDnaute Occasionnel
Bonjour,

J'ai trouvé :)

C'était et la syntaxe et le code pour la date.

J'ai remplacé
Code:
If CDate(dat5) < CDate(Now) Then
par
Code:
If INt(CDate(dat5)) < Int(CDate(Now)) Then

Et mis le else en fin de macro...

VB:
Public Sub MàJ()

Application.ScreenUpdating = False

Set wk = ThisWorkbook

wk.Unprotect ("xxxxxx")

dat5 = wk.Worksheets("Total").Range("B1").Value

If INt(CDate(dat5)) < Int(CDate(Now)) Then
' si la date de la cellule B1 est inférieure à la date du jour, exécuter la macro

'suite de la macro:
With wk.Worksheets("Total")
.Unprotect "xxxx"
End With

'Etc

Else
'sinon, reverrouiller la feuille et le classeur et quitter la macro
With Worksheets("Total")
.EnableAutoFilter = True
.EnableOutlining = True
.Protect Contents:=True, Password:="xxxx", AllowUsingPivotTables:=True, DrawingObjects:=False, Scenarios:=False
End With
wk.Protect ("xxxxxx")
Exit Sub
End If

End sub

Merci
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Si votre cellule B1 de la feuille "Total" contient bien une date et non un texte alors le test suivant est suffisant :
VB:
dat5 = Wk.Worksheets("Total").Range("B1").Value2
If dat5 < Date Then
    ' Code date inférieur aujourd'hui
Else
    ' Code date supérieur ou égale aujourd'hui
End If

A noter :
1 - 'Date' renvoie la date du jour (10/12/2020) et 'Now' la date et l'heure (10/12/2020 10:07:38) donc que Date n'est égale à Now qu'une seconde à minuit et est inférieur le reste du temps.

2 - Si votre cellule vous montre 10/12/2020 10:07:38 ou simplement 10/12/2020 sa valeur réelle (Value2) sera pour le premier cas 44175,4220601852 et le second 44175.

3 - Si vous tapez dans la fenêtre exécution (CTRL+G) de l'éditeur de macro :
?Worksheets("Total").Range("B1").Value2
puis que vous validez par Entrée, la fenêtre affichera 44175,4220601852 ou 44175 (si uniquement date).
Si vous tapez ensuite
?Worksheets("Total").Range("B1").Value
puis validez, la fenêtre affichera 10/12/2020 10:07:38 ou 10/12/2020 (si uniquement date)

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
314 782
Messages
2 112 919
Membres
111 701
dernier inscrit
aelbachiri