Exporter des données depuis Excel vers un fichier JSON, Excel VBA
Voici une explication détaillée et un code VBA pour exporter des données depuis Excel vers un fichier JSON.
Objectif
L’objectif est de créer une macro VBA qui lit les données d’une feuille de calcul Excel et les convertit en format JSON. Le format JSON (JavaScript Object Notation) est couramment utilisé pour stocker et transmettre des données de manière légère et lisible, ce qui le rend facile à utiliser pour les développeurs et les applications.
Étapes
1. Lire les données depuis Excel : Nous allons parcourir les lignes et les colonnes de la feuille Excel pour collecter les données.
2. Formater les données en JSON : Ensuite, nous allons formater ces données au format JSON.
3. Écrire le JSON dans un fichier : Enfin, nous allons exporter ces données JSON dans un fichier .json.
Code VBA
1. Configuration de base
Nous allons d’abord définir une sous-routine pour exporter les données.
Sub ExportDataToJSON() Dim ws As Worksheet Dim rng As Range Dim json As String Dim row As Range Dim cell As Range Dim colHeaders() As String Dim dataArray() As Variant Dim i As Integer Dim j As Integer ' Définir la feuille de travail à partir de laquelle les données seront exportées Set ws = ThisWorkbook.Sheets("Sheet1") ' Ajuster le nom de la feuille si nécessaire ' Définir la plage de données à exporter Set rng = ws.UsedRange ' Initialiser la chaîne JSON json = "[" ' Obtenir les en-têtes de colonnes à partir de la première ligne colHeaders = Application.Transpose(rng.Rows(1).Value) ' Commencer à parcourir les lignes (à partir de la deuxième ligne) For Each row In rng.Rows ' Ignorer la ligne d'en-têtes (première ligne) If row.Row > 1 Then ' Ouvrir un objet JSON pour la ligne actuelle json = json & "{" ' Parcourir les colonnes de la ligne actuelle For j = 1 To rng.Columns.Count ' Ajouter chaque donnée de cellule en tant que paire clé-valeur json = json & """" & colHeaders(j) & """: """ & row.Cells(1, j).Value & """" ' Ajouter une virgule de séparation si ce n'est pas la dernière colonne If j < rng.Columns.Count Then json = json & "," End If Next j ' Fermer l'objet JSON pour la ligne actuelle json = json & "}" ' Ajouter une virgule de séparation si ce n'est pas la dernière ligne If row.Row < rng.Rows.Count Then json = json & "," End If End If Next row ' Fermer le tableau JSON json = json & "]" ' Écrire le JSON dans un fichier Dim filePath As String filePath = Application.GetSaveAsFilename(FileFilter:="Fichiers JSON (*.json), *.json") If filePath <> "False" Then ' Créer et ouvrir le fichier Dim jsonFile As Integer jsonFile = FreeFile Open filePath For Output As jsonFile Print #jsonFile, json Close jsonFile MsgBox "Les données ont été exportées avec succès en JSON !", vbInformation End If End Sub
Explication du code
1. Configuration de la feuille et de la plage :
Set ws = ThisWorkbook.Sheets("Sheet1") Set rng = ws.UsedRange
- ThisWorkbook fait référence au classeur dans lequel se trouve le code VBA.
- ws est la feuille de travail à partir de laquelle vous souhaitez exporter les données.
- UsedRange fait référence à toute la plage utilisée dans la feuille, c’est-à-dire toutes les cellules contenant des données.
2. Récupération des en-têtes :
colHeaders = Application.Transpose(rng.Rows(1).Value)
- La première ligne (rng.Rows(1)) contient les en-têtes de colonnes.
- Application.Transpose convertit la ligne d’en-têtes en un tableau vertical pour que nous puissions utiliser ces en-têtes comme clés dans notre objet JSON.
3. Parcours des lignes :
For Each row In rng.Rows If row.Row > 1 Then json = json & "{" For j = 1 To rng.Columns.Count json = json & """" & colHeaders(j) & """: """ & row.Cells(1, j).Value & """" If j < rng.Columns.Count Then json = json & "," End If Next j json = json & "}" If row.Row < rng.Rows.Count Then json = json & "," End If End If Next row
- La boucle externe parcourt chaque ligne de la UsedRange.
- La boucle interne parcourt chaque colonne de la ligne. Pour chaque cellule, elle crée une paire clé-valeur où la clé est l’en-tête de la colonne et la valeur est la donnée de la cellule.
- Les lignes sont enveloppées dans des accolades {} pour représenter un objet JSON, et des virgules sont ajoutées pour séparer chaque paire clé-valeur.
4. Exportation des données JSON :
Dim filePath As String filePath = Application.GetSaveAsFilename(FileFilter:="Fichiers JSON (*.json), *.json") If filePath <> "False" Then Dim jsonFile As Integer jsonFile = FreeFile Open filePath For Output As jsonFile Print #jsonFile, json Close jsonFile MsgBox "Les données ont été exportées avec succès en JSON !", vbInformation End If
- Ce code ouvre une boîte de dialogue de sauvegarde et demande à l’utilisateur où enregistrer le fichier .json.
- La fonction FreeFile retourne un numéro de fichier pour créer et écrire dans le fichier.
- On utilise Open pour créer ou ouvrir le fichier, Print pour écrire la chaîne JSON dans le fichier, puis Close pour fermer le fichier.
Considérations supplémentaires
1. Gestion des différents types de données : Ce code suppose que toutes les données dans la feuille sont du texte. Si vous avez des nombres ou des dates, vous devrez peut-être ajuster le formatage avant de les ajouter à la chaîne JSON.
2. Grandes quantités de données : Si votre ensemble de données est très volumineux, vous pourriez envisager d’optimiser le code ou de traiter les données par morceaux pour éviter les problèmes de mémoire.
3. Gestion des erreurs : Pour un code de production, il est conseillé d’ajouter une gestion des erreurs afin de garantir que les opérations sur les fichiers et le traitement des données sont robustes.
4. Personnalisation : Si vous souhaitez structurer le JSON de manière hiérarchique ou imbriquée, vous devrez modifier la logique pour regrouper les données différemment (par exemple, par catégories ou par lignes liées).
Conclusion
Ce code offre une méthode détaillée pour exporter des données depuis Excel vers un fichier JSON en utilisant VBA. En lisant les données d’une feuille de calcul, en les convertissant au format JSON et en les enregistrant dans un fichier, cette solution peut être adaptée à différents cas d’utilisation où les données doivent être exportées depuis Excel dans un format structuré et largement utilisé comme le JSON.