formateur informatique

Lire le contenu des fichiers texte en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Lire le contenu des fichiers texte en VBA Access
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    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Lire le contenu des fichiers

Avec les travaux du volet précédent, nous avons appris à parcourir les fichiers d'un dossier pour restituer leurs noms dans une zone de liste placée sur un formulaire Access. Avec ce nouveau volet, nous allons apprendre à accéder à leurs contenus respectifs.

Importer les contenus de fichiers textes sur un formulaire Access

Sur l'exemple illustré par la capture, l'utilisateur clique sur un bouton matérialisé par l'icône d'un dossier. Dans la boîte de dialogue qui suit, il désigne un dossier du disque et valide par Ok. Tous les noms des fichiers textes présents dans ce dossier sont alors restitués dans une zone de liste, placée sur la gauche du bouton. Il définit un système d'encodage grâce à une case d'option. Il clique sur l'un des noms de fichier. Et aussitôt son contenu est intégralement restitué dans une zone de texte multiligne sur la gauche du formulaire Access.

Base de données Access à télécharger
Pour démontrer le cas, nous suggérons d'appuyer l'étude sur les travaux du volet précédent. La décompression livre le fichier de la base de données accompagné d'un fichier texte et de deux sous dossiers. Les sous dossiers hébergent des fichiers textes à importer par le code VBA Access. Ils sont encodés différemment. Le fichier texte à la racine, abrite un code VBA usuel pour réaliser la lecture du contenu des fichiers. Grâce à lui, nous comprendrons dans un second temps l'importance du système d'encodage pour gérer les accents à l'importation.
  • Double cliquer sur le fichier lire-fichiers.accdb pour l'ouvrir dans Access,
  • Cliquer ensuite sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire fParcourir,
Ainsi nous l'exécutons et nous retrouvons bien le formulaire du volet précédent.
  • En haut à droite du formulaire, cliquer sur le bouton à l'icône du dossier,
  • Dans la boîte de dialogue, pointer dans un des sous-dossiers téléchargés,
  • Puis, valider par le bouton Ok,
Comme vous pouvez l'apprécier, la liste de tous les noms de fichiers textes contenus dans ce sous dossier est parfaitement reconstruite dans la zone de liste. Mais à ce stade, bien entendu, si vous cliquez sur l'un de ces noms, aucun contenu n'est encore restitué dans la zone de texte multiligne.

Code VBA au clic sur un fichier
Pour débuter, nous devons commencer par créer la procédure de code VBA qui se déclenchera au clic sur un élément de la zone de liste.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur la 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,
Exécuter un code VBA au clic sur une zone de liste du formulaire Access

Nous basculons ainsi dans l'éditeur VBA Access entre les bornes de la procédure événementielle listeFichiers_Click. Son code se déclenchera donc au clic sur un élément de la zone de liste nommée listeFichiers. Au passage, vous appréciez la présence du code du volet précédent, dans la procédure parcourir_Click. Le bouton Parcourir est celui matérialisé par l'icône du dossier.

La déclaration des variables
Maintenant, nous avons besoin de variables mais aussi d'un objet pour piloter les fichiers du système.
  • Dans les bornes de la procédure, ajouter les déclarations suivantes :
Private Sub listeFichiers_Click()
Dim pos As Byte: Dim nomF As String
Dim fichier As String: Dim texte As String
Dim encod As String: Dim objFlux


End Sub


Pour récupérer le nom du fichier cliqué, nous avons besoin de connaître la position de l'élément désigné dans la zone de liste. C'est l'utilité de la variable pos déclarée comme un entier court. Nous exploiterons ensuite le nom ainsi récolté pour reconstruire le chemin d'accès complet avec la variable nomF, dans la variable fichier, toutes deux déclarées fort naturellement comme des textes (As String). Le contenu récupéré sera stocké dans la variable texte. Le système d'encodage cliqué pour l'importation, sera transmis à la variable encod. Enfin, la variable objFlux prendra son type au moment de l'instanciation de la classe permettant de manipuler les fichiers.

Certaines variables peuvent d'ores et déjà être initialisées.
  • A la suite du code, créer les affectations suivantes :
...
contenu.Value = ""
pos = listeFichiers.ListIndex
nomF = listeFichiers.ItemData(pos)

fichier = acces.Value & "\" & nomF
...


La zone de texte multiligne se nomme contenu. Nous vidons son contenu avant chaque nouvelle importation. Grâce à la propriété ListIndex de l'objet zone de liste, nous récupérons la position de l'élément cliqué. Nous exploitons cette position en argument de sa propriété ItemData pour récolter le texte qu'il renferme. Il s'agit du nom du fichier que nous stockons dans la variable nomF. Nous récupérons le chemin d'accès au dossier, mémorisé dans la zone de texte horizontale supérieure, nommée acces. Et nous l'associons au nom du fichier pour reconstruire le chemin complet. C'est ainsi que nous pourrons parvenir à accéder au contenu du fichier cliqué.

