formateur informatique

Détecter encodage Iso ou Utf en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Détecter encodage Iso ou Utf en VBA Excel
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 encodage Iso ou Utf-8

Nous savons déjà importer des données externes en VBA Excel. Mais ce que nous maîtrisons moins, c'est la gestion automatique des encodages. En effet, s'ils sont mal interprétés, les caractères latins dont les accents, sont mal retranscrits à l'arrivée. Ici, nous allons démontrer comment détecter automatiquement l'encodage de chaque fichier pour adapter les flux de lecture et offrir des résultats sans défaut.

Pour développer cette solution, nous proposons d'agir à partir d'un classeur Excel offrant déjà un code VBA pour importer des données. La décompression livre le classeur Excel accompagné d'un sous dossier. Il est nommé import et il héberge deux fichiers texte. Les données y sont organisées au format Csv. Chaque information est séparée d'une autre par un délimiteur. Ce délimiteur est le point-virgule. Ce point-virgule est déjà géré par le code VBA Excel que nous allons découvrir. C'est ainsi qu'il importe les données et les diffuse dans des colonnes voisines. En revanche, ces deux fichiers ne sont pas encodés de la même façon. Vous pouvez le constater en les ouvrant dans l'éditeur Notepad++ et en déployant le menu encodage.

Importation classique des données
Pour constater que le code VBA réceptionné est déjà en mesure d'importer ce type de données, nous proposons d'accéder à son classeur.
  • Double cliquer sur le fichier du classeur pour l'ouvrir dans Excel,
  • Cliquer alors sur le bouton Activer la modification dans le bandeau de sécurité,
Vous découvrez la présence d'une grille destinée à réceptionner les données à importer.
  • Sur la droite de la feuille, cliquer sur le bouton à l'icône d'un dossier,
  • Dans la boîte de dialogue qui suit, ouvrir le dossier import que nous avons téléchargé,
  • Puis, valider par le bouton Ok en bas à droite de la boîte de dialogue,
Importer les données de fichiers textes dans Excel avec problèmes encodage

Les données des deux fichiers sont effectivement importées dans la feuille Excel. Le code VBA est capable de traiter tous les fichiers d'un dossier désigné, quel que soit leur nombre. Le processus semble donc s'être déroulé parfaitement. Mais à y regarder de plus près en atteignant les dernières lignes, vous constatez que la désillusion est grande. Ces informations appartiennent au second fichier texte. Or ce dernier est encodé en Utf-8. Et cet encodage n'est pas encore géré par notre code. C'est la raison pour laquelle les accents sont mal retranscrits.

Le code VBA d'importation
Pour comprendre ce qui ne va pas, nous proposons d'accéder au code VBA existant.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
Après l'instanciation de la classe pour les boîtes de dialogue :

Set boite = Application.FileDialog(msoFileDialogFolderPicker)

Vient l'instanciation de la classe pour manipuler les fichiers du disque :

Set objetFichier = CreateObject("scripting.filesystemobject")

Puis, c'est au tour de celle permettant de créer un flux de lecture en mémoire :

Set flux = CreateObject("ADODB.Stream")

Et comme vous le constatez, nous partons du principe que tous les fichiers à importer sont encodés en Iso : flux.Charset = "iso-8859-1".

C'est bien sûr ici que réside le problème à corriger. A ce titre, vous notez la présence du commentaire qui suit pour marquer l'emplacement du code VBA à injecter.

Ensuite, nous réalisons la lecture de chaque fichier ligne à ligne : flux.ReadText(-2). Dans le même temps, nous découpons les informations de la ligne récupérée sur le point-virgule : Split(flux.ReadText(-2), ";"). C'est alors que nous engageons une boucle For Next pour répartir ces données découpées dans différentes colonnes, pour la ligne en cours sur la feuille : For i = 0 To UBound(chaine).

Tester les données dans le flux
Pour gérer automatiquement l'importation des données accentuées, quel que soit l'encodage, l'astuce consiste à ouvrir une première fois un flux de lecture, à tester les données pour déterminer l'encodage pour refermer le flux et le rouvrir avec la bonne interprétation (Charset).
  • Sous la ligne du commentaire, ajouter les instructions VBA suivantes :
...
flux.Open
flux.LoadFromFile (chemin & "\" & chaqueFichier.Name)
texte = flux.ReadText()

Set flux = Nothing
...


Interpréter l'encodage
Maintenant et pour redonner la main au code existant qui suit, nous devons de nouveau instancier la classe permettant d'ouvrir un flux de lecture avec le système d'encodage désormais adapté.
  • A la suite du code précédent et avant le code existant, ajouter l'instruction VBA suivante :
...
Set flux = Nothing

Set flux = CreateObject("ADODB.Stream")
...


Nous créons donc un nouveau flux de lecture. Nous récupérons l'intégralité des données du fichier (flux.ReadText()) en cours d'étude, que nous stockons dans la variable texte. Puis nous fermons le flux. Maintenant que les informations complètes du fichier sont stockées en variable, nous allons pouvoir les tester avant de procéder à leur importation.
  • A la suite du nouveau code, ajouter les instructions VBA suivantes :
...
If InStr(1, texte, "é") > 0 Then
flux.Charset = "utf-8"
Else
flux.Charset = "iso-8859-1"
End If

...


Nous testons la présence d'un caractère mal encodé dans le flux importé. Cette succession de symboles (é) représente la lettre e avec un accent aigü. Nous pourrions en tester d'autres mais il s'agit de l'accent le plus fréquent. Si sa présence mal transcrite est avérée, nous réglons l'encodage en utf-8. Dans le cas contraire, nous restons en iso.

Il est temps de tester ce code VBA de repérage automatique des systèmes d'encodage.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
  • Cliquer sur le bouton à l'icône du dossier,
  • Ouvrir le dossier nommé import et valider par le bouton Ok,
Gérer automatiquement encodage des fichiers importés en VBA Excel

Les données sont parfaitement importées comme précédemment mais cette fois et comme vous pouvez le constater, tous les accents sont parfaitement gérés et ce, quel que soit le système d'encodage détecté automatiquement.

 
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