Bonjour à tous,
j'ai un code VBA qui me va très bien le voici :
Option Explicit
Sub SaveJSONToFile(ByVal jsonString As String, ByVal filePath As String)
' Créer un nouveau fichier et écrire la chaîne JSON dedans
Dim fileObject As Object
Set fileObject = CreateObject("Scripting.FileSystemObject").CreateTextFile(filePath)
fileObject.WriteLine jsonString
fileObject.Close
End Sub
Sub JSON_QUI_MARCHE()
Dim jsonString1 As String, jsonString2 As String, finalJsonText As String
Dim sPathFile As String
' Définir le chemin et le nom du fichier JSON
sPathFile = "C:\Users\joanpla\Desktop\Fichier_JSON.json"
' Sélectionner la première plage de données (U6:V13)
Dim firstRange As Range
Set firstRange = Sheets("PROGRAMA LACOUR (2)").Range("U6:V13")
' Convertir les données Excel de la première plage en chaîne JSON sans en-tête
jsonString1 = ExcelToJSON(firstRange, False)
' Sélectionner la deuxième plage de données à partir de A12
Dim secondRange As Range
With Sheets("PROGRAMA LACOUR (2)")
Dim lastRow As Long, lastColumn As Long
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
lastColumn = .Cells(12, .Columns.Count).End(xlToLeft).Column
Set secondRange = .Range("A14", .Cells(lastRow, lastColumn))
End With
' Convertir les données Excel de la deuxième plage en chaîne JSON avec en-tête
jsonString2 = ExcelToJSON(secondRange, True)
' Combiner les données JSON existantes et nouvelles
finalJsonText = "[" & jsonString1 & "," & jsonString2 & "]"
' Enregistrer la chaîne JSON dans un fichier
SaveJSONToFile finalJsonText, sPathFile
End Sub
Public Function ExcelToJSON(rng As Range, FlgHeader As Boolean) As String
Dim dataLoop As Long, headerLoop As Long
Dim headerRange As Range
Dim ColCount As Long
Dim json As String, jsonData As String
' Vérifier s'il y a au moins deux colonnes dans le fichier Excel
If rng.Columns.Count < 1 Then
ExcelToJSON = CVErr(xlErrNA)
Exit Function
End If
' Obtenir la première ligne du fichier Excel en tant qu'en-tête
Set headerRange = Range(rng.Rows(1).Address)
' Compter le nombre de colonnes du fichier Excel ciblé
ColCount = headerRange.Columns.Count
json = "["
For dataLoop = 1 To rng.Rows.Count
' Vérifier si la ligne est visible
If rng.Rows(dataLoop).Hidden = False Then
' Début de la ligne de données
jsonData = "{"
' Parcourir chaque colonne et les combiner avec l'en-tête
For headerLoop = 1 To ColCount
If FlgHeader Then
If dataLoop > 1 Then
jsonData = jsonData & """" & headerRange.Value2(1, headerLoop) & """" & ":"
jsonData = jsonData & """" & rng.Value2(dataLoop, headerLoop) & """"
jsonData = jsonData & ","
End If
Else
jsonData = jsonData & """" & rng.Value2(dataLoop, headerLoop) & """"
jsonData = jsonData & ","
End If
Next headerLoop
' Supprimer la virgule dans la dernière valeur de chaque ligne
jsonData = Left(jsonData, Len(jsonData) - 1)
' Fin de la ligne de données
If jsonData <> "" Then json = json & jsonData & "},"
End If
Next dataLoop
' Supprimer la dernière virgule de la dernière ligne des données Excel
json = Left(json, Len(json) - 1)
json = json & "]"
ExcelToJSON = json
End Function
Function SelectRange() As Range
Dim selectedRange As Range
On Error Resume Next
Set selectedRange = Application.InputBox("Sélectionnez votre plage", "Plage de la macro", Type:=8)
On Error GoTo 0
Set SelectRange = selectedRange
End Function
Le problème c'est que lors de la conversion il sélectionne également les lignes qui sont masquées alors que moi je voudrais qu'il prenne en compte seulement les lignes qui sont afficher dans mon tableau.
Pouvez-vous m'aider s'il vous plaît ??
Cordialement,