Controle de dates dans une macro

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 !

Fab117

XLDnaute Impliqué
Salut,
Dans mon fichier, je souhaite que l'utilisateur introduise une date au travers d'une InputBox.
Je souhaite que ma macro vérifie 3 erreurs possibles avant de valider cette date :
- Que la date ne tombe pas un samedi ou dimanche
- Qu'elle soit cohérente (pas de 31 février p. ex.)
- Qu'elle soit dans l'intervale 10 jours par rapport à la date du jour.

Quelqu'un pourrait-il m'aider à compléter ma macro ?

Merci d'avance.

Fab

Dim Message, Title, Default
Dim DateDePreparation As Date


Message = "Indiquez la date dans le format" & Chr(13) & "jj/mm/aa"
Title = "Date de préparation"
Default = "jj/mm/aa"
DateDePreparation = Application.InputBox(Message, Title, Default)

' Controle pour s'assurer que la date ne tombe pas un samedi ou un dimanche
If DateDePreparation = "" Then
Message = "Indiquez la date dans le format" & Chr(13) & "jj/mm/aa"
Title = "La date que vous avez entré correspond à un samedi ou un dimanche" & Chr(13) & "Confirmer votre choix en cliquant sur OK ou changer la date"
Default = DateDePreparation
DateDePreparation = Application.InputBox(Message, Title, Default)
' Controle que la date introduite est valide (p. ex. : pas le 31 février)
ElseIf DateDePreparation = "dfg" Then
Message = "Indiquez la date dans le format" & Chr(13) & "jj/mm/aa"
Title = "La date que vous avez entré n'existe pas, merci de corriger"
Default = DateDePreparation
DateDePreparation = Application.InputBox(Message, Title, Default)
' Controle que la date rentrée est dans l'intervale 10 jours par rapport à la date du jour
ElseIf DateDePreparation = "dfg" Then
Message = "Indiquez la date dans le format" & Chr(13) & "jj/mm/aa"
Title = "La date que vous avez entré est éloigné de plus de 10 jours par rapport à aujourd'hui" & Chr(13) & "Confirmer votre choix en cliquant sur OK ou changer la date"
Default = DateDePreparation
DateDePreparation = Application.InputBox(Message, Title, Default)
End If
 
Re : Controle de dates dans une macro

Je te remercie pour ton aide, mais ça ne fonctionne pas comme je voudrais, mon code contient apparement des erreurs.

1) Dans tous les cas de figure, il s'arrete sur la première condition qui pour lui n'est pas rempli (week-end).
2) Si initialement, ce qui est entré n'est pas un format date, il plante.

Je joins le fichier avec la macro complète (Essai.xls), il y a aussi le fichier (Essai Fichier de destination.xls) qui est utilisé plus tard dans ma macro pour aller y copier les informations récoltées au travers des InputBox.

Si quelqu'un peut y jetter un coup d'oeil, ce serait cool.

Fab
 

Pièces jointes

Re : Controle de dates dans une macro

re re
A première vue je n'utiliserais pas les elseif mais des if séparés.
Test format date en premier
if not isdate(DateDePreparation) then
msgbox..
exit sub
end if
Test jour de la semaine
If Weekday(DateDePreparation)=1 or If Weekday(DateDePreparation)=2 Then..
exit sub
end if
et enfin test des 10 jours
 
Re : Controle de dates dans une macro

Voila, en suivant tes conseils, c'est presque bon.
Le seul problème est que si l'utilsateur rentre une information qui n'est pas une date valide (en fait ma 2ème condition), la macro s'arrete avec un message d'erreur.
As-tu une solution à ce problème ?

Fab
 

Pièces jointes

Re : Controle de dates dans une macro

Juste sous l'InputBox, j'ai mis un
On Error Resume Next
Du coup, si je rentre 31.02.2007, il ne plante plus, mais il ne m'indique pas qu'il ne s'agit pas d'une date valable. Mais avec fjsoéadf, il plante.

Fab
 
Re : Controle de dates dans une macro

re
Tu peux essayer une boucle du genre :
DateDePreparation = InputBox("Saisir la date sous forme JJ/MM/AAAA")
While Not IsDate(DateDePreparation)
DateDePreparation = InputBox("Ceci n'est pas une date. Veuillez recommencer la saisie")
If DateDePreparation = "" Then Exit Sub
Wend
 
Re : Controle de dates dans une macro

Non, ça ne change rien avec :
DateDePreparation = InputBox("Saisir la date sous forme JJ/MM/AAAA")
While Not IsDate(CDate(DateDePreparation))
DateDePreparation = InputBox("Ceci n'est pas une date. Veuillez recommencer la saisie")
If DateDePreparation = "" Then Exit Sub
Wend
En tapant 31.02.2006, il continue à planter



De plus, je viens de remarquer, qu'en tapant p.ex. : 19.12.2006 la condition + ou - 10 jours n'est pas remplie avec :
If (CDate(DateDePreparation) - Date) > 10 Or (CDate(DateDePreparation) - Date) < 10 Then
Message = "La date que vous avez entrée est éloigné de plus de 10 jours par rapport à aujourd'hui" & Chr(13) & "Confirmer votre choix en cliquant sur OK ou changer la date" & Chr(13) & "Indiquez la date dans le format" & Chr(13) & "jj/mm/aa"
Title = "Date de préparation"
Default = DateDePreparation
DateDePreparation = Application.InputBox(Message, Title, Default)
End If
Il me met le message comme quoi la date n'est pas dans l'intervalle 10 jours

Fab
 
- 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

Réponses
2
Affichages
1 K
K
Réponses
6
Affichages
3 K
N
Réponses
2
Affichages
2 K
N
B
Réponses
6
Affichages
1 K
C
Réponses
2
Affichages
2 K
C
J
Réponses
5
Affichages
4 K
jesustherockstar
J
Retour