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

Access Discussion :

Mise à jour de formulaires utilisant les mêmes données


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Mise à jour de formulaires utilisant les mêmes données
    Bonjour,
    Je dispose maintenant d’une BDD à 2 onglets qui me permet d’afficher un emploi du Temps par Professeur.
    Voir schéma 2 .pdf.
    L’onglet de gauche est alimenté par une liste déroulante (nom du contrôle « cmbChoix ») qui me permet d’ouvrir le planning EDT en fonction de ce contrôle sur les :
    - Professeurs
    - Classes
    - Salles
    - Jour de semaine
    L’onglet de gauche est également alimenté par une liste déroulante (Nom du contrôle = « cmbTri ») qui lui me permet de choisir :
    - Le nom du Professeur
    - Le nom de la Classe
    - Le nom de la Salle utilisée
    - Le jour de la semaine concerné
    Un formulaire de Saisie « F_Saisie EDT » qui n’est autorisé qu’en mode « Professeur » me permet d’alimenter cet Emploi du Temps « Professeur », dans le cas inverse un message d’erreur est renvoyé.
    Je souhaiterai maintenant mette à jour les autres emplois du temps par Classes, par Occupation de salles ou du jour de la Semaine en utilisant la mise à jour « MajEDT » (Voir tableau joint).
    Le code de « MajEDT » actuel est le suivant. Comment puis-je rafraichir les autres emplois du temps à partir de celui des Professeurs en utilisant les contrôles « Id ou cmb » respectifs

    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
    Public Sub MajEDT()
    ' 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.
     
    On Error GoTo Err_MajEDT
     
    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_SaisieEDT.* " & _
    "FROM R_SaisieEDT " & _
    "WHERE (IdProfesseur= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
    Set RsPL = CurrentDb.OpenRecordset(LeSQL, dbOpenForwardOnly)
     
    'Forms!F_EDT!Titre.Caption = "EDT DE LA SEMAINE DU " & UCase(Format(DateDebut, "dd mmmm yyyy")) & " AU " & UCase(Format(DateDebut + 6, "dd mmmm yyyy"))
    'Forms!F_EDT!DateD.Value = DateDebut
     
    ' initialise le EDT
    InitEDT
     
    MajPostIt
     
       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
     
             Col = IndiceColonne(RsPL!HoraireDebut)
             Ligne = PremierCreneau(RsPL!HoraireDebut)
     
             D = DateDiff("n", RsPL!HoraireDebut, RsPL!HoraireFin) \ TrancheHoraire ' on determine le Libellébre de creneaux horaires correspondants à la durée du rdv
     
             With goEDT
     
    'If Forms!F_EDT!LibelléDisponibilités.Value = "" Then
     
           If Not IsNull(RsPL!IdDisponibilités) Then
             .DrawRect Ligne, Col, (Ligne + D - 1), Col, Color, vbBlack, 1
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!Memo, ""), 12, 1, 1, vbBlack, False
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!LibelléDisponibilités, ""), 12, 1, 1, vbBlack, False
             Else
             .DrawRect Ligne, Col, (Ligne + D - 1), Col, Color, vbBlack, 1
             '.DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!Cours, ""), 12, 1, 1, vbBlack, False
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!Cours, "") & vbCrLf & Nz(RsPL!Memo, "") & vbCrLf & Nz(RsPL!Nom, ""), 12, 1, 1, vbBlack, False
     
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!Matière, ""), 12, 1, 1, vbBlack, False
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!Memo, ""), 12, 1, 1, vbBlack, False
           End If
     
      'End If
     
     
     
             End With
     
       RsPL.MoveNext
       Loop
     
    ' libération
     
    goEDT.KeepImage
    goEDT.Refresh
     
    RsPL.Close
    Set RsPL = Nothing
     
    Exit_MajEDT:
        Exit Sub
     
    Err_MajEDT:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_MajEDT
     
    End Sub
    Images attachées Images attachées

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut
    Bonjour,

    A première vue, il faut mettre le code de mise à jour du planning, à savoir la procédure MajEDT, sur l'événement après maj des listes déroulantes cmb....

    Ensuite, il faut légèrement modifier la procédure MajEDT au niveau du code SQL, pour prendre en compte les différents cas :

    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
     
       ...
     
       select case Forms!F_EDT!cmdChoix
     
       case 1 ' professeurs
     
          LeSQL = "SELECT R_SaisieEDT.* " & _
          "FROM R_SaisieEDT " & _
          "WHERE (IdProfesseur= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " &       FormatDateUS(DateDebut + 7) & ")"
     
       case 2 ' classes
     
           LeSQL = "SELECT R_SaisieEDT.* " & _
          "FROM R_SaisieEDT " & _
          "WHERE (IdClasse= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " &       FormatDateUS(DateDebut + 7) & ")"
     
     
        case 3 ' salles
     
           LeSQL = "SELECT R_SaisieEDT.* " & _
          "FROM R_SaisieEDT " & _
          "WHERE (IdSalle= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " &       FormatDateUS(DateDebut + 7) & ")"
     
        case 4 ' semaines
     
           LeSQL = "SELECT R_SaisieEDT.* " & _
          "FROM R_SaisieEDT " & _
          "WHERE (IdSemaine= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " &       FormatDateUS(DateDebut + 7) & ")"
     
        End Select
     
    ...
    Ici je suppose que vous avez les champs IdProfesseur, IdClasse, IdSalle et IdSemaine dans votre requête source.

    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

  3. #3
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut
    Bonjour User et merci de ton retour,

    Dans ma requête Source R_SaisieEDT, je n’ai pas de champ IdClasse, IdSalle, IdJourSemaine ce qui fait que la MajEDT ne fonctionne pas.
    Seul IdProfesseur est disponible car il doit être le seul à permettre la saisie de l’ensemble des emplois du temps (F_SaisieEDT)
    En mode « Professeur » les autres champs suivants sont utilisés :
    champ « Cours » correspondant à Classe+Matière (IdClasse ??)
    champ « Nom » (IdSalle ??)
    Champ « DateRdv1 » (IdJourSemaine ??)
    Je n’ai pas bien compris dans ton exemple Agenda V23.9, le rôle de l’ensemble Postit (Table, requete et formulaire). Je n’ai donc fait que débaptiser IdMedecin et IdProfesseur. Le Pb ne peut-il pas venir de là ??

    Ci joint la requête AfterUpdate du formulaire de saisie :

    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
    Private Sub cmbTri_AfterUpdate()
    On Error GoTo Err_cmbTri_AfterUpdate
     
    IndcmbTri = Me!cmbTri.ListIndex
     
    MajEDT
     
    Exit_cmbTri_AfterUpdate:
        Exit Sub
     
    Err_cmbTri_AfterUpdate:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_cmbTri_AfterUpdate
     
    End Sub
    Ainsi que la requête que j’ai mise en place suite aux renseignements que tu m’as fourni.

    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
    Public Sub MajEDT()
    ' 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.
     
    On Error GoTo Err_MajEDT
     
    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_SaisieEDT.* " & _
    "FROM R_SaisieEDT " & _
    "WHERE (IdProfesseur= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
    'Select Case Forms!F_EDT!cmbChoix
     
       'Case 1 ' Professeur
     
          'LeSQL = "SELECT R_SaisieEDT.* " & _
         ' "FROM R_SaisieEDT " & _
         ' "WHERE (cmbChoix= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
       'Case 2 ' Classe
     
           'LeSQL = "SELECT R_SaisieEDT.* " & _
          '"FROM R_SaisieEDT " & _
         ' "WHERE (Cours= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
     
        'Case 3 ' Salle
     
          ' LeSQL = "SELECT R_SaisieEDT.* " & _
          '"FROM R_SaisieEDT " & _
          '"WHERE (Nom= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
        'Case 4 ' JourSemaine
     
          ' LeSQL = "SELECT R_SaisieEDT.* " & _
         ' "FROM R_SaisieEDT " & _
         ' "WHERE (cmbChoix= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
       ' End Select
    Set RsPL = CurrentDb.OpenRecordset(LeSQL, dbOpenForwardOnly)
     
     
     
    ' initialise le EDT
    InitEDT
     
    MajPostIt
     
       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
     
             Col = IndiceColonne(RsPL!HoraireDebut)
             Ligne = PremierCreneau(RsPL!HoraireDebut)
     
             D = DateDiff("n", RsPL!HoraireDebut, RsPL!HoraireFin) \ TrancheHoraire ' on determine le Libellébre de creneaux horaires correspondants à la durée du rdv
     
             With goEDT
     
     
     
           If Not IsNull(RsPL!IdDisponibilités) Then
             .DrawRect Ligne, Col, (Ligne + D - 1), Col, Color, vbBlack, 1
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!LibelléDisponibilités, "") & vbCrLf & Nz(RsPL!Memo, ""), 12, 1, 1, vbBlack, False
             Else
             .DrawRect Ligne, Col, (Ligne + D - 1), Col, Color, vbBlack, 1
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!Cours, "") & vbCrLf & Nz(RsPL!Memo, "") & vbCrLf & Nz(RsPL!Nom, ""), 12, 1, 1, vbBlack, False
             .DrawText Ligne, Col, (Ligne + D - 1), Col, Nz(RsPL!Matière, ""), 12, 1, 1, vbBlack, False
     
           End If
     
     
     
     
     
             End With
     
       RsPL.MoveNext
       Loop
     
    ' libération
     
    goEDT.KeepImage
    goEDT.Refresh
     
    RsPL.Close
    Set RsPL = Nothing
     
    Exit_MajEDT:
        Exit Sub
     
    Err_MajEDT:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_MajEDT
     
    End Sub
    J’ai par ailleurs isolé la partie qui ne fonctionne pas.
    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
    .........
    'Select Case Forms!F_EDT!cmbChoix
     
       'Case 1 ' Professeur
     
          'LeSQL = "SELECT R_SaisieEDT.* " & _
         ' "FROM R_SaisieEDT " & _
         ' "WHERE (cmbChoix= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
       'Case 2 ' Classe
     
           'LeSQL = "SELECT R_SaisieEDT.* " & _
          '"FROM R_SaisieEDT " & _
         ' "WHERE (Cours= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
     
        'Case 3 ' Salle
     
          ' LeSQL = "SELECT R_SaisieEDT.* " & _
          '"FROM R_SaisieEDT " & _
          '"WHERE (Nom= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
        'Case 4 ' JourSemaine
     
          ' LeSQL = "SELECT R_SaisieEDT.* " & _
         ' "FROM R_SaisieEDT " & _
         ' "WHERE (cmbChoix= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
       ' End Select
    Merci Roland

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut
    Bonjour,

    Il doit y avoir moyen de récupérer les champs :

    champ « Cours » correspondant à Classe+Matière (IdClasse ??)
    champ « Nom » (IdSalle ??)
    Champ « DateRdv1 » (IdJourSemaine ??)

    dans la requête « R_SaisieEDT ».

    Puis de faire correspondre ces champs avec les valeurs de la liste déroulante « cmdTri » :

    CmdTri.Column(0) indique la colonne n°1 de la liste déroulante « cmdTri ».
    CmdTri.Column(1) indique la colonne n°2 de la liste déroulante « cmdTri ».

    Cela pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Case 3 ' Salle
     
          ' LeSQL = "SELECT R_SaisieEDT.* " & _
          '"FROM R_SaisieEDT " & _
          '"WHERE (Nom= '" & Nz(Forms!F_EDT!cmbTri.Column(1), 0) & "') and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
    Notez que quand le champ est un texte on met des quotes (') de part et d'autre.

    La fonction de Philben pour déterminer le numéro de semaine correspondant à la date de la semaine passée en argument...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function IsoWeekNumber(ByVal d As Date) As Long 
       Dim wd As Long 
       wd = Weekday(d, vbMonday) 
       IsoWeekNumber = Int((d - DateSerial(Year(d - wd + 4), 1, 1) - wd + 11) / 7) 
    End Function
    Cette fonction est à copier dans un module et à appeler dans la requête « R_SaisieEDT » comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numerosemaine : IsoWeekNumber([DateRdv1])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     'Case 4 ' JourSemaine
     
          ' LeSQL = "SELECT R_SaisieEDT.* " & _
         ' "FROM R_SaisieEDT " & _
         ' "WHERE ([numerosemaine]= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
       ' End Select
    En dernier recours postez votre base je regarderai en fin de journée,

    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
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    User,

    Cela fonctionne pour les Salles mais par contre rien en ce qui concerne :

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    User,

    Cela fonctionne bien pour les salles mais

    -rien en ce qui concerne les classes pour lequel je n'ai rien modifié
    - rien en ce qui concerne les Jours de semaine pour lequel j'ai fait un module IsoWeeknumber mais que je n'ai pas su incorporer dans la requête Source R_SaisieEDT.

    Je vous joins donc la base

    Merci d'avance

    Roland
    Fichiers attachés Fichiers attachés

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut
    Rebonjour,

    Voici,

    les jours de la semaine ne fonctionne pas il faut revoir cette partie et expliquer ce que vous souhaitez afficher exactement sur le planning...

    Cdlt,
    Fichiers attachés Fichiers attachés
    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

  8. #8
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    Merci, cela fonctionne super, pour les Professeurs, les Salles et les Classes.

    En ce qui concerne les jours de semaine, il s'agit d'un agenda hebdomadaire et non d'un planning annuel. Ce que je souhaite faire c'est d'obtenir pour chaque jour de la semaine un agenda qui regroupe :

    - Le cours, le Professeur et la salle concernés de telle heure à telle autre

    Mais il est vrai que les entêtes du SF_EDT doivent changer. Ce n'est plus la liste des jours (du Lundi au Vendredi) mais la liste de l'ensemble des Professeurs.

    Je viens juste de découvrir qu'il y avait un bémol, Mille excuses

    Merci encore

    Roland

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut
    Je préfère vous laisser vous débrouiller un peu à ce stade, car je pense vous avoir donné certaines clés ...

    Concernant les jours de la semaine, je pense que ce n'est pas indispensable.

    J'essaierai de reprendre votre travail en fin de semaine, voir lundi, en attendant je préfère profiter un peu du soleil et de mon temps de libre car j'ai passé toute la journée à répondre à mes clients en plus de votre demande.

    Bon courage,

    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

  10. #10
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Bonjour,
    User, si c'est toi qui réponds :

    Ne perds pas de temps avec mon dernier post qui n’a effectivement aucun intérêt.
    L’appli touche à sa fin. Il me reste néanmoins 3 interrogations dont deux ne sont pas importantes dans un premier temps, mais la 3àme est plus restrictive
    Pour un cours bien particulier « Maquillage », je réuni dans un seul cours les élèves des deux classes « Première et Terminale » et je souhaite mettre à jour les deux emplois du temps (Première et Terminale) dont le Professeur et la salle sont les mêmes.
    Comment contourner le fait qu’un même Professeur ne puisse enseigner à la même heure un cours dans la même salle dans la MajEDT ci-dessous pour pouvoir renseigner à la fois l’emploi du Temps Professeur, Classe et salle .
    J’ai essayé des fonctions If……..Then ……..Else sans résultat. J’ai également regardé avec Insert Into….pareil ?

    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
    Public Sub MajEDT()
    ' 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.
     
    'On Error GoTo Err_MajEDT
     
    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_SaisieEDT.* " & _
    '"FROM R_SaisieEDT " & _
    '"WHERE (IdProfesseur= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
    Select Case Forms!F_EDT!cmbChoix
     
       Case 1 ' Professeur
     
          leSQL = "SELECT R_SaisieEDT.* " & _
          "FROM R_SaisieEDT " & _
          "WHERE (IdProfesseur= " & Nz(Forms!F_EDT!cmbTri, 0) & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
       Case 2 ' Classe
     
           leSQL = "SELECT R_SaisieEDT.* " & _
          "FROM R_SaisieEDT " & _
          "WHERE (Cours like '" & Nz(Forms!F_EDT!cmbTri.Column(1), 0) & "*') and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
       Case 3 ' Salle
     
          leSQL = "SELECT R_SaisieEDT.* " & _
          "FROM R_SaisieEDT " & _
          "WHERE (Nom= '" & Nz(Forms!F_EDT!cmbTri.Column(1), 0) & "') and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
     
       Case 4 ' JourSemaine
     
          leSQL = "SELECT R_SaisieEDT.* " & _
         "FROM R_SaisieEDT " & _
         "WHERE ([numerosemaine]=" & numSemaine() & ") and (R_SaisieEDT.HoraireDebut between " & FormatDateUS(DateDebut) & " And " & FormatDateUS(DateDebut + 7) & ")"
     
       End Select
     
    Set RsPL = CurrentDb.OpenRecordset(leSQL, dbOpenSnapshot)
     
     
     
    ' initialise le EDT
    InitEDT
     
    MajPostIt
     
       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
     
             Col = IndiceColonne(RsPL!HoraireDebut)
             Ligne = PremierCreneau(RsPL!HoraireDebut)
     
             d = DateDiff("n", RsPL!HoraireDebut, RsPL!HoraireFin) \ TrancheHoraire ' on determine le Libellébre de creneaux horaires correspondants à la durée du rdv
     
             With goEDT
     
     
     
     If Not IsNull(RsPL!IdDisponibilités) Then
             .DrawRect Ligne, Col, (Ligne + d - 1), Col, Color, vbBlack, 1
             .DrawText Ligne, Col, (Ligne + d - 1), Col, Nz(RsPL!LibelléDisponibilités, "") & vbCrLf & Nz(RsPL!Memo, ""), 12, 1, 1, vbBlack, False
             Else
     
            .DrawRect Ligne, Col, (Ligne + d - 1), Col, Color, vbBlack, 1
             .DrawText Ligne, Col, (Ligne + d - 1), Col, Nz(RsPL!NomProfesseur, "") & vbCrLf & Nz(RsPL!Cours, "") & vbCrLf & Nz(RsPL!Memo, "") & vbCrLf & Nz(RsPL!Nom, ""), 12, 1, 1, vbBlack, False
             .DrawText Ligne, Col, (Ligne + d - 1), Col, Nz(RsPL!Matière, ""), 12, 1, 1, vbBlack, False
     
     
    End If
     
     
     
     
             End With
     
       RsPL.MoveNext
       Loop
     
    ' libération
     
    goEDT.KeepImage
    goEDT.Refresh
     
    RsPL.Close
    Set RsPL = Nothing
     
    Exit_MajEDT:
        Exit Sub
     
    Err_MajEDT:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_MajEDT
     
    End Sub


    Merci

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut cf. procédure CmdValider_Click()
    Bonsoir,

    Comment contourner le fait qu’un même Professeur ne puisse enseigner à la même heure un cours dans la même salle dans la MajEDT ci-dessous pour pouvoir renseigner à la fois l’emploi du Temps Professeur, Classe et salle .
    Sauf erreur de ma part, je ne crois pas que ce soit au niveau de la procédure MajEDT qu'il faille agir, mais plutôt au niveau de la procédure CmdValider_Click(), comme nous l'avions fait ensemble avec ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' horaires choisis sur le formulaire.
    Classe = Nz(DLookup("NomClasse", "T_Classe", "InStr('" & Nz(Me.Cours, "") & "',[NomClasse]) <> 0"), "")
    n = Nz(DLookup("[NR]", "T_SaisieEDT", "(NR<>" & Nz(Me!NR, 0) & ") And (InStr([Cours],'" & Classe & "')<>0) And HoraireDebut<" & FormatDateUS(HF) & " And HoraireFin>" & FormatDateUS(HD)), 0)
     
       If (n = 0) Then ' horaire disponible pour cette classe
          ...
    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

  12. #12
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut RE
    Bonjour User,

    J’exploite depuis deux jours la piste que tu m’as donnée mais je ne peux à la fois mettre le planning à jour aussi bien dans la classe « Première » que « Terminale » en même temps.
    J’ai tenté plusieurs variantes dont la dernière est celle ci

    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 CmdValider_Click()
     
    ' Valide les choix effectués sur le formulaire "F_SaisieEDT".
     
    On Error GoTo Err_CmdValider
     
    Dim n As Long
    Dim HD As Date, HF As Date
    Dim Classe
    ' Si les zones de texte "Cours" ou "Memo" ne sont pas vides
     
    If ((Me!Cours <> "") And Not IsNull(Me!Cours)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Or _
     ((Me!Salle <> "") And Not IsNull(Me!Salle)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     
     
    ' Si les zones de texte "Disponibilités" ou "Memo" ne sont pas vides
    Else
     
       If ((Me!IdDisponibilités <> "") And Not IsNull(Me!IdDisponibilités)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     End If
     End If
     
          If (Format(HF, "hh:nn") <= Format(HeureFin, "hh:nn")) And (HD < HF) Then
     
    ' On recherche des RDV dont les horaires de début et de fin chevauchent les
    ' horaires choisis sur le formulaire.
    Classe = Nz(DLookup("NomClasse", "T_Classe", "InStr('" & Nz(Me.Cours, "") & "',[NomClasse]) <> 0"), "")
    n = Nz(DLookup("[NR]", "T_SaisieEDT", "(NR<>" & Nz(Me!NR, 0) & ") And (InStr([Cours],'" & Classe & "')<>0) And HoraireDebut<" & FormatDateUS(HF) & " And HoraireFin>" & FormatDateUS(HD)), 0)
     
    ' si aucun RDV n'a été trouvé, la plage horaire est donc disponible et on peut
    ' enregistrer le RDV.
     
     
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     
             If (n = 0) Then
     
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
             MajEDT
             DoCmd.Close
         Else
     
          If ((Me!Cours = "Premiere Maquillage" Or "Terminale Maquillage")) Then
          n = Nz(DLookup("[NR]", "T_SaisieEDT", "(NR<>" & Nz(Me!NR, 0) & ") And (InStr([Cours],'" & Premiere & "')<>0)And (InStr([Cours],'" & Terminale & "')<>0) And HoraireDebut<" & FormatDateUS(HF) & " And HoraireFin>" & FormatDateUS(HD)), 0)
             'Me!Cours = "Premiere_Terminale Maquillage" And "Terminale_Premiere Maquillage"
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
            MajEDT
             DoCmd.Close
     
     
     
        Else
            Else
             MsgBox ("La Classe est déjà en cours, ou la Salle est déjà occupée!")
          End If
          End If
     
          Else
          MsgBox ("Saisie incorrecte !")
     
          End If
     
     
     
     
    Exit_CmdValider:
        Exit Sub
     
    Err_CmdValider:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_CmdValider
    End Sub
    Merci

    Roland

  13. #13
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut Passer par un recordset
    Bonjour Harbor66,

    Il faudrait ajouter une entrée dans la table T_SaisieEdt au moment de valider la saisie :

    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
    dim db as DAO.RecordSet
    dim rs as dao.Recordset
     
          If (n = 0) Then
     
             Me!Cours = "Premiere_Terminale Maquillage" 
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
     
             set db=currentdb
             set rs =db.Openrecordset("T_SaisieEDT")
     
             rs.Addnew ' ajout d'une entrée correspondant à "Terminale_Premiere Maquillage"  
             rs!cours=  "Terminale_Premiere Maquillage"        
             rs!HoraireDebut = HD
             rs!HoraireFin = HF  
             rs.Update
     
             rs.Close
             set rs=nothing
     
             db.close
             set db=nothing
     
             MajEDT ' mise à jour du planning
             DoCmd.Close ' fermeture du formulaire de saisie.
     
        end if
    ...
    Je pense que cette idée est à explorer...

    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

  14. #14
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Bonjour
    Bonjour Denis,
    Je suppose d’après le code que j’ai pu lire que lorsque tu dis rajouter une entrée dans la table T_SaisieEDT c’est bien une entrée fictive et donc qu’il n’y a pas de champ réel sur cette table.


    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
    Private Sub CmdValider_Click()
     
    ' Valide les choix effectués sur le formulaire "F_SaisieEDT".
     
    On Error GoTo Err_CmdValider
     
    Dim n As Long
    Dim HD As Date, HF As Date
    Dim Classe
    Dim db As dao.Recordset
    Dim rs As dao.Recordset
     
     
     
     
    ' Si les zones de texte "Cours" ou "Memo" ne sont pas vides
     
    If ((Me!Cours <> "") And Not IsNull(Me!Cours)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Or _
     ((Me!Salle <> "") And Not IsNull(Me!Salle)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     
    ' Si les zones de texte "Disponibilités" ou "Memo" ne sont pas vides
    Else
     
       If ((Me!IdDisponibilités <> "") And Not IsNull(Me!IdDisponibilités)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     End If
     End If
          If (Format(HF, "hh:nn") <= Format(HeureFin, "hh:nn")) And (HD < HF) Then
     
    ' On recherche des RDV dont les horaires de début et de fin chevauchent les
    ' horaires choisis sur le formulaire.
    Classe = Nz(DLookup("NomClasse", "T_Classe", "InStr('" & Nz(Me.Cours, "") & "',[NomClasse]) <> 0"), "")
    n = Nz(DLookup("[NR]", "T_SaisieEDT", "(NR<>" & Nz(Me!NR, 0) & ") And (InStr([Cours],'" & Classe & "')<>0) And HoraireDebut<" & FormatDateUS(HF) & " And HoraireFin>" & FormatDateUS(HD)), 0)
     
    ' si aucun RDV n'a été trouvé, la plage horaire est donc disponible et on peut
    ' enregistrer le RDV.
     
         If (n = 0) Then
            If ((Me!Cours = "Premiere Maquillage")) Then
     
             Me!Cours = "Premiere_Terminale Maquillage"
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
     
             Set db = CurrentDb
             Set rs = db.OpenRecordset("T_SaisieEDT")
     
             rs.AddNew ' ajout d'une entrée correspondant à "Terminale_Premiere Maquillage"
             rs!Cours = "Terminale_Premiere Maquillage"
             rs!HoraireDebut = HD
             rs!HoraireFin = HF
             rs.Update
     
             rs.Close
             Set rs = Nothing
     
             db.Close
             Set db = Nothing
     
             MajEDT ' mise à jour du planning
             DoCmd.Close ' fermeture du formulaire de saisie.
     
             Else
     
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
             MajEDT
             DoCmd.Close
             End If
     
             Else
             MsgBox ("La Classe est déjà en cours, ou la Salle est déjà occupée!")
     
             End If
     
          Else
          MsgBox ("Saisie incorrecte !")
     
          End If
     
     
     
     
    Exit_CmdValider:
        Exit Sub
     
    Err_CmdValider:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_CmdValider
    End Sub
    Avec ce code :
    - Si je prends un cours autre que « Premiere Maquillage » tout est OK
    - Si je choisi le Cours « Premiere Maquillage », j’obtiens une erreur « Incompatibilité de type ». Si je ferme l’application et la ré ouvre de suite la réservation sur le planning a bien été faite du côté classe de « Premiere_Terminale » mais non pas classe « Terminale_Premiere »

    Cdt

    Roland

  15. #15
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    Denis ne cherche pas, je pense avoir trouvé.

    J'ai remplacé dans le code après lecture sur un article sur les "Recordset" une des déclarations

    "Dim db As dao.Recordset " par "Dim db As dao.DataBase"

    Voici le code complet employé qui semble fonctionner. C'est pourquoi je ne classe pas encore la discussion comme résolue.

    Merci une fois de plus

    Roland

    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
    Private Sub CmdValider_Click()
     
    ' Valide les choix effectués sur le formulaire "F_SaisieEDT".
     
    On Error GoTo Err_CmdValider
     
    Dim n As Long
    Dim HD As Date, HF As Date
    Dim Classe
     
     
     
     
     
    ' Si les zones de texte "Cours" ou "Memo" ne sont pas vides
     
    If ((Me!Cours <> "") And Not IsNull(Me!Cours)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Or _
     ((Me!Salle <> "") And Not IsNull(Me!Salle)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     
    ' Si les zones de texte "Disponibilités" ou "Memo" ne sont pas vides
    Else
     
       If ((Me!IdDisponibilités <> "") And Not IsNull(Me!IdDisponibilités)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     End If
     End If
          If (Format(HF, "hh:nn") <= Format(HeureFin, "hh:nn")) And (HD < HF) Then
     
    ' On recherche des RDV dont les horaires de début et de fin chevauchent les
    ' horaires choisis sur le formulaire.
    Classe = Nz(DLookup("NomClasse", "T_Classe", "InStr('" & Nz(Me.Cours, "") & "',[NomClasse]) <> 0"), "")
    n = Nz(DLookup("[NR]", "T_SaisieEDT", "(NR<>" & Nz(Me!NR, 0) & ") And (InStr([Cours],'" & Classe & "')<>0) And HoraireDebut<" & FormatDateUS(HF) & " And HoraireFin>" & FormatDateUS(HD)), 0)
     
    ' si aucun RDV n'a été trouvé, la plage horaire est donc disponible et on peut
    ' enregistrer le RDV.
    Dim db As dao.Database
    Dim rs As dao.Recordset
         If (n = 0) Then
            If ((Me!Cours = "Premiere Maquillage")) Then
     
             Me!Cours = "Premiere_Terminale Maquillage"
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
     
             Set db = CurrentDb
             Set rs = db.OpenRecordset("T_SaisieEDT", dbOpenTable)
     
             rs.AddNew ' ajout d'une entrée correspondant à "Terminale_Premiere Maquillage"
             rs!IdProfesseur = IdProfesseur
             rs!TypeRdv = TypeRdv
             rs!Nom = Nom
             rs!Cours = "Terminale_Premiere Maquillage"
             rs!HoraireDebut = HD
             rs!HoraireFin = HF
             rs.Update
     
             rs.Close
             Set rs = Nothing
     
             db.Close
             Set db = Nothing
     
             MajEDT ' mise à jour du planning
             DoCmd.Close ' fermeture du formulaire de saisie.
     
             Else
     
     
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
             MajEDT
             DoCmd.Close
     
     
     
             End If
     
             Else
             MsgBox ("La Classe est déjà en cours, ou la Salle est déjà occupée!")
     
             End If
     
          Else
          MsgBox ("Saisie incorrecte !")
     
          End If
     
     
     
     
    Exit_CmdValider:
        Exit Sub
     
    Err_CmdValider:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_CmdValider
    End Sub

  16. #16
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut
    Bonjour,

    Il me semble qu'il faut aussi renseigner l'id. du professeur dans le recordset :

    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
     
        ...
     
        If (n = 0) Then
     
            If ((Me!Cours = "Premiere Maquillage")) Then
     
             Me!Cours = "Premiere_Terminale Maquillage"
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
     
             Set db = CurrentDb()
             Set rs = db.OpenRecordset("T_SaisieEDT")
     
             rs.AddNew ' ajout d'une entrée correspondant à "Terminale_Premiere Maquillage"
             rs!IdProfesseur=Me.IdProfesseur
             rs!Cours = "Terminale_Premiere Maquillage"
             rs!HoraireDebut = HD
             rs!HoraireFin = HF
             rs.Update
     
             rs.Close
             Set rs = Nothing
     
             db.Close
             Set db = Nothing
     
             MajEDT ' mise à jour du planning
             DoCmd.Close ' fermeture du formulaire de saisie.
     
             Else
     
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
             MajEDT
             DoCmd.Close
             End If
     
             Else
             MsgBox ("La Classe est déjà en cours, ou la Salle est déjà occupée!")
     
             End If
     
          Else
          MsgBox ("Saisie incorrecte !")
     
          End If
    à+
    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

  17. #17
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    C'est vrai il faut actualiser IdProfesseur. C'est ce que j'ai fait mais sans écrire Me.IdProfesseur (c'est mieux)

    Il faut également actualiser :
    La couleur Matière (TypeRdv)
    Le nom de la salle de cours (Nom)

    et cela semble être bon mais je n'ai pas encore fait complétement le tour.

    Cdt

    Roland

  18. #18
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    Bonjour,

    Je profite de ne pas avoir clôturé la discussion précédente qui néanmoins semble résolue pour poser l'une de mes dernières questions :

    Je dispose d’une BDD à 2 onglets qui me permet d’afficher divers emplois du Temps
    L’onglet de gauche est alimenté par une ComboBox (nom du contrôle « cmbChoix ») qui me permet d’ouvrir le planning EDT en fonction de ce contrôle sur les :

    - Professeurs
    - Classes

    L’onglet de droite est alimenté par une ComboBox (Nom du contrôle = « cmbTri ») qui lui me permet de choisir :

    - Le nom du Professeur
    - Le nom de la Classe

    La table T_Tri en mode Feuille de données se présente de la manière suivante :

    T_Tri
    IdTri NomTri IdChoix
    1 ROMERO Professeur
    2 BOE Professeur
    3 BRIAT Professeur
    4 GARCIN Professeur
    5 COT Professeur
    6 FLORETTE Professeur
    7 DUPREZ Professeur
    8 RENON Professeur
    9 SANTER Professeur
    10 THIBAUT Professeur
    11 PAGES Professeur
    12 Seconde Classe
    13 Premiere Classe
    14 Terminale Classe
    15 BTS 1 Classe
    16 CQP SPA Praticien Classe
    17 9 Mois Classe
    18 BTS 2 Classe




    La table tri est actuellement alimentée de façon manuelle en entrant successivement les champs :
    - NomProfesseur (IdTri de 1 à 11) issu d’une T_Professseur (IdProfesseur,
    - NomClasse (IdTri de 12 à 18) issue d’une T_Classe
    - Nom Salle (IdTri ……………..) issue de T_Salle
    Lorque je rajoute un Professeur, une classe ou une salle, via des boutons de saisie sur le formulaire EDT, je souhaite mettre à jour également la table T_Tri (IdTri, NomTri, IdChoix)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CmdValider_Click()
             MajEDT
             DoCmd.Close acForm, "F_SaisieClasse"
    End Sub
    Dois-je également passer par un Recordset ou une fonction « Insert into » pour la Maj car une requête Ajout ne fait pas l’affaire ?

    Merci

    Roland

  19. #19
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 239
    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 239
    Points : 19 364
    Points
    19 364
    Billets dans le blog
    61
    Par défaut
    Bonjour,

    Il serait mieux de passer par une requête sélection qui est un objet dynamique, plutôt que d'alimenter une table avec du code VBA.

    Il faudrait donc dans un premier temps copier ce code dans l'éditeur SQL des requêtes :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT R1.IdChoix & "_" & R1.Id AS numTri, R1.*
    FROM (SELECT IdProfesseur as id, nomProfesseur AS NomTri, 1 as IdChoix 
    FROM T_Professeur
    UNION
    SELECT IdClasse as id, nomClasse AS NomTri, 2 as IdChoix 
    FROM T_Classe
    UNION
    SELECT IdSalle as id, nom AS NomTri, 3 as IdChoix 
    FROM T_Salle
    UNION
    SELECT IdJourSemaine as id, Jour AS NomTri, 4 as IdChoix 
    FROM T_Semaine)  AS R1
    ORDER BY R1.IdChoix & "_" & R1.Id;

    Requête que vous enregistrez sous le nom "R_Tri (1)".

    Puis d'en créer une 2ème nommée "R_Tri", en passant toujours par l'éditeur SQL, avec ce code :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CLng(DCount("*","[R_Tri (1)]","[numTri] <='" & [numTri] & "'")) AS IdTri, [R_Tri (1)].NomTri, [R_Tri (1)].IdChoix
    FROM [R_Tri (1)]
    ORDER BY CLng(DCount("*","[R_Tri (1)]","[numTri] <='" & [numTri] & "'"));

    Et donc à la fin, l'objectif est de remplacer la table "T_Tri" par la requête "R_Tri".

    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

  20. #20
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    Bonjour et merci Denis,

    Je te confirme que l'ensemble est résolu pour ces deux dernières questions.

    Seul bug restant : le décalage des Id_Tri par rapport au NomTri entre la requête initiale et la requête obtenue R_Tri avec R_Tri (1). Le résultat c'est qu'il y a un décalage par rapport aux cours déjà validés sur le planning (ex: BOE comme Professeur dans l'onglet de droite mais c'est le planning de PAGES qui est affiché.) Cela ne se produit pas ni pour les classes, ni pour les Salles.

    Bonne journée

    Roland

    Tri.pdf

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Deux feuilles Excel utilisant les mêmes données
    Par AstroZelda dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/06/2015, 15h09
  2. Réponses: 3
    Dernier message: 17/02/2009, 14h43
  3. Rappeler le formulaire avec les mêmes données.
    Par macben dans le forum Struts 1
    Réponses: 6
    Dernier message: 30/06/2008, 19h09
  4. Macro de Mise à jour ne répercute pas les données
    Par jarault dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/05/2008, 17h50
  5. Mise à jour BDD sans perdre les données
    Par penchu dans le forum Accès aux données
    Réponses: 4
    Dernier message: 07/02/2007, 12h21

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