Tester une date dans un intervalle
Bonjour,
J'essaie de réaliser une programmation des chantiers par userform.
j'ai un userform qui permet la saisie dans BDD et un onglet planning ou les informations doivent se reporter.
j'ai un petit code qui teste si la date de début est déjà saisie mais ce n'est pas suffisant. Il faudrait tester sur la plage (dateDébut-DateFin) mais je ne sais pas comment m'y prendre.
Ex : je saisie la date du 10/05, le test me dit qu'elle existe déja mais si je saisis le 11/05, le code me dit qu'elle n'existe pas alors que la plage est censée être bloquée jusqu'au 16/05 .
Pourriez-vous m'aider svp ?
Merci beaucoup
bonjour,
VBA utilise le date americain, donc MM/DD/YYYY, donc le valeur du Textbox doit être traduit vers une date europien, donc split et reconstruire !
Puis les dates, c'est plus facile de chercher dans un array
Sub CommandButton1_Click()
'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee, Valeur_Trouvee 'ne pas declarer date !!!
'********* à adapter ***********
'affectation de valeurs aux variables :
'on cherche le mot "Trouve"
sp = Split(Replace(Replace(TextBox_date, "-", "/"), ".", "/"), "/") 'les 3 possibilites 1/1/22 1-1-22 et 1.1.22, split on "/"
If UBound(sp) <> 2 Then MsgBox "erreur": Exit Sub 'date a 3 parties
Valeur_Cherchee = CDbl(DateSerial(sp(2), sp(1), sp(0))) 'replacer date americain !!!
Set c = Sheets("BDD").ListObjects("Tableau1").ListColumns("date_début").DataBodyRange 'cette plage pour chercher
arr = c.Value2 'read as doubles !!!
r = Application.Match(Valeur_Cherchee, arr, 0) 'résultat est un numero ou un erreur
If IsNumeric(r) Then Set Trouve = c(r, 1)
'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
'ici, traitement pour le cas où la valeur n'est pas trouvée
Valeur_Trouvee = Valeur_Cherchee
MsgBox ("la date existe déjà !")
'ici, traitement pour le cas où la valeur est trouvée
Else
Valeur_Trouvee = Valeur_Cherchee
Range("k10").Value = Valeur_Cherchee
'MsgBox AdresseTrouvee
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End If
End SubMerci pour votre aide mais ça ne marche pas et j'ai du mail à comprendre pourquoi.
Pourriez-vous m'expliquer un peu
le nom du textbox est modifié, il est maintenant Textbo_DateDebut, c'est pourquoi, il disait erreur
Sub CommandButton1_Click()
'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee, Valeur_Trouvee 'ne pas declarer date !!!
'********* à adapter ***********
'affectation de valeurs aux variables :
'on cherche le mot "Trouve"
sp = Split(Replace(Replace(TextBox_DateDebut, "-", "/"), ".", "/"), "/") 'les 3 possibilites 1/1/22 1-1-22 et 1.1.22, split on "/"
If UBound(sp) <> 2 Then MsgBox "erreur": Exit Sub 'date a 3 parties
Valeur_Cherchee = CDbl(DateSerial(sp(2), sp(1), sp(0))) 'replacer date americain !!!
Set c = Sheets("BDD").ListObjects("Tableau1").ListColumns("date_début").DataBodyRange 'cette plage pour chercher
arr = c.Value2 'read as doubles !!!
r = Application.Match(Valeur_Cherchee, arr, 0) 'résultat est un numero ou un erreur
If IsNumeric(r) Then Set Trouve = c(r, 1): s = Trouve.Address
'traitement de l'erreur possible : Si on ne trouve rien :
MsgBox "ma date est " & Format(Valeur_Cherchee, "ddd dd mmmm yyyy") & vbLf & "addresse : " & s
If Trouve Is Nothing Then
'ici, traitement pour le cas où la valeur n'est pas trouvée
Valeur_Trouvee = Valeur_Cherchee
MsgBox ("la date existe déjà !")
'ici, traitement pour le cas où la valeur est trouvée
Else
Valeur_Trouvee = Valeur_Cherchee
Range("k10").Value = Valeur_Cherchee
'MsgBox AdresseTrouvee
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End If
End Sub