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 :

Créer des états pour sessions de formation suivant les dates de sessions


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2021
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Créer des états pour sessions de formation suivant les dates de sessions
    Bonjour à tous,

    Dans le cadre d'un projet RH, je développe un outil avec VBA Access pour automatiser la création et le suivi des sessions de formations au sein de l'entreprise.

    Pour résumer, l'outil doit permettre de créer une session de formation (pour un certain nombre d'employés), envoyer des mails d'invitations, générer les feuilles d'émargements et d'en faire la saisie par la suite, générer des évaluations à chaud et à froid.

    Je voudrais avoir votre aide sur la partie feuilles d'émargements (Etats). Une session de formation compte une date de début et une date de fin (différentes selon la session). Exemple : Session de Formation Informatique, date début 28/02/2021 date de fin 04/03/2021. Je voudrais savoir comment procéder pour générer une feuille d'émargement par jour de manière automatique. Sachant que j'ai une table "Emargement" (capture ci-dessous)

    Mon soucis est que comme les dates diffèrent selon la session, je n'ai pas su adapter ma table pour recevoir ces différente date, sachant que je dois générer une feuille d'émargement par jour

    Ci-dessous les captures des tables et les formulaire que j'ai créé :

    Nom : Capture1.PNG
Affichages : 84
Taille : 31,6 Ko
    Nom : Capture2.PNG
Affichages : 89
Taille : 15,9 Ko
    Nom : Capture3.png
Affichages : 91
Taille : 104,9 Ko

    Voila, je vous remercie par avance pour votre aide

  2. #2
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Bonjour,
    si l'on en croit la table "collaborateurs", le champ "Matricule_Groupe" est l'identifiant du collaborateur.
    Pourquoi retrouve t'on ce champ dans la table "Sessions_formations" ?
    J'imagine qu'une session de formation peut concerner différents collaborateurs, non ?
    Aussi, que ce sont ces "jour1", "jour2" etc dans la tale émargement ? Ce sont les jours où les collaborateurs vont suivre la formation ?
    Si oui, tu imagines une formation longue de disons 300 jours, tu voulais créer autant de champ que de jours ??

    Je suggère plutot d'utiliser une table de liaison entre tes tables "collaborateurs" et "sessions_formations" contenant les clés primaires de ces 2 tables comme clé primaire.

    Ensuite, pour ton émargement, je pense qu'une routine en vba te permettra de remplir une table contenant (matricule_groupe, id_session, jour) à la création de la formation une fois tous les collaborateurs inscrits.

    A+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2021
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bonjour et merci pour votre réponse.

    Effectivement le matricule groupe est l'identifiant du collaborateur. Je l'ai repris sur la table "session de formation" comme une clé secondaire pour permettre d'identifier le collaborateur inscrit à tel numéro de session. Je vais revoir mes tables selon vos recommandations.

    Par contre le souci pour moi c'est qu'une fois la session terminée, je reçois les feuilles d'émargement que je dois saisir sur l'outil. Comme les dates de sessions sont différents, j'ai du mal à visualiser un formulaire qui affiche les dates de telle session ( exemple : une session du 01/03/2021 au 04/03/2021, une autres du 07/03/2021 au 20/03/2021, ...). Comment afficher les dates de sessions sur un formulaire pour permettre de saisir la présence ou l'absence de telle collaborateur (pour chaque jour de la session).

    J'espère être assez clair dans mes explications.

    Je vous remercie par avance.

  4. #4
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Re,

    Pour être certain de la clarté, la table "Sessions_formations" représente une formation qui peut être suivie par plusieurs collaborateurs ?
    Donc tu n'as pas à mettre de clé étrangère de la table collaborateur.

    Les jours de présence sont les mêmes pour une même session de formation, n'est-ce pas ?

    Donc ce que je te disais, c'est qu'une fois les renseignements de la session de formation saisis ainsi que les différents collaborateurs inscrits à cette session, on crée des enregistrements dans une table qui contient l'id de la session, le matricule du collaborateur ainsi que la date (tu n'en veux pas 2 par jour, souvent, on émarge le matin et l'après-midi en formation).
    Donc par exemple, tu auras

    id_formation matricule jour
    1 50 02/03/2021
    1 50 03/03/2021
    1 50 04/03/2021
    1 51 02/03/2021
    1 51 03/03/2021
    1 51 04/03/2021

    Pour la formation avec l'id 1 qui se déroule du 02 au 04/03/2021 et pour laquelle les salariés avec les matricules 50 et 51 sont inscrits.

    On peut imaginer un champ booléen (oui/non) en plus dans cette table, qui te permettra de dire si le collaborateur a été présent.

    A+

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2021
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Re,

    Absolument, tu as très bien résumé le fonctionnement de l'outil. Je vais refaire mes tables selon tes propositions ! Merci beaucoup.

    Une dernière question stp ! Quand je renseigne le formulaire pour créer une session, je saisi une date de début, et une date de fin. Comment faire pour générer sur le champ date de la 3 ème table les dates jour par jour comme sur ton exemple

    Exemple : date début 02/03/2021 date de fin 04/03/2021

    id_formation matricule jour
    1 50 02/03/2021
    1 50 03/03/2021
    1 50 04/03/2021
    1 51 02/03/2021
    1 51 03/03/2021
    1 51 04/03/2021

    Merci infiniment par avance !

  6. #6
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Re,

    il faudra que tu crées une routine VBA qui utilisera 2 boucles, la première pour parcourir les collaborateurs inscrits et la seconde pour boucler sur les jours concernés (ou vice versa) et qui inscrit dans la table emargement les infos

    L'algo sera :

    Se positionnner sur le premier collaborateur inscrit
    Tant que l'on a pas parcouru tous les collaborateurs inscrits
    Jour=date debut formation
    Tant que jour <= date fin formation
    inscrire id formation, matricule collaborateur, jour
    jour = jour +1
    Fin tant que
    Passer au collaborateur suivant
    Fin tant que

    A+

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2021
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour toutes vos réponses ! Si vous avez un exemple de code je suis preneur, sans abuser de votre gentillesse

  8. #8
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Re,

    il faudra le nom des tables créées après correction.

    Tu peux enrichir tes connaissances ici - https://warin.developpez.com/access/...=partie_5#L5.3

    Une fois que tu auras créé la table "collaborateurs_formation" (table qui fait le lien entre tes tables "collaborateurs" et "sessions_formations" qui stocke donc les collaborateurs inscrits aux différentes formations), ça donnerait quelque chose comme :
    (à exécuter depuis un formulaire qui contient l'id de la formation et les dates debut et fin

    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
     
    Dim num_formation As Integer
    Dim date_debut, date_fin As Date
    num_formation = Forms!formation!id_session
    date_debut = Forms!formation!date_debut
    date_fin = Forms!formation!date_fin
    Dim oRst As DAO.Recordset
    Dim oRst2 As DAO.Recordset
    Dim oDb As DAO.Database
    Set oDb = CurrentDb
     
    Set oRst = oDb.OpenRecordset("SELECT id_session,Matricule_Groupe FROM collaborateurs_formation WHERE id_session=" & num_formation) 'on ouvre un recordset basé sur une requête qui liste les matricules dans la table collaborateurs_formation pour la formation en cours dans le formulaire
     
    Set oRst2 = oDb.OpenRecordset("Emargement", dbOpenTable) 'on crée un recordset sur la table "Emargements"
    If Not oRst.EOF Then
          'S'il n'est pas vide on va au premier enregistrement
          oRst.MoveFirst
          'Tant qu'on est pas arrivé à la fin du recordset
          While Not oRst.EOF
                jour = date_debut
                While jour <= date_fin
                    oRst2.AddNew 'on crée un nouvel enregistrement dans la table "Emargements"
                    oRst2.Fields("Id_formation").Value = oRst.Fields("id_session") 'on affecte au champ "id_formation" de la table "Emargements"  le champ "id_session" de la table "collaborateurs_formation"
                    oRst2.Fields("matricule").Value = oRst.Fields("Matricule_Groupe") 'on affecte au champ "matricule" de la table "Emargements"  le champ "matricule_groupe" de la table "collaborateurs_formation"
                    oRst2.Fields("jour_emargement") = jour 'on affecte au champ "jour_emargement" le jour de la boucle
                    oRst2.Update 'on met à jour la table
     
                    jour = jour + 1 'On passe au jour suivant
                 Wend
              oRst.MoveNext 'on passe au collaborateur suivant
          Wend
    End If
     
    'Libération des objets
    oRst.Close
    oRst2.Close
    oDb.Close
    Set oRst = Nothing
    Set oRst2 = Nothing
    Set oDb = Nothing
    Code que je n'ai bien entendu pas testé et à adapter avec le nom de tes champs.

    A+

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2021
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Vraiment merci beaucoup ! Je vais essayer tout ça

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2021
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Vraiment un grand merci, j'ai testé le code en l'adaptant à mes tables, champs et contrôles ! Il fonctionne parfaitement. Cette problématique m'a permis de me replonger sérieusement dans la compréhension des recordset. Merci infiniment !!!

  11. #11
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Bonjour,

    tu peux fignoler en gérant les week-end et jours fériés.

    Mais quoiqu'il en soit, tu as un bouton "résolu" en bas.

    A+

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2021
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/05/2015, 13h45
  2. Réponses: 3
    Dernier message: 29/03/2014, 20h51
  3. [WD14] créer un état pour imprimer des tickets caisse
    Par AndreSanta dans le forum WinDev
    Réponses: 2
    Dernier message: 03/06/2011, 01h33
  4. [AC-2010] Comment créer des états au format Excel avec mise en forme
    Par Sami Xite dans le forum Access
    Réponses: 1
    Dernier message: 23/09/2010, 10h23
  5. Créer des critères pour l'ouverture d'un état
    Par Créateur dans le forum IHM
    Réponses: 2
    Dernier message: 19/12/2007, 17h09

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