formateur informatique

Lire les champs et enregistrements d'une autre base de données

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Lire les champs et enregistrements d'une autre base de données
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner  Youtube    Vidos astuces Instagram
Sujets que vous pourriez aussi aimer :


Enregistrements d'une base de données externe

Grâce aux développements des volets précédents, nous avons appris à récolter les noms des tables, requêtes, formulaires et états d'autres bases de données. Ici, nous allons apprendre à lire les enregistrements d'une table d'une autre base de données, grâce au code VBA Access.

Importer enregistrements table de base de données externe en VBA Access

Le formulaire illustré par la capture résume les travaux accomplis jusqu'alors. Un bouton permet de lister les noms des bases de données, issues d'un dossier, dans une première zone de liste. Dès lors, au clic de l'utilisateur sur l'un de ces noms, tous les objets de la base de données désignée sont restitués dans quatre autres zones de liste. Et désormais, si l'utilisateur clique sur l'une des tables de cette base externe, ce sont tous ses enregistrements qui sont lus et restitués dans une zone de texte, placée dans la partie inférieure du formulaire.



Base de données Access à télécharger
Pour finaliser cette application, nous devons récupérer la base de données qui consolide tous les travaux précédents.
  • Télécharger le fichier compressé lire-enregistrements-autre-bdd.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur le fichier résultant pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation, double cliquer sur le formulaire fParcourir pour l'exécuter,
  • Sur le formulaire, cliquer sur le petit bouton à l'icône d'un dossier,
  • Dans la boîte de dialogue qui suit, ouvrir un dossier contenant des bases de données Access,
  • Valider par le bouton Ok pour revenir sur le formulaire,
  • Dans la première zone de liste, cliquer sur l'un des noms de base ainsi importé par le VBA,
De cette manière, vous obtenez les noms de tous les objets qui lui appartiennent, répartis dans les quatre autres zones de liste. Mais à ce stade bien entendu, si vous cliquez sur l'une de ses tables dans la deuxième zone de liste, la zone de texte en bas du formulaire, reste muette.

Liste des tables d-une base de données externe sur un formulaire Access

C'est tout l'enjeu de ce dernier développement. Nous devons être capables d'accéder aux enregistrements de cette table pour la base externe désignée, afin de les lire et de les restituer.



La déclaration des variables
Pour débuter, nous avons besoin de gérer l'événement du clic sur la deuxième zone de liste. Elle est nommée lesTables.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur la deuxième zone de liste pour la sélectionner,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement Au clic,
  • Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Nous basculons ainsi dans l'éditeur VBA Access, entre les bornes de la procédure événementielle lesTables_Click.

Avant tout, nous avons besoin d'objets pour piloter la base de données distante et ses enregistrements.
  • Dans les bornes de la procédure, ajouter les déclarations de variables suivantes :
Private Sub lesTables_Click()
Dim autreBdd As Access.Application: Dim enr As Recordset
Dim chemin As String: Dim i As Byte

End Sub


L'objet autreBdd doit servir à instancier la classe Access pour pointer sur la base de données externe à piloter. Nous typons l'objet enr comme un Recordset pour qu'il puisse prendre possession des enregistrements d'une table dans cette base. La variable chemin doit reconstruire le chemin d'accès complet à ce fichier externe pour que l'instance d'Access que nous allons créer, puisse pointer sur la base de données désignée. Enfin, nous utiliserons la variable i comme compteur de boucle pour parcourir tous les champs de la table à analyser. En effet, il est question de restituer tout le détail pour tous les enregistrements.

Le chemin d'accès et l'instance d'Access
Maintenant que les variables sont prêtes, nous allons pouvoir en initialiser certaines. Concernant le chemin d'accès souvenez-vous, les informations ont été stockées dans les deux zones de texte masquées, nommées respectivement acces et laBdd. Il s'agit de l'accès au dossier de la base à traiter et du nom même de cette base. Pour créer une nouvelle instance d'Access, il est question d'exploiter la fonction VBA CreateObject, comme souvent quand il s'agit d'instancier une classe.
  • Après la déclaration des variables, ajouter les instructions VBA suivantes :
...
lesEnregistrements.Value = ""
chemin = acces.Value & "\" & laBdd.Value
Set autreBdd = CreateObject("Access.Application")
autreBdd.OpenCurrentDatabase chemin
autreBdd.Visible = False
...


Tout d'abord, nous réinitialisons le contenu de la zone de texte destinée à accueillir l'extraction des enregistrements, en réglant sa propriété Value sur "du vide" (""). Nous recomposons le chemin d'accès complet à la base de données dans la variable chemin. Nous initialisons (Set) l'objet autreBdd sur une instance d'Access grâce au paramètre Access.Application passé à la fonction CreateObject. Dès lors, nous exploitons sa méthode héritée OpenCurrentDatabase en lui passant le chemin de la base de données à piloter. C'est ainsi que nous pourrons ensuite accéder aux enregistrements de ses tables. Mais la variable enr n'est pas encore initialisée. Enfin, nous réglons à false la propriété Visible de cette instance pour que les traitements VBA se réalisent en tâches de fond et ne s'affichent pas à l'écran.



