Controle de dates dans une macro

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
 

Fab117

XLDnaute Impliqué
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

  • Essai 02.zip
    14.9 KB · Affichages: 23

GillesC

XLDnaute Occasionnel
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
 

Fab117

XLDnaute Impliqué
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

  • Essai 03.zip
    15.1 KB · Affichages: 19

Fab117

XLDnaute Impliqué
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
 

GillesC

XLDnaute Occasionnel
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
 

Fab117

XLDnaute Impliqué
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
 

Discussions similaires

Statistiques des forums

Discussions
312 836
Messages
2 092 656
Membres
105 480
dernier inscrit
Galbius