formateur informatique

Détecter automatiquement l'encodage des fichiers en VBA

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Détecter automatiquement l'encodage des fichiers en VBA
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 :


Détecter automatiquement l'encodage d'un fichier

Nous avons déjà appris à adapter le système d'encodage pour parvenir à importer des fichiers texte sans problème de transcription. Mais dans l'application que nous avions montée, nous laissions la possibilité à l'utilisateur de définir l'encodage, par le biais de cases à cocher, avant l'importation. Ici, nous souhaitons automatiser le processus pour qu'il soit totalement transparent pour l'opérateur. C'est désormais au code VBA de déterminer si le fichier est encodé en iso-8859-1 ou en utf-8.

Base de données Access à télécharger
Pour démontrer cette solution, nous proposons de baser l'étude sur l'application qui avait permis d'importer des fichiers de type texte. Vous le remarquez, la base de données est accompagnée d'un sous dossier. Il héberge quelques fichiers de textes. Il s'agit de descriptifs de formations sur la fonction Excel Decaler. Mais ils ne sont pas tous encodés de la même manière. Et avec notre précédente application, des problèmes de transcription vont surgir. Nous allons le découvrir.
  • Double cliquer sur le fichier de la base de données pour l'ouvrir dans Access,
  • Cliquer alors 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,
  • Sur la droite du formulaire, cliquer sur le bouton à l'icône du dossier,
  • Dans la boîte de dialogue, ouvrir le dossier fonction-excel-decaler du dossier de décompresion,
  • Puis, cliquer sur le bouton Ok pour procéder à l'importation,
Importer des fichiers textes dans une zone de liste du formulaire Access

Comme vous pouvez le voir, tous les noms des fichiers contenus dans le dossier sélectionné sont importés dans une zone de liste déroulante, sur la droite du formulaire, à gauche du bouton à l'icône du dossier.
  • Dans cette liste, cliquer sur le nom du premier fichier,
Comme vous pouvez l'apprécier, son contenu est instantanément restitué dans la zone de texte. Aucun problème de transcription, notamment sur les accents, n'est à déplorer.
  • Maintenant, cliquer sur le nom du fichier suivant,
Problème de transcription des accents pendant importation des données en VBA Access

Cette fois, des problèmes surgissent. Tous les accents sont mal transcrits. Notre code VBA est conçu pour interpréter les fichiers au format iso-8859-1. Or ce dernier est encodé en utf-8. C'est la raison pour laquelle, les accents notamment, ne sont pas compris.

Le code VBA existant
Un code VBA Access est donc déjà bien présent. Il offre une boîte de dialogue pour désigner un dossier et réaliser l'importation des fichiers qu'il contient. Nous proposons de le constater.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du formulaire.
  • Puis réaliser le raccourci clavier ALT + F11,
Nous découvrons la présence des procédures événementielles listeFichiers_Click et parcourir_Click. La seconde affiche la boîte de dialogue permettant de choisir un emplacement au clic sur le bouton à l'icône d'un dossier. La première permet d'importer dans la zone de texte enrichie, le contenu du fichier cliqué par l'utilisateur dans la zone de liste déroulante.

...
Set objFlux = CreateObject("ADODB.Stream")
objFlux.charset = "iso-8859-1"
objFlux.Open
objFlux.LoadFromFile (fichier)
Do Until objFlux.EOS
texte = texte & objFlux.ReadText(-2) & "<br />" '-2 :ligne à ligne
Loop
...


Nous utilisons bien la classe ADODB.Stream et comme vous pouvez le constater, nous considérons par défaut que tous les fichiers sont encodés au format iso-8859-1. C'est là précisément que le problème survient quand il est question de traiter des fichiers encodés en utf-8.

Tester les caractères incorrects
Contrairement au C# et au VB dans Dot Net, le VBA n'offre pas de méthode pour connaître l'encodage d'un fichier avant de procéder à son importation. L'astuce de contournement consiste à importer son contenu en ISO, à tester en mémoire la présence de caractères mal transcrits et à livrer le verdict pour adapter l'encodage à adopter.
  • Après la destruction de la variable objFlux, créer l'instruction conditionnelle suivante :
...
Set objFlux = Nothing

If InStr(1, texte, "é") > 0 Then
texte = ""

End If


contenu.Value = texte
...


Grâce à la fonction InStr (In String), nous cherchons à trouver la présence d'un caractère mal encodé, l'accent aigüe sur le e en l'occurrence ici (Le grand A accentué suivi du symbole du Copyright é). Si une position est décelée (>0), nous en déduirons que le format doit être adapté. En attendant, nous réinitialisons le texte importé (texte = ""), puisqu'il était mal formé.

Adapter le système d'encodage
Dans la branche de cette instruction conditionnelle, si le critère est vérifié, nous devons pratiquement exécuter la même importation que précédemment, mais en adaptant le système d'encodage pour le basculer en utf-8.
  • Dans l'instruction conditionnelle, adapter la précédente importation comme suit :
...
Set objFlux = Nothing

If InStr(1, texte, "é") > 0 Then
texte = ""
Set objFlux = CreateObject("ADODB.Stream")
objFlux.charset = "utf-8"
objFlux.Open
objFlux.LoadFromFile (fichier)
Do Until objFlux.EOS
texte = texte & objFlux.ReadText(-2) & "<br />" '-2 :ligne à ligne
Loop
End If

contenu.Value = texte
...


Avec ce réajustement à la volée, nous devrions être en mesure de lire tout type de fichier.

Importer les fichiers encodés
Il est donc temps de tester ce code VBA Access.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • L'exécuter en enfonçant la touche F5 du clavier,
  • Cliquer sur le bouton à l'icône du dossier,
  • Désigner celui comportant les fichiers texte importés,
Gérer automatiquement les accents à l-importation des données en VBA Access

Si vous cliquez sur le premier nom de fichier dans la zone de liste, l'importation se réalise toujours avec succès. Si vous cliquez sur le deuxième, contrairement à précédemment, son système d'encodage est intercepté à la volée pour gérer les accents. Et comme vous pouvez l'apprécier, son importation et sa transcription sont parfaites.

 
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