Piloter les enregistrements externes
Maintenant que l'instance est créée pour piloter une autre base de données Access, nous allons pouvoir accéder aux enregistrements de ses tables. Mais pour cela, nous devons d'abord initialiser l'objet enr afin qu'il hérite des propriétés et méthodes pour manipuler les enregistrements.
  • A la suite du code VBA, ajouter les instructions suivantes :
...
Set enr = autreBdd.CurrentDb.OpenRecordset(lesTables.Value)
enr.MoveFirst
...


En exploitant la méthode CurrentDb de l'instance autreBdd, nous définissons cette base de données externe comme la base de données active à étudier. Grâce à sa méthode enfant OpenRecordset, nous définissons le jeu d'enregistrements à analyser en lui passant le nom de la table en paramètre. C'est la propriété Value de la zone de liste nommée lesTables qui retourne le nom de la table cliquée par l'utilisateur. Dès lors, nous exploitons la méthode héritée MoveFirst par l'objet enr, pour placer le pointeur de lecture sur le premier enregistrement de la table.

Parcourir les enregistrements externes
Dès lors, nous pouvons engager une boucle classique pour parcourir tous les enregistrements de la table ainsi désignée, du premier au dernier.
  • A la suite du code VBA, créer la boucle suivante :
...
Do

enr.MoveNext
Loop While Not enr.EOF
...


Nous bouclons (Do Loop) jusqu'au dernier enregistrement (While Not enr.EOF). EOF signifie End Of File. Comprenez "fin des enregistrements". A chaque passage et après chaque traitement non encore codé, nous n'oublions pas de déplacer le pointeur de lecture sur l'enregistrement suivant, grâce à la méthode MoveNext de l'objet enr.

Parcourir les champs de la table externe
Comme il est question de récolter toutes les informations de tous les enregistrements, nous devons engager une seconde boucle dans cette première boucle. Mais il s'agit d'une boucle bornée (For Next) car la propriété Count de la collection Fields pour l'objet enr renseigne sur le nombre de champs contenus dans la table. Ce sont ces champs que nous devons parcourir pour chaque enregistrement, de manière à récolter les informations de chaque colonne.
  • Dans les bornes de la boucle Do, ajouter les instructions VBA suivantes :
...
For i = 0 To enr.Fields.Count - 1
lesEnregistrements.Value = lesEnregistrements.Value & enr.Fields(i).Value & " "
Next i
lesEnregistrements.Value = lesEnregistrements.Value & "<br/>"
...


Pour chaque enregistrement, nous parcourons les champs du premier (0) au dernier (enr.Fields.Count- 1). A chaque passage, nous consolidons (lesEnregistrements.Value = lesEnregistrements.Value) la donnée du champ en cours avec les précédentes (& enr.Fields(i).Value & " ") dans la zone de texte nommée lesEnregistrements. Dès lors que tous les champs ont été passés en revue, soit après la seconde boucle qui reprendra au prochain passage de la première, nous ajoutons un saut de ligne (<br/>). Ce saut de ligne Html est rendu possible car l'attribut Format de texte de cette zone à été réglé sur la valeur Texte enrichi dans l'onglet Données de sa feuille de propriétés. C'est ainsi que nous disposons les données de chaque enregistrement sur des lignes différentes.



Décharger les objets pour libérer les ressources
Comme vous le savez et comme il est de coutume, une fois que les objets déclarés ne sont plus utilisés, nous devons les fermer et les détruire pour libérer la mémoire de l'ordinateur.

...
enr.MoveNext
Loop While Not enr.EOF

enr.Close
autreBdd.Quit
Set enr = Nothing
Set autreBdd = Nothing

...


Nous exploitons les méthodes respectives Close et Quit pour fermer le jeu d'enregistrements et l'instance d'Access. Puis, nous réinitialisons (Set) ces deux objets à Nothing pour les sortir de la mémoire.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • Exécuter ce dernier en enfonçant par exemple la touche F5 du clavier,
  • Sur le formulaire, cliquer sur le bouton matérialisé par l'icône d'un dossier,
  • Dans la boîte de dialogue qui suit, ouvrir un dossier contenant des bases de données Access,
  • Puis, cliquer sur le bouton Ok pour revenir sur le formulaire Access,
  • Dans la première zone de liste, cliquer sur l'un des noms de bases importés,
  • Dès lors, dans la deuxième zone de liste, cliquer sur l'une de ses tables,
Importer les enregistrements d-une autre base de données en VBA Access

Comme vous pouvez le voir et moyennant un temps de traitement, tous les enregistrements de la table externe ainsi désignée, sont parfaitement reconstitués et importés dans la zone de texte enrichie en bas du formulaire.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn