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 Sub

Merci 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

Rechercher des sujets similaires à "tester date intervalle"