Importation des contenus de fichiers
Puisque nous détenons désormais toutes les informations utiles, il est temps de les exploiter pour procéder à la récupération des contenus des fichiers cliqués par l'utilisateur. Et nous proposons dans un premier temps de recourir à la méthode usuelle d'accès séquentiel aux fichiers.
  • A la racine du dossier de décompression, double cliquer sur le fichier texte pour l'ouvrir,
  • Sélectionner tout le code VBA (CTRL + A) et le copier (CTRL + C),
  • Revenir dans l'éditeur VBA Access et le coller (CTRL + V) à la suite du code précédent,
...
Open fichier For Input As #1
Do While Not EOF(1)
Line Input #1, texte
contenu.Value = contenu.Value & texte
Loop
Close #1
...


Cette méthode d'accès classique, nous l'avons largement expliquée notamment dans la formation VBA Excel pour importer et exporter des données. Nous ouvrons un accès au fichier en mémoire. Nous parcourons toutes ses lignes grâce à une boucle Do While. Nous les ajoutons tour à tour à la suite dans la zone de texte multiligne.
  • Enregistrer les modifications (CTRL + S) et revenir sur le formulaire Access (Alt + Tab),
  • L'exécuter avec la touche F5 du clavier,
  • Cliquer sur le bouton à l'icône du dossier,
  • Avec la boîte de dialogue, ouvrir le sous dossier 11-fonction-excel-decaler,
  • Valider avec le bouton Ok,
  • De retour sur le formulaire, cliquer sur l'un des noms de fichier récoltés,
Comme vous pouvez l'apprécier, l'intégralité de son contenu est effectivement importé dans la zone de texte multiligne sur la gauche du formulaire.
  • Cliquer de nouveau sur le bouton à l'icône du dossier,
  • Avec la boîte de dialogue, ouvrir cette fois le sous dossier 12-fonction-excel-indirect,
  • Valider par Ok pour revenir sur le formulaire,
  • Puis, cliquer sur l'un des noms de fichier dans la zone de liste,
Problème encodage des accents sur importation de fichiers externes sur formulaire Access

Là encore, le contenu est importé mais des problèmes surgissent cette fois. Le système d'encodage n'étant pas géré, les accents sont mal retranscrits.

Le système d'encodage
Nous devons donc gérer ces différents systèmes d'encodage. Ils sont désignés par les cases d'option sous les boutons. Il peut s'agir du système iso-8859-1 ou du système utf-8.
  • Revenir dans l'éditeur VBA Access,
  • Passer les précédentes lignes de l'importation en commentaires,
Il suffit de les préfixer d'une apostrophe. Il existe un bouton dédié dans une barre d'outils en haut de l'éditeur. ...
If encodage.Value = 1 Then
encod = "iso-8859-1"
Else
encod = "utf-8"
End If
...


Très simplement, en fonction de la case cochée, nous mémorisons le système d'encodage associé qu'il va maintenant s'agir d'exploiter.

Instancier la classe des flux de fichiers
Pour cette gestion, il est question maintenant d'instancier une classe bien précise.
  • A la suite du code VBA, ajouter les instructions suivantes :
...
Set objFlux = CreateObject("ADODB.Stream")
objFlux.Charset = encod
objFlux.Open
objFlux.LoadFromFile (fichier)
texte = objFlux.ReadText()

contenu.Value = texte

set objFlux = nothing
...


Grâce à lafonction CreateObject et le paramètre ADODB.Stream, nous instancions la classe permettant de gérer les flux de données dans les fichiers. De fait, l'objet objFlux hérite des propriétés et méthodes pour les piloter. Avant d'accéder au contenu, sa désormais propriété Charset permet de fixer le système d'encodage à utiliser. Avec le chemin d'accès (fichier) passé en argument de sa méthode LoadFromFile, nous le chargeons en mémoire. Dès lors, sa méthode ReadText récupère l'intégralité de son contenu que nous stockons dans la variable texte. Enfin, nous exploitons cette variable pour charger ce contenu dans la zone de texte multiligne nommée contenu. Certes, nous aurions pu éviter l'étape intermédiaire de la variable. Enfin, puisque le travail est terminé et que cet objet n'est plus utilisé, nous le détruisons (set objFlux = nothing) pour libérer la mémoire.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • Cocher la case UTF et cliquer sur un fichier dans la zone de liste,
Cette fois et comme vous pouvez l'apprécier, les accents sont correctement gérés à l'importation du contenu du fichier.
  • Cliquer de nouveau sur le bouton à l'icône du dossier,
  • Ouvrir le sous dossier 11-fonction-excel-decaler et valider par ok,
  • Cliquer sur un nom de fichier dans la zone de liste,
Cette fois c'est l'interprétation inverse qui est mal réalisée. Les accents qui étaient bien transcrits ne le sont plus.
  • Cocher la case ISO et recliquer sur ce même nom de fichier,
Comme vous pouvez le voir, tout rentre dans l'ordre. Tout est une question de système d'encodage que nous savons désormais gérer pour procéder à l'importation du contenu des fichiers de type texte.

 
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