Validité de date de réservation automoblie

Résolu/Fermé
luc731 Messages postés 22 Date d'inscription mardi 26 octobre 2021 Statut Membre Dernière intervention 12 novembre 2021 - 26 oct. 2021 à 05:12
luc731 Messages postés 22 Date d'inscription mardi 26 octobre 2021 Statut Membre Dernière intervention 12 novembre 2021 - 29 oct. 2021 à 14:50
Bonjour,

J'ai créer une base de donnée pour la gestion d'un parc automobile (location automobile).

Dans mon formulaire de réservation j'ai mis les champs suivant: "Id Réservation", "Date Debut", "Date Fin"... (comme dans la capture jointe.

J'aimerai que un véhicule qui représenter dans ce formulaire par le champs "Voiture" qui est ici l'id du véhicule ne puisse pas être réserver si celui à était déjà réserver et qu'il me soit afficher en conséquence message qui me dira que ce véhicule n'est pas libre.

j'imagine qu'il faut entrez une formule dans les champs "Date Debut" et "Date Fin", dans la partie en bas "valide si" et "message erreur si " si vous pourriez m'aider s'il vous plaît, car je n'arrive pas à trouvez de solution.

Merci encore de votre aide.

5 réponses

yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 Ambassadeur 1 538
26 oct. 2021 à 16:14
bonjour,

dans quel contexte fais-tu ce travail?

ce genre de vérification se fait plutôt avec du code ajouté au formulaire, pas directement dans la définition de la table.
0
luc731 Messages postés 22 Date d'inscription mardi 26 octobre 2021 Statut Membre Dernière intervention 12 novembre 2021
26 oct. 2021 à 23:46
bonjour,

Je fais ce travail pour une petite société de location que tiens un amis.

Pourriez vous m'aider pour la conception du code ou pourrais -je avoir un quelque chose pour m'aiguiller merci encore.
0
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
27 oct. 2021 à 09:33
As-tu de l'expérience en programmation (VBA) et en bases de données (SQL)?
0
luc731 Messages postés 22 Date d'inscription mardi 26 octobre 2021 Statut Membre Dernière intervention 12 novembre 2021
27 oct. 2021 à 10:33
Pas du tout je débute à peine.

Mais si vous pouvez juste m'aiguillez sur la fonction de base à utiliser pour pouvoir faire la comparaison de mes deux champs dates "date de début" date de fin" en prenant en compte le champs "n° immatriculation".

Merci sa m'aiderait déjà a où chercher.
0
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
27 oct. 2021 à 10:56
Ce n'est pas une fonction de base, c'est du code VBA à ajouter au formulaire, code à déclencher avant de modifier l'enregistrement dans la table.
Ce code utilisera, par exemple, une requête SQL qui vérifiera si d'autres enregistrements entre en conflit avec le nouvel enregistrement.
0
luc731 Messages postés 22 Date d'inscription mardi 26 octobre 2021 Statut Membre Dernière intervention 12 novembre 2021
28 oct. 2021 à 16:38
Merci de votre réponse.

J'ai fait quelque recherche et j'ai réussi a tomber sur un code que j'ai adapté à ma base .

J'ai créer un formulaire pour rechercher la disponibilité (je voulais déjà essayer avant de le mettre directement dans mon formulaire de réservation".


Alors j'ai creer un formulaire avec deux champs dates qui sont ("txtDateDebut" et "txtDateFin") et un champs nommée "Voiture" (qui renvoie a un champs d'une table ou j'ai toute les N°Immatriculation des différend véhicules. et enfin j'ai fait un bouton qui ce nomme "btnVerifier" qui éxecute les procédures.

J'ai eu quelques petites erreurs que j'ai réussi à corriger mais je bloque sur une qui est vers la fin du code (la où j'ai fait une flèche ).

celle-ci exactement :" ------>If DCount("*", "Réservation", strCritere) > 0 Then".

Il me renvoie un message d'erreur:"Erreur d'exécution 3075 erreur de syntaxe dans l'expression...comme dans la capture d'écran ci-joint.


Pourriez-vous m'aider s'il vous plait à palier à ce problème ?
Merci encore.




Voici le module en entier:

Function DateHeureUS(ByVal dt As Variant)
If IsNull(dt) Then Exit Function
DateHeureUS = "#" & Month(dt) & "/" & Day(dt) & "/" & Year(dt) _
& " " & Format(dt, "hh:nn:ss") & "#"
End Function


' Insertion de valeurs dans une chaîne de caractères
' ---
'
Function StringFormat( _
ByVal strChaine As String, _
ParamArray varValeurs() As Variant) As String

Dim intI As Integer
For intI = LBound(varValeurs) To UBound(varValeurs)
strChaine = Replace(strChaine, "{" & intI & "}", Nz(varValeurs(intI)))
Next

StringFormat = strChaine
End Function


Private Sub btnVerifier_Click()
Dim strSQL As String
Dim strCritere As String

' Vérifier que toutes les infos sont renseignées
If IsNull(Me.txtDateDebut) _
Or IsNull(Me.txtDateFin) _
Or IsNull(Me.Voiture) Then
MsgBox "Toutes les informations doivent être renseignées !", _
vbExclamation
Exit Sub
End If

' Chaîne SQL de base
strSQL = _
"(DatesIntersect({0}, {1}, [Date Debut], [Date Fin]) = True)" _
& " AND ([Voiture] = {2})"

' Critère final
strCritere = StringFormat(strSQL, _
DateHeureUS(Me.txtDateDebut), _
DateHeureUS(Me.txtDateFin), _
Me.Voiture)

' Si au moins 1 enregistrement répond au critère,
' la période est déjà réservée...
------>If DCount("*", "Réservation", strCritere) > 0 Then
MsgBox "Une réservation existe déjà sur cette période !", _
vbExclamation
Else
MsgBox "La période est disponible pour cette voiture.", _
vbInformation
End If

End Sub
0
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
28 oct. 2021 à 19:08
Eh bien, pour quelqu'un qui écrivait "je débute à peine", quel progrès!

Quand tu partages du code, peux-tu utiliser les balises de code, et préciser "basic" pour du VBA?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Je ne connais pas DatesIntersect(), je pense que c'est peu utile, et l'erreur vient sans doute d'ailleurs.

Comme Voiture est un champ texte dans la table, il faut mettre des
'
pour entourer le texte dans le critère de sélection.
Donc, sans doute:
strSQL = _
     " DatesIntersect({0}, {1}, [Date Debut], [Date Fin]) " _
     & " AND ([Voiture] = '{2}') "

Sauf si StringFormat(), que je ne connais pas, ne réagis pas bien à cela.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luc731 Messages postés 22 Date d'inscription mardi 26 octobre 2021 Statut Membre Dernière intervention 12 novembre 2021
29 oct. 2021 à 03:23
Merci sa à marcher pour cette erreur.

Mais je comprend pas après j'ai eu une "erreur 3085 " qui me dit que la fonction <<DatesIntersect>> est non définie ; alors je l'ai définie juste avant comme les autres fonctions et il me re-affiche le même message d'erreur.


voilà la fonction que j'ai définie juste avant :
'INTERSECTION DE CRENEAUX DE DATES
' --------------------------------
' Entrée : dtDate1        <- Première date
'          dtDate2        <- Deuxième date (>= dtDate1)
'          dtFenetreDebut <- Départ du créneau temps
'          dtFenetreFin   <- Fin du créneau temps
' Sortie : True si les 2 créneaux se chevauchent.
'
Function DatesIntersect( _
    ByVal dtDate1 As Date, _
    ByVal dtDate2 As Date, _
    ByVal dtFenetreDebut As Date, _
    ByVal dtFenetreFin As Date) _
    As Boolean
    
    DatesIntersect = (dtDate1 >= dtFenetreDebut) And (dtDate2 <= dtFenetreFin)
End Function



en entier sa donne sa :
 Option Compare Database
Option Explicit
Function DateHeureUS(ByVal dt As Variant)
  If IsNull(dt) Then Exit Function
  DateHeureUS = "#" & Month(dt) & "/" & Day(dt) & "/" & Year(dt) _
    & " " & Format(dt, "hh:nn:ss") & "#"
End Function


' Insertion de valeurs dans une chaîne de caractères
' ---
'
Function StringFormat( _
  ByVal strChaine As String, _
  ParamArray varValeurs() As Variant) As String
 
  Dim intI As Integer
  For intI = LBound(varValeurs) To UBound(varValeurs)
    strChaine = Replace(strChaine, "{" & intI & "}", Nz(varValeurs(intI)))
  Next
 
  StringFormat = strChaine
End Function
'INTERSECTION DE CRENEAUX DE DATES
' --------------------------------
' Entrée : dtDate1        <- Première date
'          dtDate2        <- Deuxième date (>= dtDate1)
'          dtFenetreDebut <- Départ du créneau temps
'          dtFenetreFin   <- Fin du créneau temps
' Sortie : True si les 2 créneaux se chevauchent.
'
Function DatesIntersect( _
    ByVal dtDate1 As Date, _
    ByVal dtDate2 As Date, _
    ByVal dtFenetreDebut As Date, _
    ByVal dtFenetreFin As Date) _
    As Boolean
    
    DatesIntersect = (dtDate1 >= dtFenetreDebut) And (dtDate2 <= dtFenetreFin)
End Function


Private Sub btnVerifier_Click()
  Dim strSQL As String
  Dim strCritere As String
 
  ' Vérifier que toutes les infos sont renseignées

If IsNull(Me.txtDateDebut) _
    Or IsNull(Me.txtDateFin) _
    Or IsNull(Me.Voiture) Then
    
    MsgBox "Toutes les informations doivent être renseignées !", _
    vbExclamation
    
    Exit Sub
  
  End If
    
  ' Chaîne SQL de base
  
  strSQL = _
    "(DatesIntersect({0}, {1}, [Date Debut], [Date Fin]) = True)" _
    & " AND ([Voiture] = '{2}')"
 
  ' Critère final
  
  strCritere = StringFormat(strSQL, _
    DateHeureUS(Me.txtDateDebut), _
    DateHeureUS(Me.txtDateFin), _
    Me.Voiture)
        
  ' Si au moins 1 enregistrement répond au critère,
  ' la période est déjà réservée...
  
  If DCount("*", "Réservation", strCritere) > 0 Then
    
    MsgBox "Une réservation existe déjà sur cette période !", _
      vbExclamation
  
  Else
    
    MsgBox "La période est disponible pour cette voiture.", _
      vbInformation
  
  End If

End Sub


Auriez vous une idée de comment palier à ce problème s'il vous plaît ? Merci encore pour tout
0
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
29 oct. 2021 à 10:24
Ici, cette fonction est utilisée dans une requête SQL, donc hors du module.
Pour pouvoir utiliser une fonction hors du module, il faut qu'elle soit publique.
Par défaut, elle est sans doute privée.
Essaie de modifier sa déclaration:
public Function DatesIntersect(
0
luc731 Messages postés 22 Date d'inscription mardi 26 octobre 2021 Statut Membre Dernière intervention 12 novembre 2021 > yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024
29 oct. 2021 à 14:50
Merci sayer sa fonctionne merci beaucoups :D
0