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 :

Problème avec champ Multi valeurs dans table


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut Problème avec champ Multi valeurs dans table
    Bonjour à tous,

    Je fais appel à vos compétences pour m'éclairer.
    Je prépare un planning sur la base d' un planning hebdo récupéré sur le site...
    tous fonctionne parfaitement avec l'entré d' un seul élève dans le planning, mais j'aimerai pouvoir gérer plusieurs élèves sur le même créneau.
    je suis passé par une valeurs de champ multiple mais obtiens un bug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set RsPL = CurrentDb.OpenRecordset(leSQL, dbOpenForwardOnly)
    j' arrive au bout de mes connaissances très limitées en VBA .

    merci d'avance pour votre aide...

    cordialement,

    Laurent

    le lien de la base :
    https://e-nautia.com/share/28898-d4p8x5vu

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Je prépare un planning sur la base d' un planning hebdo récupéré sur le site...
    tous fonctionne parfaitement avec l'entré d' un seul élève dans le planning,
    Ça c'est une bonne chose!

    je suis passé par une valeurs de champ multiple
    Ça je comprends pas ce que ça veut dire!

    Je suis sur mon téléphone portable, je n'ai pas Access, si tu pouvais utiliser des mots, des exemple et accessoirement du code!

  3. #3
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    je tente de récupérer une liste d'élève pour les afficher et inscrire à un cours ( exemple élèves "A" et "B" dans la classe "D1") avec l'affichage sur le planning des noms des élèves, du prof, de la classe et/ou d'un memo.

    pour ce qui est du traitement d'un seul élève il n'y a pas de soucis. Mais depuis que j'ai transformé mon champ de la table T_RDV ( cours) en multi-valeurs la base plante avec l'erreur du 1er message.

    les requêtes sont bien alimentées des 2 nom d'élèves mais plus sur le planning...

    je ne sais malheureusement pas ou agir et ai compris que le problème venait des requêtes R_RDV et R_RDV2.

    merci pour votre réponse,

    laurent
    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
    Public Sub MajPlanning()
    ' La procedure de mise à jour des rendez-vous sur le planning en fonction de la date de début :
    ' La procedure selectionne dans la table T_RendezVous les RDV compris entre la date de début (DateDebut) et la date de debut + 7 jours (DateDebut+7),
    ' puis met à jour le planning avec ces rendez-vous.
    ' Pour chaque RDV l'horaire de début et l'horaire de fin permettent de dimensionner le label correspondant au creneau horaire du début.
    
    Dim RsPL As DAO.Recordset
    Dim Ligne As Integer, Col As Integer
    Dim leSQL As String
    Dim i As Integer, D As Integer
    Dim Color As Long
                  
    ' Sélectionne les RDV compris entre DateDebut et DateDebut+7
    leSQL = "SELECT R_RendezVous.* " & _
    "FROM R_RendezVous " & _
    "WHERE (ID_Salles= " & Nz(Forms!F_Planning!Salles, 0) & ") and (R_RendezVous.HoraireDebut < " & FormatDateUS(DateDebut + 7) & ") And (R_RendezVous.HoraireFin >" & FormatDateUS(DateDebut) & ")"
    
    Set RsPL = CurrentDb.OpenRecordset(leSQL, dbOpenForwardOnly)  ' endroit de l'erreur
                                                                                                                                                                                                      
    Forms!F_Planning!Titre.Caption = "PLANNING DE LA SEMAINE DU " & UCase(Format(DateDebut, "dd mmmm yyyy")) & " AU " & UCase(Format(DateDebut + 6, "dd mmmm yyyy"))
    Forms!F_Planning!DateD.Value = DateDebut
                                                                                                                                                                                                      
    ' initialise le planning
    InitPlanning
         
       Do While Not (RsPL.EOF) ' on parcours les RDV
       
          If Not IsNull(RsPL!couleur) Then
             Color = RsPL!couleur ' définit la couleur du label.
                   
          Else
             Color = vbWhite
                   
          End If
       
          If DateDiff("d", RsPL!HoraireDebut, RsPL!HoraireFin) = 0 Then
       
             Col = IndiceColonne(RsPL!HoraireDebut)
             Ligne = PremierCreneau(RsPL!HoraireDebut)
                
             D = DateDiff("n", RsPL!HoraireDebut, RsPL!HoraireFin) \ 15 ' on determine le nombre de creneaux horaires correspondants à la durée du rdv
       
             Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Height = 295 * D 'Hauteur du label = Hauteur de la ligne multipliée par le nombre de créneaux
             
                If Not IsNull(RsPL!ID) Then
                
                   Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Caption = CentrerTexte(RsPL!Classes & " / " & RsPL!Professeur & vbCrLf & RsPL!Eleves & vbCrLf & Nz(RsPL!Memo, ""), D)
                   '& vbCrLf & RsPL!Eleves
                   
                   '(RsPL!Patient & " [" & RsPL!NP & "]", d)
                   'Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Caption = CentrerTexte(Nz(RsPL!Memo, ""), D)
               'Else
                   'Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Caption = CentrerTexte(Nz(RsPL!L_Professeur, ""), d)
                End If
             
             Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).BackColor = Color ' colorie le label
                
          Else
             ' mise à jour du congé
             MajCongé RsPL!HoraireDebut, RsPL!HoraireFin, RsPL!Memo, Color
          
          End If
          
       RsPL.MoveNext
       Loop
    
    ' libération
    
    RsPL.Close
    Set RsPL = Nothing
    
    End Sub
    
    Public Function OuvrirFormRendezVous(i As Integer, j As Integer)
    ' Ouvre le formulaire F_RendezVous sur double-clique d'un label du planning
    ' prend en arguments les indices de ligne et de colonne.
    
    Dim DateC As Date
    Dim DateD As Date ' Jour et Horaire de début.
    Dim DateF As Date ' Jour et Horaire de fin.
    
    DateC = IndicesToHoraire(i, j)
       
    ' selectionne dans un recordset le rendez-vous correspondant au créneau choisi par
    ' double-clique.
         
    ' s'il y a un RDV alors copier dans les variables DateD et DateF
    ' les horaires de début et de fin du rdv.
                         
    DateD = Nz(DLookup("[HoraireDebut]", "T_RendezVous", "(ID_Salles= " & Nz(Forms!F_Planning!Salles, 0) & ") and HoraireDebut<=" & FormatDateUS(DateC) & " And HoraireFin>" & FormatDateUS(DateC)), DateC)
    DateF = Nz(DLookup("[HoraireFin]", "T_RendezVous", "(ID_Salles= " & Nz(Forms!F_Planning!Salles, 0) & ") and HoraireDebut<=" & FormatDateUS(DateC) & " And HoraireFin>" & FormatDateUS(DateC)), DateAdd("n", 15, DateC))
       
       
    ' ouvre le formulaire " F_RendezVous "
    DoCmd.OpenForm "F_RendezVous", , , "(ID_Salles= " & Nz(Forms!F_Planning!Salles, 0) & ") and HoraireDebut=" & FormatDateUS(DateD)
       
    Forms!F_RendezVous!DateRdV1 = DateValue(DateD)
    Forms!F_RendezVous!DateRdV2 = DateValue(DateF)
    
    Forms!F_RendezVous!HoraireD = Format(DateD, "hh:nn")
    Forms!F_RendezVous!HoraireF = Format(DateF, "hh:nn")
    Forms!F_RendezVous!Salles = Forms!F_Planning!Salles
        
    End Function
    
    Public Sub MajCouleursRdv()
    Dim RS As DAO.Recordset
    Dim Coulr As Long
    Dim i As Integer
    
        Set RS = _
           CurrentDb.OpenRecordset("T_CouleurRdv", dbOpenSnapshot)
            
            RS.MoveFirst
            i = 1
            
            Do Until RS.EOF
               
               Coulr = RS!couleur
                
               Forms!F_RendezVous("Etiq" & i).BackColor = Coulr
               Forms!F_RendezVous("Etiq" & i).Caption = RS!DescriptionRdv
               
               Forms!F_RendezVous("Etiq" & i).Visible = True
               Forms!F_RendezVous("Option" & i).Visible = True
               
               RS.MoveNext: i = i + 1
            Loop
             
            While i <= 33
                
               Forms!F_RendezVous("Etiq" & i).BackColor = vbWhite
               Forms!F_RendezVous("Etiq" & i).Caption = ""
               Forms!F_RendezVous("Etiq" & i).Visible = False
               Forms!F_RendezVous("Option" & i).Visible = False
               
               i = i + 1
            
            Wend
            
        RS.Close
    
    End Sub
    
    Public Function FormatDuree(ByVal min As Integer) As String
    Dim h As Integer, M As Integer
          
       If min >= 60 Then
          h = min \ 60
          M = min Mod 60
          If M > 0 Then
             FormatDuree = h & " h " & M
          Else
             FormatDuree = h & " h"
          End If
       Else
          FormatDuree = min & " min"
          
       End If
    
    End Function
    
    Public Sub MajCongé(ByVal DateD As Date, ByVal DateF As Date, ByVal Memo As String, ByVal Color As Long)
    ' Procédure pour afficher les congés sur le planning.
    
    'Dim DateC As Date
    'Dim Col As Integer, Ligne As Integer
    'Dim D As Integer
    
    'DateC = DateDebut
    
    'For Col = 1 To 7
    
       'If DateC = DateValue(DateD) Then
         ' Ligne = PremierCreneau(DateD)
         ' D = DateDiff("n", TimeValue(DateD), #12:00:00 PM#) \ 15
        '  Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Height = 295 * D
         ' Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Caption = CentrerTexte(Conges, D)
        '  Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).BackColor = Color
          
      ' ElseIf (DateC > DateD) And (DateC < DateValue(DateF)) Then
         ' D = DateDiff("n", #8:00:00 AM#, #12:00:00 PM#) \ 15
        '  Forms!F_Planning!Planning.Form("creneau1_" & Col).Height = 295 * D
        '  Forms!F_Planning!Planning.Form("creneau1_" & Col).Caption = CentrerTexte(Conges, D)
        '  Forms!F_Planning!Planning.Form("creneau1_" & Col).BackColor = Color
     '  ElseIf (DateC = DateValue(DateF)) Then
         ' D = DateDiff("n", #8:00:00 AM#, TimeValue(DateF)) \ 15
          'If D > 0 Then
          '   Forms!F_Planning!Planning.Form("creneau1_" & Col).Height = 295 * D
          '   Forms!F_Planning!Planning.Form("creneau1_" & Col).Caption = CentrerTexte(Conges, D)
          '   Forms!F_Planning!Planning.Form("creneau1_" & Col).BackColor = Color
         ' End If
       'End If
    
    'DateC = DateC + 1
    'Next Col
    
    End Sub

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Bonsoir,

    Il faut modifier la requête R_RendezVous comme ceci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_RendezVous.*, T_CouleurRdv.Couleur AS Couleur, Étudiants.Nom AS Eleve
    FROM (T_CouleurRdv INNER JOIN (T_RendezVous INNER JOIN T_Salles ON T_RendezVous.ID_Salles = T_Salles.ID_Salles) ON T_CouleurRdv.NCouleur = T_RendezVous.TypeRdv) INNER JOIN Étudiants ON T_RendezVous.ID.Value = Étudiants.ID
    ORDER BY T_RendezVous.DateRdV1;

    Ensuite, le code de la procédure devient :

    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
    Public Sub MajPlanning()
    ' La procedure de mise à jour des rendez-vous sur le planning en fonction de la date de début :
    ' La procedure selectionne dans la table T_RendezVous les RDV compris entre la date de début (DateDebut) et la date de debut + 7 jours (DateDebut+7),
    ' puis met à jour le planning avec ces rendez-vous.
    ' Pour chaque RDV l'horaire de début et l'horaire de fin permettent de dimensionner le label correspondant au creneau horaire du début.
     
    Dim RsPL As DAO.Recordset, RsEleves As DAO.Recordset
    Dim Ligne As Integer, Col As Integer, NomEleve As String
    Dim leSQL As String
    Dim i As Integer, D As Integer
    Dim Color As Long, ListeEleves As String
    Dim NR As Long
    ' Sélectionne les RDV compris entre DateDebut et DateDebut+7
    leSQL = "SELECT R_RendezVous.* " & _
    "FROM R_RendezVous " & _
    "WHERE (ID_Salles= " & Nz(Forms!F_Planning!Salles, 0) & ") and (R_RendezVous.HoraireDebut < " & FormatDateUS(DateDebut + 7) & ") And (R_RendezVous.HoraireFin >" & FormatDateUS(DateDebut) & ")"
     
    Set RsPL = CurrentDb.OpenRecordset(leSQL, dbOpenSnapshot)
     
    Forms!F_Planning!Titre.Caption = "PLANNING DE LA SEMAINE DU " & UCase(Format(DateDebut, "dd mmmm yyyy")) & " AU " & UCase(Format(DateDebut + 6, "dd mmmm yyyy"))
    Forms!F_Planning!DateD.Value = DateDebut
     
    ' initialise le planning
    InitPlanning
     
       Do While Not (RsPL.EOF) ' on parcours les RDV
     
          If Not IsNull(RsPL!couleur) Then
             Color = RsPL!couleur ' définit la couleur du label.
     
          Else
             Color = vbWhite
     
          End If
     
          If DateDiff("d", RsPL!HoraireDebut, RsPL!HoraireFin) = 0 Then
     
             Col = IndiceColonne(RsPL!HoraireDebut)
             Ligne = PremierCreneau(RsPL!HoraireDebut)
     
             D = DateDiff("n", RsPL!HoraireDebut, RsPL!HoraireFin) \ 15 ' on determine le nombre de creneaux horaires correspondants à la durée du rdv
     
             Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Height = 295 * D 'Hauteur du label = Hauteur de la ligne multipliée par le nombre de créneaux
     
                If Not IsNull(RsPL!ID) Then
     
                   ListeEleves = vbNullString
                   NR = RsPL!NR
                   Do While (RsPL!NR = NR)
                      ListeEleves = ListeEleves & RsPL!Eleve & " "
                      RsPL.MoveNext
                      If RsPL.EOF Then Exit Do
                   Loop
     
                   RsPL.MovePrevious
     
                   Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Caption = CentrerTexte(RsPL!Classes & " / " & RsPL!Professeur & vbCrLf & ListeEleves & vbCrLf & Nz(RsPL!Memo, ""), D)
                   '& vbCrLf & RsPL!Eleves
     
                   '(RsPL!Patient & " [" & RsPL!NP & "]", d)
                   'Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Caption = CentrerTexte(Nz(RsPL!Memo, ""), D)
               'Else
                   'Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).Caption = CentrerTexte(Nz(RsPL!L_Professeur, ""), d)
                End If
     
             Forms!F_Planning!Planning.Form("creneau" & Ligne & "_" & Col).BackColor = Color ' colorie le label
     
          Else
             ' mise à jour du congé
             MajCongé RsPL!HoraireDebut, RsPL!HoraireFin, RsPL!Memo, Color
     
          End If
     
       RsPL.MoveNext
       Loop
     
    ' libération
     
    RsPL.Close
    Set RsPL = Nothing
     
    End Sub
    Je vous joins la base :

    Gestion Planning v1.zip

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut Super ! merci
    Bonjour "USER",

    Un énorme merci ! je vois que quand même j'étais pas loin du compte...

    je vous sollicite à nouveau parce que la suppression des cours ne provoque aucun message d'erreur mais ne supprime plus les cours ?!!

    la table comme les requêtes conservent le contenu ...

    d'avance merci de prendre du temps sur mon problème.

    Laurent

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Bonjour et merci,

    Il faudrait modifier le code sur le bouton supprimer comme suit :

    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
    ' Supprime l'enregistrement en cours
     
    Private Sub CmdSuppRdV_Click()
    ' Supprime l'enregistrement en cours
     
       If (MsgBox("Souhaitez-vous supprimer l'enregistrement ?", vbYesNo) = vbYes) Then
     
          DoCmd.SetWarnings False
          DoCmd.RunSQL ("delete * from T_RendezVous where NR=" & Nz(Me.NR, 0))
          DoCmd.SetWarnings True
     
          MajPlanning
     
          DoCmd.Close
     
       End If
     
    End Sub
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut PARFAIT !!!!
    Bon alors là,

    Je pense que vous avez un très peu de temps épargné les 3 cheveux qu'il me reste sur le crane !

    merci infiniment pour votre réactivité.

    cordialement,

    laurent

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    De rien,

    Félicitations pour votre travail, si vous ne connaissez pas trop le langage VBA

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  9. #9
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut Nouveau problème de même
    Bonjour User,

    Merci pour ces encouragements !!

    Je me retrouve dans la même situation avec les champs multi-valeurs, et c'est pour cela que je ré-ouvre le post...

    je tente d'affecter un tuteur (responsable famille) et ai créer un champs multi valeur "étudiant" dans la table "Tuteur", jusque là tout va bien ensuite associé une requête pour créer un formulaire tuteur . mais dés que je rentre un valeur la bas plante totalement ... les champs associer père et fils sont bien "ID(étudiant)" et "ID.value(étudiant)" pour que les enregistrement soit associés qu'a un seul Tuteur... Mon but est de créer un relation de 1 à plusieurs en vu de la facturation, du suivi etc...

    je vous joins la base si vous avez une piste ...

    merci beaucoup,

    cordialement,

    Laurent.

    https://e-nautia.com/share/28925-qjtsa0e3

  10. #10
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut oops !
    Désolé pour les fautes ! je me relirai la prochaine fois ...

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Bonjour,

    Ce n'est pas la bonne méthode.

    Les champs multi-valués ne conviennent pas vraiment dans ce cas:

    Vous avez 2 possibilités :

    1/
    Pour chaque étudiant vous n'avez que 1 seul tuteur.

    Dans ce cas vous aurez une relation, 1 à plusieurs entre la table Tuteurs et la table étudiants.

    Il faudra alors mettre l'ID Tuteur dans la table étudiants.

    2/
    Pour chaque étudiant vous pouvez éventuellement avoir plusieurs tuteurs (on ne sait jamais...).

    Vous aurez alors une relation n vers n :

    Il vous faudra alors prévoir une table intérmédiaire entre la table tuteurs et la table étudiants :

    Vous pourrez l'appeler T_TuteurEtudiant.

    Cette table contiendra les identifiants des 2 tables (IDTuteur,IDEtudiant)

    Cdlt,
    Denis
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  12. #12
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut Relation
    OK je regarde...

    Si je comprends bien je peux soit associer 1 Id Tuteur à plusieurs Id étudiants via une simple relation de table !... Mais alors comment faire, du coup, pour associer un étudiant déjà inscrit à un tuteur qui lui aussi est déjà dans la base ? Avec les système de multi-valués et les cases à cocher de la liste cela me paraissait être le bon compromis ... Dommage ! Quelle serait l'équivalence en utilisant mon architecture d'après vous? faut il créer plusieurs listes avec des casses à cocher associées pour affecter un tuteur à plusieurs étudiant choisis...

    merci pour votre temps

    cordialement,

    Laurent

  13. #13
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Si on revient au champ multi-valués:

    Pourquoi ne pas créer sur le formulaire Tuteurs, une zone de liste liée au champ multi-valué "ID" ?

    Vous auriez des cases à cocher pour chaque étudiants dans votre zone de liste située sur le formulaire des tuteur à la place du sous-formulaire ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  14. #14
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut Relation
    Je viens de tenter une relation via une table intermédiaire et remanié mes requêtes mais un message d'erreur apparait après avoir saisie mes information tuteur : Erreur réservée (-5611)

  15. #15
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Citation Envoyé par PUMPO Voir le message
    Bonjour User,

    je tente d'affecter un tuteur (responsable famille) et ai créer un champs multi valeur "étudiant" dans la table "Tuteur", jusque là tout va bien ensuite associé une requête pour créer un formulaire tuteur . mais dés que je rentre un valeur la bas plante totalement ... les champs associer père et fils sont bien "ID(étudiant)" et "ID.value(étudiant)" pour que les enregistrement soit associés qu'a un seul Tuteur... Mon but est de créer un relation de 1 à plusieurs en vu de la facturation, du suivi etc...
    Je pense qu'il faut déjà baser le formulaire Tuteurs, sur la table Tuteurs, ou changer la relation avec la table etudiants dans la requête Tuteurs étendus.
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip DB1.zip (571,4 Ko, 84 affichages)
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  16. #16
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut heu!!
    Je ne trouve pas le fichier ZiP s'agit-il de celui que vous m'avez envoyé plus haut ?

  17. #17
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut oops !
    ok j'ai rafraichis ...désolé!

  18. #18
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Une question :

    Pourquoi baser le formulaire Tuteurs sur la requête Tuteurs étendus ?

    Pourquoi ne pas simplement le baser sur la table Tuteurs ?

    Edit:
    Je dois m'absenter, à plus tard...
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  19. #19
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut Encore Bravo !
    Merci ça fonctionne parfaitement !

  20. #20
    Futur Membre du Club
    Homme Profil pro
    directeur école de musique
    Inscrit en
    Septembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : directeur école de musique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 34
    Points : 5
    Points
    5
    Par défaut La récurrence...
    Bonsoir User,

    En effet j'aurais pu directement baser le formulaire sur la table...

    Du coup,la récurrence que j'avais initialement, ne fonctionne plus avec les modifications de la table Rdv...

    j'ai tenté d'adapter votre code sur la commande actualisé pour que chaque Rdv (cours) soit copiés sur l'année scolaire mais il y a une erreur en fin de chaine ...

    Deuxième question comment faire pour ne pas rendre obligatoire le remplissage d'un champ dans la procédure? par exemple "Nom_Atelier" ou "mémo" sans que cela plante la procédure...

    merci mille fois pour votre aide.

    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
    Private Sub CmdActualiser_Click()
    
    Dim db As DAO.Database
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset, RsEleves As DAO.Recordset
    Dim RsPL As DAO.Recordset
    Dim n As Long, r As Long, NR As Long, dt As Date, HD As Date, HF As Date, IT, elv As String
    Dim s As Long
    Dim M As String 'variable memo
    Dim cls As String 'variable classe
    Dim prf As String 'variable profs
    Dim ctp As String 'variable cursustype
    Dim NA As String 'variable nom atelier
    Dim ListeEleves As String
    
    Set db = CurrentDb
    Set rs1 = db.OpenRecordset("R_RendezVous2")
    Set rs2 = db.OpenRecordset("T_RendezVous", dbOpenDynaset)
     
    Do Until rs1.EOF
    
     
    IT = rs1!ID_Salles
    dt = rs1!DateRdV1
    r = rs1!Recurrence
    n = rs1!NbRecurrences
    HD = rs1!HoraireDebut
    HF = rs1!HoraireFin
    elv = rs1!ID
    s = rs1!TypeRdv
    cls = rs1!Classes
    prf = rs1!Professeur
    ctp = rs1!CursusType
    'NA = rs1!Nz(Atelier_NOM, 0)
    'M = rs1!Memo
     
    dt = dt + r
    HD = HD + r
    HF = HF + r
     
    Do While n > 0
       
         n = n - 1
       
       If (Not EstFerie(dt)) And (Not EstConge(dt)) And (Weekday(dt) <> 1) Then ' si jour ouvré.
                
          rs2.FindFirst "ID_Salles like '" & IT & "' and HoraireDebut=#" & Format(HD, "mm/dd/yyyy h:n") & "#"
          
          'and DateRdV1=#" & Format(dt, "mm/dd/yyyy") & "#"
          
           If Not IsNull(RsPL!ID) Then
                
                   ListeEleves = vbNullString
                   NR = RsPL!NR
                   Do While (RsPL!NR = NR)
                      ListeEleves = ListeEleves & RsPL!Eleve & " "
                      RsPL.MoveNext
                      If RsPL.EOF Then Exit Do
                   Loop
                   
                   RsPL.MovePrevious
                   
               End If
     
          If rs2.NoMatch Then
             rs2.AddNew
             rs2!ID_Salles = IT
             rs2!DateRdV1 = dt
             rs2!Recurrence = r
             rs2!NbRecurrences = n
             rs2!HoraireDebut = HD
             rs2!HoraireFin = HF
             rs2!TypeRdv = s
             rs2!ID = elv
             rs2!Classes = cls
             rs2!Professeur = prf
             rs2!CursusType = ctp
             'rs2!Nz(Atelier_NOM, 0) = NA
             'rs2!Memo = M
             rs2.Update
             
          End If
     
          dt = dt + r ' on prend le jour d'après + récurrence
          HD = HD + r
          HF = HF + r
          
       Else ' si dimanche ou jour férié.
     
            dt = dt + r ' on passe au jour suivant
            HD = HD + r
            HF = HF + r
            
            n = n + 1
            
       End If
       
    Loop  ' Plante ICI !!!!
     
    rs1.MoveNext
    Loop
     
    rs1.Close
    Set rs1 = Nothing
     
    rs2.Close
    Set rs2 = Nothing
    
    MajPlanning
    
    End Sub

Discussions similaires

  1. Problème avec la multi-sélection dans une zone de liste
    Par Mimisio dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/07/2007, 17h23
  2. Champs multi valeurs => tables
    Par Kloun dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2007, 12h43
  3. [SQL] Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 14/08/2006, 14h28
  4. Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/08/2006, 14h21
  5. problème avec masque de saisie dans table
    Par porki dans le forum Access
    Réponses: 6
    Dernier message: 13/10/2004, 09h58

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