IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Fonction qui recherche et compare des enregistrements VBA


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut Fonction qui recherche et compare des enregistrements VBA
    Bonjour j'ai écrit une fonction qui doit rechercher des salles disponibles à une date d1 et d2 donnée dans la base.
    lorsqu'un utilisateur sélectionnera une salle s1 par exemple que le programme vérifie lors de l'enregistrement que cette salle est à cette plage de date d1 et d2 demandées. je vous envoie mon code pour correction ou amélioration.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As String
    Dim rs1 As Recordset
    Dim db1 As Database
    Dim rep As Boolean
    Dim sql As String
    Dim i As Integer
    sallechoisie = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal")
    datedebutdemandee = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    datefindemandee = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    On Error GoTo ErrorHandler
     
    'si il n'y a pas d'enregistrement
    If rs1.EOF Then
    Exit Sub
    rep = False
    i = 1
    With rs1
    Do Until .EOF
    if ((rs1!date_debut between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#"))
      OR (rs1!date_fin between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#"))
    OR (rs1!date_debut < (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#)) And (rs1!date_debut>(#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")))then
    rep = False
    MsgBox "la salle est déja réservée à cette période"
    Else
    rep = True
    rs1.Update
    rs1.MoveNext
    i = i + 1
    Loop
    End With
     
    rs1.Close
    db1.Close
     
    Set rs1 = Nothing
    Set db1 = Nothing
     
    Exit Sub
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
    End Function

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    je vous envoie mon code pour correction ou amélioration.
    Correction de quoi ? Amélioration par rapport à quoi ?

    Y a-t-il un bug ?

    Philippe

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    cette partie de mon code est affichée en rouge comme s'il ya une erreur de syntaxe que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((rs1!date_debut between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#"))
      OR (rs1!date_fin between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#"))
    OR (rs1!date_debut < (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#)) And (rs1!date_debut>(#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")))then

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    On ne mets les informations comme cela à la ligne, voir le lien.

    https://access.developpez.com/faq/?p...og#RetourLigne

    Philippe

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    Merci Philippe!
    j'ai corrigé et il ne me présente pas d'erreur.Mais lorsque je lance ma procédure pour enregistrement ou j'appelle ma fonction il m'affiche une erreur de compilation:
    type d'argument Byref incompatible. et il se trouve que l'argument d1 de ma fonction est sélectionné.
    ou se trouve mon erreur?
    Mon code de procedure de sauvegarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Private Sub CmdEnreg_Click()
    Dim sal As String
    Dim cdate1, cdate2, vdated, vdatef As Date
    Dim sallechoisie As String
    Dim s As String
    Dim d1, d2 As Date
     
    MsgBox "voulez vous enregistrer "
    If (IsNull(Forms.CLIENT.Controls("code_cl"))) Then
    MsgBox "veuillez entrer le code du client"
    Exit Sub
    End If
     
    If (IsNull(Forms.CLIENT.Controls("nom_prenom"))) Then
    MsgBox "veuillez entrer le nom du client"
    Exit Sub
    End If
    'créer un client s'il n'existe pas dans la base de données
    Set db = CurrentDb
    Set rsClient = db.OpenRecordset("CLIENT")
     
    rsClient.AddNew
     
     
    'ajouter un client
     
    rsClient!code_cl = Forms.CLIENT.Controls("code_cl")
    rsClient!nom_prenom = Forms.CLIENT.Controls("nom_prenom")
    rsClient!tel1 = Forms.CLIENT.Controls("tel1")
    rsClient!tel2 = Forms.CLIENT.Controls("tel2")
    rsClient!email = Forms.CLIENT.Controls("email")
     
    rsClient.Update
    rsClient.Close
    Set rsClient = Nothing
     
    While Not rsRservation.EOF
    'Enregistrement d'une ou des réservations du client après des vérifications d'usage ou contraintes
    'Set rsReservation = db.OpenRecordset("RESERVATION")
    'If Me.Parent!code_cl <> "" Then
     
     
    'vérifie si une salle n'est pas sélectionnée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal"))) Then
    MsgBox ("Veuillez sélectionner une salle")
    Exit Sub
    End If
    'vérifie si une date de début n'est pas entrée par l'utilisateur
     If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut"))) Then
    MsgBox ("Veuillez entrer une date de debut")
    Exit Sub
    End If
    'vérifie si une date de fin n'est pas entrée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin"))) Then
    MsgBox ("Veuillez entrer une date de fin")
    Exit Sub
    End If
    'vérifier si la salle est disponible aux dates demandées
    s = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal")
    d1 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    d2 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
    Call salledisponible(s, d1, d2)
     
    DoCmd.SetWarnings False
     DoCmd.RunSQL "insert into RESERVATION(RESERVATION.code_cl,RESERVATION.code_sal_,RESERVATION.objet_res,RESERVATION.date_debut,RESERVATION.date_fin,RESERVATION.heure_debut,RESERVATION.heure_fin,RESERVATION.statut " & _
     "Values(" & Me.Parent!code_cl & ", " & sallechoisie & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("objet_res") & ",#" & (Format(datefindemande, "mm/dd/yyyy")) & "#, #" & (Format(datefindemande, "mm/dd/yyyy")) & "#, " & Forms.CLIENT.sfRESERVATION.Form.Controls("heure_debut") & ", " & _
     Forms.CLIENT.sfRESERVATION.Form.Controls("heure_fin") & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("statut") & ")"
    ' "Where RESERVATION.code_cl = '" & vcodecl & "'"
     DoCmd.SetWarnings True
     DoCmd.Save
     DoCmd.Close
     DoCmd.OpenForm "sfRESERVATION", acNormal, , , acFormAdd
     
    'rsReservation.MoveNext
    'rsReservation.Update
    'rsReservation.Close
    'Set rsReservation = Nothing
    Wend
     
     
     
    Set db = Nothing
     
    End Sub
    Ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    'cette fonction recherche des salles disponibles a une période souhaitée par un client
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As Boolean
    Dim rs1 As Recordset
    Dim db1 As Database
    Dim rep As Boolean
    Dim sql As String
    Dim i As Integer
    sallechoisie = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal")
    datedebutdemandee = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    datefindemandee = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    On Error GoTo ErrorHandler
     
    'si il n'y a pas d'enregistrement
    If rs1.EOF Then
    Exit Function
    rep = False
    i = 1
    With rs1
    Do Until .EOF
    If (rs1!date_debut Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
     If (rs1!date_fin Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
    If (rs1!date_debut < ("#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#")) And (rs1!date_debut > ("#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")) Then
    rep = False
    MsgBox "la salle est déja réservée à cette période"
    Else
    rep = True
    rs1.Update
    rs1.MoveNext
    i = i + 1
    Loop
    End With
     
    rs1.Close
    db1.Close
     
    Set rs1 = Nothing
    Set db1 = Nothing
     
    Exit Function
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
    End Function

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ta fonction doit renvoyer un booléen, donc dans celle-ci tu dois avoir à un moment en fonction de ton test :

    ou
    De plus tu utilises un Call pour appeler cette fonction ce qui est entièrement faut, c'est pour une routine (Sub)

    Il faut que tu mettes le résultat de ta fonction dans une variable booléenne, et d'ailleurs je ne vois pas comment tu veux utiliser le résultat après ???

    Revoit un peu ce qu'est une fonction.

    Philippe

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    la déclaration de plusieurs variables sur une même ligne est souvent source d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim cdate1, cdate2, vdated, vdatef As Date   ' ====> seule vdatef sera déclarée en date, les autre seront en Variant
    Dim d1, d2 As Date  'idem pour d1
    voici la bonne méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim cdate1 As Date, cdate2 As Date, vdated As Date, vdatef As Date   
     
    Dim d1 As Date
    Dim d2 As Date
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    Bonjour!
    j'ai une erreur de compilation: type d'argument Byref incompatible.celui-ci concerne les dates apparemment car l'erreur pointe sur d1

    mon code consiste à valider une ou des réservation d'un client après vérifications de la disponibilité des salles aux dates demandées.
    CODE lors de la sauvégarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    Private Sub CmdEnreg_Click()
    'Dim sal As String
    'Dim cdate1, cdate2, vdated, vdatef As Date
    Dim sallechoisie As String
    Dim s As String
    Dim d1, d2 As Date
     
    MsgBox "voulez vous enregistrer "
    If (IsNull(Forms.CLIENT.Controls("code_cl"))) Then
    MsgBox "veuillez entrer le code du client"
    Exit Sub
    End If
     
    If (IsNull(Forms.CLIENT.Controls("nom_prenom"))) Then
    MsgBox "veuillez entrer le nom du client"
    Exit Sub
    End If
    'créer un client s'il n'existe pas dans la base de données
    Set db = CurrentDb
    Set rsClient = db.OpenRecordset("CLIENT")
     
    rsClient.AddNew
     
     
    'ajouter un client
     
    rsClient!code_cl = Forms.CLIENT.Controls("code_cl")
    rsClient!nom_prenom = Forms.CLIENT.Controls("nom_prenom")
    rsClient!tel1 = Forms.CLIENT.Controls("tel1")
    rsClient!tel2 = Forms.CLIENT.Controls("tel2")
    rsClient!email = Forms.CLIENT.Controls("email")
     
    rsClient.Update
    rsClient.Close
    Set rsClient = Nothing
     
    While Not rsRservation.EOF
    'Enregistrement d'une ou des réservations du client après des vérifications d'usage ou contraintes
     
     
    'vérifie si une salle n'est pas sélectionnée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal"))) Then
    MsgBox ("Veuillez sélectionner une salle")
    Exit Sub
    End If
    'vérifie si une date de début n'est pas entrée par l'utilisateur
     If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut"))) Then
    MsgBox ("Veuillez entrer une date de debut")
    Exit Sub
    End If
    'vérifie si une date de fin n'est pas entrée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin"))) Then
    MsgBox ("Veuillez entrer une date de fin")
    Exit Sub
    End If
    'vérifier si la salle est disponible aux dates demandées
    s = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal")
    d1 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    d2 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
     
    If salledisponible(s, d1, d2) = True Then
     
    DoCmd.SetWarnings False
     DoCmd.RunSQL "insert into RESERVATION(RESERVATION.code_cl,RESERVATION.code_sal_,RESERVATION.objet_res,RESERVATION.date_debut,RESERVATION.date_fin,RESERVATION.heure_debut,RESERVATION.heure_fin,RESERVATION.statut " & _
     "Values(" & Me.Parent!code_cl & ", " & sallechoisie & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("objet_res") & ",#" & (Format(d1, "mm/dd/yyyy")) & "#, #" & (Format(d2, "mm/dd/yyyy")) & "#, " & Forms.CLIENT.sfRESERVATION.Form.Controls("heure_debut") & ", " & _
     Forms.CLIENT.sfRESERVATION.Form.Controls("heure_fin") & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("statut") & ")"
    ' "Where RESERVATION.code_cl = '" & vcodecl & "'"
     DoCmd.SetWarnings True
     DoCmd.Save
     DoCmd.Close
     DoCmd.OpenForm "sfRESERVATION", acNormal, , , acFormAdd
    Else
    'ouvrir le formulaire liste des salle diponible
    End If
    Wend
     
    Set db = Nothing
     
    End Sub
    code de la fonction qui est appelée dans la procedure CmdEnreg()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As Boolean
        Dim db1 As DAO.Database, rs1 As DAO.Recordset
        Dim sql As String
     
     
    On Error GoTo ErrorHandler
     
     
     
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    'si il n'y a pas d'enregistrement
        If rs1.RecordCount = 0 Then
           salledisponible = False
            Exit Function
        End If
     
    With rs1
    Do Until .EOF
    If (rs1!date_debut Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
     If (rs1!date_fin Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
    If (rs1!date_debut < ("#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#")) And (rs1!date_debut > ("#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")) Then
    salledisponible = False
    MsgBox "la salle est déja réservée à cette période"
    GoTo Exit_0
     
    Else
    salledisponible = True
    End If
    rs1.Update
    rs1.MoveNext
     
    Loop
    End With
        rs1.Close
        db1.Close
     
    Exit_0:
        Set rs1 = Nothing
        Set db1 = Nothing
        Exit Function
     
    Exit Function
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
     
      salledisponible = False
    End Function

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re

    Déclare ta variable d1 comme une date, car tu as écrit :
    Hors avec cet écriture d1 est déclaré comme un variant et non une date.

    Philippe

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    Merci Philippe pour votre aide!!! ce problème est résolu.
    mais a l'exécution je reçois un message d'erreur que je cite:
    <<Erreur d'execution 3022>>:
    Modifications non effectuées:risque de doublon dans champs index,clé principales ou relation interdisant les doublons....
    dans mon code l'erreur pointe sur rsClient.update
    Mon code complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Private Sub CmdEnreg_Click()
    'Dim sal As String
    'Dim cdate1, cdate2, vdated, vdatef As Date
    Dim sallechoisie As String
    Dim s As String
    Dim d1 As Date
    Dim d2 As Date
    
    MsgBox "voulez vous enregistrer "
    If (IsNull(Forms.CLIENT.Controls("code_cl"))) Then
    MsgBox "veuillez entrer le code du client"
    Exit Sub
    End If
    
    If (IsNull(Forms.CLIENT.Controls("nom_prenom"))) Then
    MsgBox "veuillez entrer le nom du client"
    Exit Sub
    End If
    'créer un client s'il n'existe pas dans la base de données
    Set db = CurrentDb
    Set rsClient = db.OpenRecordset("CLIENT")
    
    rsClient.AddNew
    
    
    'ajouter un client
    
    rsClient!code_cl = Forms.CLIENT.Controls("code_cl")
    rsClient!nom_prenom = Forms.CLIENT.Controls("nom_prenom")
    rsClient!tel1 = Forms.CLIENT.Controls("tel1")
    rsClient!tel2 = Forms.CLIENT.Controls("tel2")
    rsClient!email = Forms.CLIENT.Controls("email")
    
    rsClient.Update
    rsClient.Close
    Set rsClient = Nothing
    
    While Not rsRservation.EOF
    'Enregistrement d'une ou des réservations du client après des vérifications d'usage ou contraintes
    
    
    'vérifie si une salle n'est pas sélectionnée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal"))) Then
    MsgBox ("Veuillez sélectionner une salle")
    Exit Sub
    End If
    'vérifie si une date de début n'est pas entrée par l'utilisateur
     If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut"))) Then
    MsgBox ("Veuillez entrer une date de debut")
    Exit Sub
    End If
    'vérifie si une date de fin n'est pas entrée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin"))) Then
    MsgBox ("Veuillez entrer une date de fin")
    Exit Sub
    End If
    'vérifier si la salle est disponible aux dates demandées
    s = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal")
    d1 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    d2 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
    
    If salledisponible(s, d1, d2) = True Then
    
    DoCmd.SetWarnings False
     DoCmd.RunSQL "insert into RESERVATION(RESERVATION.code_cl,RESERVATION.code_sal_,RESERVATION.objet_res,RESERVATION.date_debut,RESERVATION.date_fin,RESERVATION.heure_debut,RESERVATION.heure_fin,RESERVATION.statut " & _
     "Values(" & Forms.CLIENT.Controls("code_cl") & ", " & sallechoisie & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("objet_res") & ",#" & (Format(d1, "mm/dd/yyyy")) & "#, #" & (Format(d2, "mm/dd/yyyy")) & "#, " & Forms.CLIENT.sfRESERVATION.Form.Controls("heure_debut") & ", " & _
     Forms.CLIENT.sfRESERVATION.Form.Controls("heure_fin") & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("statut") & ")"
    ' "Where RESERVATION.code_cl = '" & vcodecl & "'"
     DoCmd.SetWarnings True
     DoCmd.Save
     DoCmd.Close
     DoCmd.OpenForm "sfRESERVATION", acNormal, , , acFormAdd
    Else
    'ouvrir le formulaire liste des salle diponible
    End If
    Wend
    
    Set db = Nothing
    
    End Sub

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re

    Là cela vient de ta table, tu essayes de mettre des données en double dans celle-ci.

    C'est peut-être un client qui existe déjà par exemple, il faut regarder les propriétés des champs de celle-ci.

    Philippe

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    kmomo,
    Ca ne semble pas très efficace d'entretenir 2 fils sur le même sujet. Isn't it ?
    CDLT
    "Always look at the bright side of life." Monty Python.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    J'ai vérifié que le structure de mes tables sont correctes a mon avis mais que dans mon programme je n'ai pas tenu compte lorsqu'un client existe déja.
    quelle action faire quand il existe. j'ai un message d'erreur: Mise à jour impossible. la base de données ou l'objet est en lecture seule.
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    'Verifier q'un client existe ou pas dans la base de données
    Set db = CurrentDb
    Set rsClient = db.OpenRecordset("select distinct * from CLIENT where code_cl ='" & Me.code_cl & "'")
    'Set rsClient = db.OpenRecordset("CLIENT")
    'si le client existe
     If rsClient!code_cl = "& me.code_cl &" Then
    db.Execute "update CLIENT set rsClient!nom_prenom =" & Me.nom_prenom & " and rsClient!tel1=" & Me.tel1 & " and rsClient!tel2=" & Me.tel2 & " rsClient!email=" & Me.email & " where rsClient!code_cl = " & Me.code_cl & ""
     Exit Sub
     Else
     's'il n'existe pas on le crée
    rsClient.AddNew
     
     
    'ajouter un client
     
    rsClient!code_cl = Forms.CLIENT.Controls("code_cl")
    rsClient!nom_prenom = Forms.CLIENT.Controls("nom_prenom")
    rsClient!tel1 = Forms.CLIENT.Controls("tel1")
    rsClient!tel2 = Forms.CLIENT.Controls("tel2")
    rsClient!email = Forms.CLIENT.Controls("email")
     
    rsClient.Update
    rsClient.Close
    Set rsClient = Nothing
    Exit Sub
    End If

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    je suis perdu j'avoue que je ne sais pas comment:
    -enregistrer mes données les uns à la suite des autres(sans écraser les enregistrement précédents)
    -éviter ces doublons et mettre a jour ma table client ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    'Verifier q'un client existe ou pas dans la base de données
    Set db = CurrentDb
    Set rsClient = db.OpenRecordset("select distinct * from CLIENT where code_cl ='" & Me.code_cl & "'")
     
    'Set rsClient = db.OpenRecordset("CLIENT")
     
    'si le client existe
    If rsClient!code_cl = " & Me.code_cl & " Then
     Exit Sub
     
     Else
     's'il n'existe pas on le crée
    rsClient.AddNew
     
     
    'ajouter un client
     
    rsClient!code_cl = Forms.CLIENT.Controls("code_cl")
    rsClient!nom_prenom = Forms.CLIENT.Controls("nom_prenom")
    rsClient!tel1 = Forms.CLIENT.Controls("tel1")
    rsClient!tel2 = Forms.CLIENT.Controls("tel2")
    rsClient!email = Forms.CLIENT.Controls("email")
     
     
    rsClient.Update
    rsClient.Close
    Set rsClient = Nothing
    Set rmaj = Nothing
    Exit Sub
    DoCmd.GoToRecord , , acNewRec
    End If
    a l'execution mise à jour impossible.....
    Besoin d'aide!!!!

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    Bonjour!
    je suis à bout de mes recherches. j'ai un formulaire principal dans lequel je saisie un client s'il n'existe pas et s'il existe je le sélectionne avec mon combobox et un sous formulaire ou je renseigne ses réservations.
    pour qu'il aie réservation il faut un client et une salle disponible.
    j'ai crée une fonction qui vérifie la disponibilité d'une salle que j'appelle lors de l'enregistrement, mais ne marche pas lorsque j'essaie de réserver une salle qui est toujours en cours de réservation à la même période donnée.
    Dite moi ce qui ne va pas dans mes codes:
    Lors de la sauvegarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    Private Sub CmdEnreg_Click()
     
    MsgBox "voulez vous enregistrer "
     
    'Verifier q'un client existe ou pas dans la base de données
    Set db = CurrentDb
    'Set rqClient = db.OpenRecordset("select distinct * from CLIENT where code_cl ='" & Me.code_cl & "'")
     
    Set rsClient = db.OpenRecordset("CLIENT")
    rech = Nz(DLookup("code_cl", "CLIENT", code_cl = " & cbo_choix &"))
     
    'si le client existe
    If rsClient!code_cl = " & cbo_choix & " Then
    Me.code_cl = rsClient!code_cl
    Me.nom_prenom = rsClient!nom_prenom
    Me.tel1 = rsClient!tel1
    Me.tel2 = rsClient!tel2
    Me.email = rsClient!email
     Exit Sub
     
     Else
     's'il n'existe pas on le crée
     'If (IsNull(Forms.CLIENT.Controls("code_cl"))) Then
    'MsgBox "veuillez entrer le code du client"
    'Exit Sub
    'End If
     
    'If (IsNull(Forms.CLIENT.Controls("nom_prenom"))) Then
    'MsgBox "veuillez entrer le nom du client"
    'Exit Sub
    'End If
     
    rsClient.AddNew
     
     
    'ajouter un client
     
    rsClient!code_cl = Forms.CLIENT.Controls("code_cl")
    rsClient!nom_prenom = Forms.CLIENT.Controls("nom_prenom")
    rsClient!tel1 = Forms.CLIENT.Controls("tel1")
    rsClient!tel2 = Forms.CLIENT.Controls("tel2")
    rsClient!email = Forms.CLIENT.Controls("email")
    Exit Sub
    End If
     
     
    While Not rsRservation.EOF
    'Enregistrement d'une ou des réservations du client après des vérifications d'usage ou contraintes
     
     
    'vérifie si une salle n'est pas sélectionnée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal"))) Then
    MsgBox ("Veuillez sélectionner une salle")
    Exit Sub
    End If
    'vérifie si une date de début n'est pas entrée par l'utilisateur
     If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut"))) Then
    MsgBox ("Veuillez entrer une date de debut")
    Exit Sub
    End If
    'vérifie si une date de fin n'est pas entrée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin"))) Then
    MsgBox ("Veuillez entrer une date de fin")
    Exit Sub
    End If
    'vérifier si la salle est disponible aux dates demandées
    s = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal")
    d1 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    d2 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
     
    If salledisponible(s, d1, d2) = True And Forms.CLIENT.Controls("code_cl") <> "" Then
     
    DoCmd.SetWarnings False
     DoCmd.RunSQL "insert into RESERVATION(RESERVATION.code_cl,RESERVATION.code_sal_,RESERVATION.objet_res,RESERVATION.date_debut,RESERVATION.date_fin,RESERVATION.heure_debut,RESERVATION.heure_fin,RESERVATION.statut " & _
     "Values(" & Forms.CLIENT.Controls("code_cl") & ", " & sallechoisie & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("objet_res") & ",#" & (Format(d1, "mm/dd/yyyy")) & "#, #" & (Format(d2, "mm/dd/yyyy")) & "#, " & Forms.CLIENT.sfRESERVATION.Form.Controls("heure_debut") & ", " & _
     Forms.CLIENT.sfRESERVATION.Form.Controls("heure_fin") & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("statut") & ")"
    ' "Where RESERVATION.code_cl = '" & vcodecl & "'"
     DoCmd.SetWarnings True
     
     DoCmd.Save
     DoCmd.Close
     DoCmd.OpenForm "sfRESERVATION", acNormal, , , acFormAdd
    Else
    'ouvrir le formulaire liste des salle diponible
    End If
    rsReservation.MoveNext
    Wend
     
    rsClient.Update
    rsClient.Close
    db.Close
     
    Set rsClient = Nothing
    Set db = Nothing
     
    End Sub
    ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As Boolean
        Dim db1 As DAO.Database, rs1 As DAO.Recordset
        Dim sql As String
     
     
    On Error GoTo ErrorHandler
     
     
     
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    'si il n'y a pas d'enregistrement
        If rs1.RecordCount = 0 Then
           salledisponible = False
            Exit Function
        End If
     
    With rs1
    Do Until .EOF
    If (rs1!date_debut Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
     If (rs1!date_fin Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
    If (rs1!date_debut < ("#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#")) And (rs1!date_debut > ("#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")) Then
    salledisponible = False
    MsgBox "la salle est déja réservée à cette période"
    GoTo Exit_0
     
    Else
    salledisponible = True
    End If
    rs1.Update
    rs1.MoveNext
     
    Loop
    End With
        rs1.Close
        db1.Close
     
    Exit_0:
        Set rs1 = Nothing
        Set db1 = Nothing
        Exit Function
     
    Exit Function
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
     
      salledisponible = False
    End Function

  16. #16
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    Bonsoir!
    je reviens vers vous pour sollicité votre aide.
    j'ai mon code qui n'est pas fonctionnel,ça beug: Modification non effectuées.....
    ça ne vérifie pas si une salle est disponible lors de l'enregistrement
    et je souhaite avoir le focus dans mon sous formulaire lorsque je sélectionne un client
    Mon code complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    Option Compare Database
    Dim rsClient As DAO.Recordset
    Dim rsReservation As DAO.Recordset
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sallechoisie As String
    Dim s As String
    Dim d1 As Date
    Dim d2 As Date
     
    Private Sub cbo_choix_AfterUpdate()
    Me.cbo_choix.Requery
    End Sub
     
    Private Sub cbo_choix_Click()
    Set db = CurrentDb
    Set rs = db.OpenRecordset("select distinct * from CLIENT where code_cl like'" & Me.cbo_choix & "'")
    If rs.Fields!code_cl = Me.cbo_choix Then
     
    Me.code_cl = rs.Fields!code_cl
    Me.nom_prenom = rs.Fields!nom_prenom
    Me.tel1 = rs.Fields!tel1
    Me.tel2 = rs.Fields!tel2
    Me.email = rs.Fields!email
    End If
    Me.cbo_choix.Requery
     
     
     
    End Sub
     
    Private Sub CmdAjouter_Click()
     
    Dim ctrl As Control
     For Each ctrl In Me.Controls
     If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then
     ctrl.Value = ""
     
     End If
     Next ctrl
     
    End Sub
     
    Private Sub CmdEnreg_Click()
     
    MsgBox "voulez vous enregistrer "
     
    'Verifier q'un client existe ou pas dans la base de données
    Set db = CurrentDb
    'Set rqClient = db.OpenRecordset("select distinct * from CLIENT where code_cl ='" & Me.code_cl & "'")
     
    Set rsClient = db.OpenRecordset("CLIENT")
    rech = Nz(DLookup("code_cl", "CLIENT", code_cl = " & cbo_choix &"))
     
    'si le client existe
    If rsClient!code_cl = " & cbo_choix & " Then
    With rs.FindFirst
    Me.code_cl = rsClient!code_cl
    Me.nom_prenom = rsClient!nom_prenom
    Me.tel1 = rsClient!tel1
    Me.tel2 = rsClient!tel2
    Me.email = rsClient!email
    rsClient.Update
    rsClient.Close
     
     Else
     's'il n'existe pas on le crée
     'If (IsNull(Forms.CLIENT.Controls("code_cl"))) Then
    'MsgBox "veuillez entrer le code du client"
    'Exit Sub
    'End If
     
    'If (IsNull(Forms.CLIENT.Controls("nom_prenom"))) Then
    'MsgBox "veuillez entrer le nom du client"
    'Exit Sub
    'End If
     
    rsClient.AddNew
     
     
    'ajouter un client
     
    rsClient!code_cl = Forms.CLIENT.Controls("code_cl")
    rsClient!nom_prenom = Forms.CLIENT.Controls("nom_prenom")
    rsClient!tel1 = Forms.CLIENT.Controls("tel1")
    rsClient!tel2 = Forms.CLIENT.Controls("tel2")
    rsClient!email = Forms.CLIENT.Controls("email")
    rsClient.Update
    rsClient.Close
    End If
     
     
    While rsRservation.EOF
    'Enregistrement d'une ou des réservations du client après des vérifications d'usage ou contraintes
     
     
    'vérifie si une salle n'est pas sélectionnée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal"))) Then
    MsgBox ("Veuillez sélectionner une salle")
    Exit Sub
    End If
    'vérifie si une date de début n'est pas entrée par l'utilisateur
     If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut"))) Then
    MsgBox ("Veuillez entrer une date de debut")
    Exit Sub
    End If
    'vérifie si une date de fin n'est pas entrée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin"))) Then
    MsgBox ("Veuillez entrer une date de fin")
    Exit Sub
    End If
    'vérifier si la salle est disponible aux dates demandées
    s = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal n")
    d1 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    d2 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
     
    If salledisponible(s, d1, d2) = True And Forms.CLIENT.Controls("code_cl") <> "" Then
     
    DoCmd.SetWarnings False
     DoCmd.RunSQL "insert into RESERVATION(RESERVATION.code_cl,RESERVATION.code_sal_,RESERVATION.objet_res,RESERVATION.date_debut,RESERVATION.date_fin,RESERVATION.heure_debut,RESERVATION.heure_fin,RESERVATION.statut " & _
     "Values(" & Forms.CLIENT.Controls("code_cl") & ", " & sallechoisie & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("objet_res") & ",#" & (Format(d1, "mm/dd/yyyy")) & "#, #" & (Format(d2, "mm/dd/yyyy")) & "#, " & Forms.CLIENT.sfRESERVATION.Form.Controls("heure_debut") & ", " & _
     Forms.CLIENT.sfRESERVATION.Form.Controls("heure_fin") & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("statut") & ")"
    ' "Where RESERVATION.code_cl = '" & vcodecl & "'"
     DoCmd.SetWarnings True
     
     DoCmd.Save
     DoCmd.Close
     DoCmd.OpenForm "sfRESERVATION", acNormal, , , acFormAdd
    Else
    'ouvrir le formulaire liste des salle diponible
    End If
    rsReservation.MoveNext
    Wend
     
    rsClient.Update
    rsClient.Close
    db.Close
     
    Set rsClient = Nothing
    Set db = Nothing
     
    End Sub
     
    Private Sub Form_Load()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("select code_cl from CLIENT")
    rs.MoveFirst
    While Not rs.EOF
    Me.cbo_choix.AddItem rs.Fields!code_cl
    rs.MoveNext
    Wend
    rs.Close
     
    End Sub
     
     
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As Boolean
        Dim db1 As DAO.Database, rs1 As DAO.Recordset
        Dim sql As String
     
     
    On Error GoTo ErrorHandler
     
     
     
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    'si il n'y a pas d'enregistrement
        If rs1.RecordCount = 0 Then
           salledisponible = False
            Exit Function
        End If
     
    With rs1
    Do Until .EOF
    If (rs1!date_debut Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
     If (rs1!date_fin Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
    If (rs1!date_debut < ("#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#")) And (rs1!date_debut > ("#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")) Then
    salledisponible = False
    MsgBox "la salle est déja réservée à cette période"
    GoTo Exit_0
     
    Else
    salledisponible = True
    End If
    rs1.Update
    rs1.MoveNext
     
    Loop
    End With
        rs1.Close
        db1.Close
     
    Exit_0:
        Set rs1 = Nothing
        Set db1 = Nothing
        Exit Function
     
    Exit Function
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
     
      salledisponible = False
    End Function
    Images attachées Images attachées

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    Bonjour! je suis confronté dans la recherche d'un enregistrement existant ou n,on, c'est dire que lors d'un enregistrement une vérification du client s'impose afin d'éviter des doublons.
    Dans mon formulaire principale je remplie les champs text du client(code,nom,tel,email) et une liste déroulante modifiable ou je peux sélectionner le code d'un client existant. Et un sous formulaire ou je renseigne ces réservations si au moins une salles est disponible à la date demandée.
    j'ai mon code qui ne fonctionne pas du tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    Option Compare Database
    Dim rsClient As DAO.Recordset
    Dim rsReservation As DAO.Recordset
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sallechoisie As String
    Dim s As String
    Dim d1 As Date
    Dim d2 As Date
     
    Private Sub cbo_choix_Click()
    Set db = CurrentDb
    Set rs = db.OpenRecordset("select distinct * from CLIENT where code_cl like'" & Me.cbo_choix & "'")
    If rs.Fields!code_cl = Me.cbo_choix Then
     
    Me.code_cl = rs.Fields!code_cl
    Me.nom_prenom = rs.Fields!nom_prenom
    Me.tel1 = rs.Fields!tel1
    Me.tel2 = rs.Fields!tel2
    Me.email = rs.Fields!email
    End If
    Me.Refresh
    Me.cbo_choix.Requery
    Me.sfRESERVATION.SetFocus
    DoCmd.RunCommand acCmdRecordsGoToNew
    End Sub
     
    Private Sub CmdEnreg_Click()
     
    MsgBox "voulez vous enregistrer "
     
    Dim vcode_cl As String
    vcode_cl = Me.cbo_choix.Value
    If Not vcode_cl = "" Then
    Set rsClient = Me.RecordsetClone
    rs.FindFirst "[code_cl]=" & vcode_cl & ""
    If Not (rsClient.NoMatch) Then
    Me.Bookmark = rsClient.Bookmark
    Me.cbo_choix.Value = vcode_cl
    Else
     DoCmd.GoToRecord acForm, Me.Name, acNewRec
    rsClient!code_cl = Me.code_cl
    rsClient!nom_prenom = Me.nom_prenom
    rsClient!tel1 = Me.tel1
    rsClient!ctel2 = Me.tel2
    rsClient!email = Me.email
    End If
    Me.Refresh
    rsClient.Close
    Set rsClient = Nothing
     
    While rsRservation.EOF
    'Enregistrement d'une ou des réservations du client après des vérifications d'usage ou contraintes
     
     
    'vérifie si une salle n'est pas sélectionnée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal"))) Then
    MsgBox ("Veuillez sélectionner une salle")
    Exit Sub
    End If
    'vérifie si une date de début n'est pas entrée par l'utilisateur
     If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut"))) Then
    MsgBox ("Veuillez entrer une date de debut")
    Exit Sub
    End If
    'vérifie si une date de fin n'est pas entrée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin"))) Then
    MsgBox ("Veuillez entrer une date de fin")
    Exit Sub
    End If
    'vérifier si la salle est disponible aux dates demandées
    s = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal n")
    d1 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    d2 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
     
    If salledisponible(s, d1, d2) = True And Forms.CLIENT.Controls("code_cl") <> "" Then
     
    DoCmd.SetWarnings False
     DoCmd.RunSQL "insert into RESERVATION(RESERVATION.code_cl,RESERVATION.code_sal_,RESERVATION.objet_res,RESERVATION.date_debut,RESERVATION.date_fin,RESERVATION.heure_debut,RESERVATION.heure_fin,RESERVATION.statut " & _
     "Values(" & Forms.CLIENT.Controls("code_cl") & ", " & sallechoisie & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("objet_res") & ",#" & (Format(d1, "mm/dd/yyyy")) & "#, #" & (Format(d2, "mm/dd/yyyy")) & "#, " & Forms.CLIENT.sfRESERVATION.Form.Controls("heure_debut") & ", " & _
     Forms.CLIENT.sfRESERVATION.Form.Controls("heure_fin") & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("statut") & ")"
    ' "Where RESERVATION.code_cl = '" & vcodecl & "'"
     DoCmd.SetWarnings True
     
     DoCmd.Save
     DoCmd.Close
     DoCmd.OpenForm "sfRESERVATION", acNormal, , , acFormAdd
    'Else
    'ouvrir le formulaire liste des salle diponible
    End If
    rsReservation.MoveNext
    Wend
     
    rsReservation.Update
    rsReservation.Close
    db.Close
     
    Set rsReservation = Nothing
    Set db = Nothing
     
    End Sub
     
    Private Sub Form_Load()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("select code_cl from CLIENT")
    rs.MoveFirst
    While Not rs.EOF
    Me.cbo_choix.AddItem rs.Fields!code_cl
    rs.MoveNext
    Wend
    rs.Close
     
    End Sub
     
     
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As Boolean
        Dim db1 As DAO.Database, rs1 As DAO.Recordset
        Dim sql As String
     
     
    On Error GoTo ErrorHandler
     
     
     
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    'si il n'y a pas d'enregistrement
        If rs1.RecordCount = 0 Then
           salledisponible = False
            Exit Function
        End If
     
    With rs1
    Do Until .EOF
    If (rs1!date_debut Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
     If (rs1!date_fin Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
    If (rs1!date_debut < ("#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#")) And (rs1!date_debut > ("#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")) Then
    salledisponible = False
    MsgBox "la salle est déja réservée à cette période"
    GoTo Exit_0
     
    Else
    salledisponible = True
    End If
    rs1.Update
    rs1.MoveNext
     
    Loop
    End With
        rs1.Close
        db1.Close
     
    Exit_0:
        Set rs1 = Nothing
        Set db1 = Nothing
        Exit Function
     
    Exit Function
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
     
      salledisponible = False
    End Function

  18. #18
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut SAUVEGARDE DE DONNÉES DANS LES TABLES DE MA BASE DE DONNÉES
    bonjour à vous! je suis toujours dans l'agonie sur mon code pour enregistrer une réservation d'un client à la condition que la salle demandée soit disponible.
    D'abors mon code pour réinitialiser les champs de mon formulaire composé de formulaire principale et d'un sous formulaire pour une nouvelle saisie,j'ai un message <<d'erreur d'exécution 3315 le champs code_cl ne peut pas être une chaine vide>>
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CmdAjouter_Click()
    Dim ctrl As Control
     For Each ctrl In Me.Controls
     If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then
     ctrl.Value = ""
     
     End If
     Next ctrl
     
    End Sub
    Ensuite lorsque je clic sur le bonton CmdEnreg pour enregistrement j'ai une <<erreur de compilation:Tableau attendu>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    Private Sub CmdEnreg_Click()
    Dim rsSalle As String
    'Dim trouve As Boolean
     
    MsgBox "voulez vous enregistrer "
     
    Dim vcode_cl As String
    vcode_cl = Me.cbo_choix.Value
    If Not vcode_cl = "" Then
    Set rsClient = Me.RecordsetClone
    rs.FindFirst "[code_cl]='" & vcode_cl & "'"
    If Not (rsClient.NoMatch) Then
    Me.Bookmark = rsClient.Bookmark
    Me.cbo_choix.Value = vcode_cl
    Else
     rsClient.AddNew
    rsClient!code_cl = Me.code_cl
    rsClient!nom_prenom = Me.nom_prenom
    rsClient!tel1 = Me.tel1
    rsClient!ctel2 = Me.tel2
    rsClient!email = Me.email
    rsClient.Update
    rsClient.Close
    End If
    Me.Refresh
     
    Set rsClient = Nothing
     
     
    'Enregistrement d'une ou des réservations du client après des vérifications d'usage ou contraintes
     
     
    'vérifie si une salle n'est pas sélectionnée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal"))) Then
    MsgBox ("Veuillez sélectionner une salle")
    Exit Sub
    End If
    'vérifie si une date de début n'est pas entrée par l'utilisateur
     If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut"))) Then
    MsgBox ("Veuillez entrer une date de debut")
    Exit Sub
    End If
    'vérifie si une date de fin n'est pas entrée par l'utilisateur
    If (IsNull(Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin"))) Then
    MsgBox ("Veuillez entrer une date de fin")
    Exit Sub
    End If
    'vérifier si la salle est disponible aux dates demandées
    s = Forms!CLIENT.sfReservationSalleClient.Form.Controls("code_sal n")
    d1 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_debut")
    d2 = Forms!CLIENT.sfReservationSalleClient.Form.Controls("date_fin")
     
    If sallechoisie(s, d1, d2) = True And Me.code_cl <> "" Then
    Set rsReservation = db.OpenRecordset("RESERVATION")
     
    DoCmd.SetWarnings False
     DoCmd.RunSQL "insert into RESERVATION(RESERVATION.code_cl,RESERVATION.code_sal_,RESERVATION.objet_res,RESERVATION.date_debut,RESERVATION.date_fin,RESERVATION.heure_debut,RESERVATION.heure_fin,RESERVATION.statut " & _
     "Values(" & Forms.CLIENT.Controls("code_cl") & ", " & sallechoisie & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("objet_res") & ",#" & (Format(d1, "mm/dd/yyyy")) & "#, #" & (Format(d2, "mm/dd/yyyy")) & "#, " & Forms.CLIENT.sfRESERVATION.Form.Controls("heure_debut") & ", " & _
     Forms.CLIENT.sfRESERVATION.Form.Controls("heure_fin") & ", " & Forms.CLIENT.sfRESERVATION.Form.Controls("statut") & ")"
    ' "Where RESERVATION.code_cl = '" & vcodecl & "'"
     DoCmd.SetWarnings True
     DoCmd.Close
     
    Else
    MsgBox "Salle indisponible"
    End If
    rsReservation.MoveNext
     
     
    rsReservation.Close
    db.Close
     
    Set rsReservation = Nothing
    Set db = Nothing
     
    End Sub
    Ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As Boolean
        Dim db1 As DAO.Database, rs1 As DAO.Recordset
        Dim sql As String
     
     
    On Error GoTo ErrorHandler
     
     
     
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    'si il n'y a pas d'enregistrement
        If rs1.RecordCount = 0 Then
           salledisponible = False
            Exit Function
        End If
     
    With rs1
    Do Until .EOF
    If (rs1!date_debut Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
     If (rs1!date_fin Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
    If (rs1!date_debut < ("#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#")) And (rs1!date_debut > ("#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")) Then
    salledisponible = False
    MsgBox "la salle est déja réservée à cette période"
    GoTo Exit_0
     
    Else
    salledisponible = True
    End If
    rs1.Update
    rs1.MoveNext
     
    Loop
    End With
        rs1.Close
        db1.Close
     
    Exit_0:
        Set rs1 = Nothing
        Set db1 = Nothing
        Exit Function
     
    Exit Function
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
     
      salledisponible = False
    End Function
    avec ces message d'erreur je ne peux pas savoir est ce qu'il enregistre si une salle est disponible
    Besoin d'aide!!!

  19. #19
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 19
    Points
    19
    Par défaut BOUCLE SANS DO
    bONJOUR! j'ai besoin d'aide sur le message d'erreur que je recois à l'exécution de mon programme qui est:<<Boucle sans Do>>.
    Dans mon programme j'ai crée une fonction qui vérifie la disponibilité d'une salle avant validation de la réservation.
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Public Function salledisponible(sallechoisie As String, datedebutdemandee As Date, datefindemandee As Date) As Boolean
        Dim db1 As DAO.Database, rs1 As DAO.Recordset
        Dim sql As String
     
     
    On Error GoTo ErrorHandler
     
     
     
    Set db1 = CurrentDb
    sql = "select * from RESERVATION where (code_sal =" & sallechoisie & ") "
    Set rs1 = db1.OpenRecordset(sql, dbOpenDynaset)
     
    'si il n'y a pas d'enregistrement
        If rs1.RecordCount = 0 Then
           salledisponible = False
            Exit Function
        End If
     
    With rs1
    Do
    If (rs1!date_debut Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#) And (#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
     If (rs1!date_fin Is "between (#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "# )And( #" & (Format(datefindemandee, "mm/dd/yyyy")) & "#)") Then
    If (rs1!date_debut < ("#" & (Format(datedebutdemandee, "mm/dd/yyyy")) & "#")) And (rs1!date_debut > ("#" & (Format(datefindemandee, "mm/dd/yyyy")) & "#")) Then
    salledisponible = False
    MsgBox "la salle est déja réservée à cette période"
    GoTo Exit_0
     
    Else
    salledisponible = True
    End If
    rs1.Update
    rs1.MoveNext
     
    Loop Until .EOF
    End With
        rs1.Close
        db1.Close
     
    Exit_0:
        Set rs1 = Nothing
        Set db1 = Nothing
        Exit Function
     
    Exit Function
    ErrorHandler:
       MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
     
      salledisponible = False
    End Function

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/08/2007, 11h35
  2. [requête sql]comment comparer des enregistrements de deux tables
    Par DSabah dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/06/2007, 15h12
  3. fonction qui recherche une chaine dans une autre chaine
    Par pierre2410 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/05/2007, 16h30
  4. Réponses: 1
    Dernier message: 27/06/2006, 18h34
  5. Une fonction qui permette d'ajouter des séparateurs...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/04/2006, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo