Géraldine

Reste à faire

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Lectures recommandées

Image non disponible

Pour vérifier votre niveau, parcourez ces tutoriels : si vous les comprenez facilement, vous êtes OK et si ce n'est pas le cas, insistez :

- pour commencer : Maxence Hubiche Access - Les Bases ;

- pour construire des requêtes : Jean Ballat Créer des requêtes simples ;

- pour construire un formulaire :Jean-Philippe Ambrosino le chapitre 2-1-2 de Mise en surbrillance d'un enregistrement dans un formulaire ;

- pour le VBA : Olivier Lebeau Initiation au VBA Office.

Image non disponible

D'une manière générale, pour vous documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
- affichez l'objet en mode création ;
- cliquez sur la propriété, elle se met alors en surbrillance ;
- enfoncez la touche <F1>.
Pour un problème de code dans un module, placez le curseur n'importe où dans l'instruction et pressez <F1>.

L'aide Access s'ouvre alors à la bonne page.

On peut aussi :
- ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
- ouvrir la fenêtre d'exécution (<Ctrl> + G), saisir un mot-clé, y placer le point d'insertion et presser <F1>.

Puisqu'on n'est plus sur le forum => plus de problème de confidentialité => une seule db : SuiviFormation.mdb.

Dans un répertoire qui contient un sous-répertoire « FichiersExcel » dans lequel seront logés les fichiers Excel (Pfyyyy.xls, Stages.xls).

II. Un Menu qui permet d'accéder aux fonctionnalités

Image non disponible

III. Formulaire Salariés

À finaliser.

IV. Référentiel des stages

Pour le mettre à jour, il faut d'abord importer les données depuis un fichier STAGES.xls présenté comme ceci :

Image non disponible

Pour importer :

Image non disponible

Le formulaire :

Image non disponible

Il contient donc actuellement 9 453 enregistrements.

Dans la partie inférieure, j'ai mis des filtres qui vont te permettre de répondre à deux questions :

  • quels sont les organismes qui proposent tel stage ?
Image non disponible
  • quels stages sont proposés par tel organisme ?
Image non disponible

Si tu double-cliques sur un champ Filtre, il redevient Null et tous les enregistrements s'affichent à nouveau.

V. Stages retenus

Les données sont récupérées depuis un fichier Pryyyy.xls (yyyy = année du plan).

Le fichier doit avoir cette présentation :

Image non disponible

Pour l'importer :

Image non disponible

et répondre à la question :

Image non disponible

N.B. J'ai importé 2016 et 2017.

Le résultat se présente comme ceci :

Image non disponible

Lorsqu'on complète le champ « Date début », un formulaire se déploie pour inviter à introduire les éventuelles autres dates de séance (si le stage comporte plusieurs jours) :

Image non disponible

Et au fur et à mesure que les candidats fixent leur choix, tu complètes la case « Date choisie ».

Un double-clic sur la date début copie la date dans le presse-papier.

Un double-clic sur la date choisie colle le contenu du presse-papier.

Image non disponible

S'il s'avère nécessaire de recourir à un stage de substitution (par exemple, pas de session organisée par l'organisme prévu au plan), on crée un « clone » de  l'original (pour éviter de devoir réencoder s'il y avait bcp d'inscrits) :

Image non disponible

Il y a maintenant deux stages retenus 

L'ancien…

Image non disponible

… dans lequel il faut supprimer Conreaux

Et le « clone »…

Image non disponible

… dans lequel il faut supprimer les deux autres.

Pour les filtres, même principe :

Image non disponible

.

VI. Public Sub ImportPF()

Plus à jour

VI-A. L'idée

Importer d'une trame PF PR (Excel), les données utiles au suivi du plan. On évite ainsi le réencodage.

Le processus peut être réexécuté autant de fois que l'on veut : par exemple chaque fois que le fichier devient plus complet au cours de l'élaboration du plan.

L'idéal eut été de travailler directement avec la trame officielle. Toutefois, comme les intitulés et l'ordre des colonnes sont susceptibles de changer (ex. 2017 versus 2016), on crée un fichier avec un dessin fixe PFAAAA.xls (AAAA pour le millésime et format xls 2003 pour des raisons de compatibilité avec Access2000).

Concrètement, on copie/colle les valeurs des colonnes de la trame officielle dans une feuille ayant ces entêtes :

Image non disponible
Figure 1 Clique pour agrandir l'image

VI-B. Les différentes étapes de la sous-routine

1. Importer les données Excel dans la db.

2. Compléter (si nécessaire) la table tSalaries.

3. Compléter (si nécessaire) la table tStages.

4. Compléter (si nécessaire) la table tOrganismes.

5. Associer Stages et Organismes pour créer les Sessions (coût, durée, Sécurité/métier).

6. Lier Sessions et Salariés concernés.

VI-C. Le code

 
Sélectionnez
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.
Public Sub ImportPF(AnneeAAAA As Integer)
  Dim oQry As DAO.QueryDef
  On Error GoTo GestionErreurs
  'Récupérer les données Excel
  '---------------------------
  'Purge
  DoCmd.DeleteObject acTable, "tRecup"
  'Import
  DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
             "tRecup", CurrentProject.Path & "/TramesPF/PF" & AnneeAAAA & ".xls", True
  
  'Supprimer les lignes blanches
  '-----------------------------
  DoCmd.SetWarnings False
  DoCmd.OpenQuery "rRecup"
  
  'Mettre à Jour tSalariés
  '-----------------------
  'Ajouts éventuels dans tSalaries
  DoCmd.OpenQuery "rAjoutSalaries"
  'Màj de l'équipe
  DoCmd.OpenQuery "rMajEquipe"
  
  'Mettre à jour tStages
  '---------------------
  'Ajouts éventuels
  DoCmd.OpenQuery "rAjoutCodesStages"
  'Actualisation (éventuelle) du libellé des stages
  DoCmd.OpenQuery "rMaJLibelleStage"
  
  'Mettre à jour tOrganismes
  '---------------------
  'Ajouts éventuels
  DoCmd.OpenQuery "rAjoutCodesOrganismes"
  'Actualisation (éventuelle) du libellé des organismes
  DoCmd.OpenQuery "rMaJLibelleOrganisme"

  'Gérer les sessions
  '------------------
  'Création des nouvelles
  Set oQry = CurrentDb.QueryDefs("rCreaSessions")
  oQry.Parameters("AnneeAAAA") = AnneeAAAA
  oQry.Execute
  'Nouvelles données (création tNllesDonneesSessions)
  DoCmd.OpenQuery "rNllesDonneesSessions"
  'Màj des éventuelles modif de durées et coûts
  Set oQry = CurrentDb.QueryDefs("rMaJSessions")
  oQry.Parameters("AnneeAAAA") = AnneeAAAA
  oQry.Execute
  
  'Enregistrer les formations par salarié
  '--------------------------------------
  'Ajout des nouvelles
  DoCmd.OpenQuery "rAjoutFormation"
  
  DoCmd.SetWarnings True
  Set oQry = Nothing

GestionErreurs:
  Select Case Err.Number
    Case 0 'Pas d'erreur
    Case 3011 'pas de fichier TramePF pour cette année
      MsgBox "Pas de PF" & AnneeAAAA & " disponible !"
    Case 7874 ' tRecup n'existe pas encore
      Resume Next
    Case Else
      MsgBox "Erreur dans ImportTramePF,  " & Err.Number & " " & Err.Description
  End Select
End Sub

VI-D. Comment afficher le code à l'écran

Ouvrir l'éditeur VBA <ALT + F11>.

Image non disponible

VI-E. Comment déclencher l'exécution du code

Ouvrir la fenêtre d'exécution <CTRL + G>.

Par exemple pour importer PF2017.xls

Saisir

Image non disponible

et <ENTER>

VI-F. Explication du code

N.B. Dans une ligne, la partie à droite d'une apostrophe (« ‘ »), c'est du commentaire.

VI-F-1. Importer les données Excel dans la db.

Image non disponible

7 : on supprime la table tRecup de l'exécution précédente.

La première fois qu'on exécute, la table n'existe pas, ce qui va provoquer une erreur 7874.

Le programme branche alors sur GestionErreurs (ligne 59). Profite pour te documenter sur l'instruction Select Case avec la touche F1.

On traite l'erreur à la ligne 64 et en 65 on lui dit : « c'est pas grave, continue à la ligne suivante », en l'occurrence la ligne 9.

9 : documente-toi sur DoCmd.TransferSpreadsheet.

Pour le paramètre « nomfichier », intéresse-toi à l'expression CurrentProject.Path.

Ouvre une fenêtre d'exécution <CTRL + G> et saisi  ? CurrentProject.Path

Image non disponible

« ? » => en français : « affiche à l'écran le contenu de… »

Compris ? (Rappelle-toi où nous avons logé physiquement le fichier Excel.)

À ce stage, on a dans la base la table tRecup, qui est l'équivalent de ce qui nous intéresse dans la trame PF.

Image non disponible

Ceci pour éliminer de la table tRecup les lignes blanches de séparation contenues dans le fichier Excel.

Cherche dans F1 la signification de la ligne 14.

Repère dans la suite du code la ligne qui neutralisera les effets de cette instruction.

15 : c'est la syntaxe pour déclencher l'exécution d'une requête depuis le VBA.

Ici une requête « Supression »

Image non disponible

En clair, on supprime les lignes où la colonne NomPrenom est vide.

VI-F-2. Compléter (si nécessaire) la table tSalaries.

Image non disponible

20 : cette fois, on exécute une requête « Ajout »

Image non disponible

Cette requête va tenter d'ajouter tous les salariés dans la table tSalaries.

Mais pour ceux qui s'y trouvent déjà, l'ajout sera rejeté, car la table n'admet qu'une seule occurrence de Matricule.

Image non disponible

Seules le colonnes Nom, Prenom, Matricule et Equipe sont complétées !

Utilise le formulaire fSalaries si tu veux compléter d'autres données.

Image non disponiblePour te documenter sur la fonction VraiFaux(), sers-toi de F1 avec le mot-clé iif. (Quand tu te trouves de ce côté du logiciel, il faut préférer la sauce anglaise !)

Voici ce que l'expression exprime : si cela a l'air d'être un matricule, prennez-le, sinon inscrivez « Manquant » suivi des nom et prénom.

Pour savoir si ça a l'air d'un matricule, j'ai écrit cette fonction :

Question de vocabulaire

Une sous-routine (Sub) est une liste d'instructions pour exécuter des actions.
On la déclenche en écrivant Call NomDeLaSub.

Une fonction (Function) renvoie une valeur.
Pour désigner la valeur, on écrit NomDeLaFonction.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
Public Function MatriculeOK(Matricule As String) As Boolean
  On Error Resume Next
  Dim lTest As Long
  lTest = Matricule
  If lTest <> 0 Then   MatriculeOK = True
End Function

4 : si Matricule n'est pas un nombre, lTest vaudra zéro.

5 : si lTest est différent de zéro, la fonction renvoie Vrai (True). Sinon elle renvoie sa valeur par défaut Faux (False).

Image non disponibleEncore un exemple de fonction personnelle qui consiste à répartir dans les cases d'un tableau les différents morceaux d'une chaîne de caractères (ici Nom,Prenom), séparés par un signe (ici une virgule).

 
Sélectionnez
1.
2.
3.
4.
5.
Public Function SplitNom(NomVirgulePrenom As String)
  Dim sTab() As String
  sTab = Split(NomVirgulePrenom, ",")
  SplitNom = sTab(0)
End Function

2 : mémorise cette syntaxe pour définir un tableau dont tu ne connais pas la dimension au départ.

3 : dans notre cas, le nom va se trouver dans la 1re case. Comme souvent, Access commence à compter à partir de zéro.

Image non disponible idem, mutatis mutandis, pour le prénom.
Essaie de comprendre toute seule. (Dans ta feuille Excel, il y avait un cas où nom et prénom n'étaient pas séparés par une virgule : MOUDAR Grégory.)

Image non disponible

On en profite pour mettre à jour l'équipe du salarié :

Image non disponible

Dis-moi dans quel cas il y aura effectivement une mise à jour.

VI-F-3. Compléter (si nécessaire) la table tStages

Image non disponible

Pour les ajouts et mises à jour (éventuels), même principe que pour les salariés.

VI-F-4. Compléter (si nécessaire) la table tOrganismes

Image non disponible

Pour les ajouts et mises à jour (éventuels), même principe que pour les salariés.

VI-F-5. Associer Stages et Organismes pour créer les Sessions (coût, durée, Sécurité/métier).

Image non disponible

6. Lier Sessions et Salariés concernés.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2016 Claude Leloup. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.