Ignorer les lignes masquées

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,

bonjour,

le plus facile, c'est de copier la plage (visible et invisible) et de la coller dans une plage auxiliaire. Comme ça, il ne reste que les cellules visible et avec cela on continue ... .

Mais sans fichier, c'est difficile à expliquer

Bonjour BsAlv,

Je vais essayé de faire comme vous dites.

Merci !

re,

j'ai peur de la construction "rng.Value2(dataLoop, headerLoop)", avec ce dataloop & headerloop après "value2", je n'avais pas encore vu cela.

Autrement, vous pouvez ajouter une ligne complète en une fois, sans boucler les colonnes avec une commande "Join" avec un séparateur adapté.

N'avez-vous pas une plage exemplaire avec des cellules "JSON" que vous voulez joindre comme ca ?

En fait ce code sélectionne tout le tableau a partir de la cellule A14 et le converti en JSON, donc il est possible de prendre n'importe quel tableau pour exécuter cette macro.

N'avez-vous pas une plage exemplaire avec des cellules "JSON" que vous voulez joindre comme ca ? 

c'est à dire ?

re,

supposons que les données pour votre string JSON est la plage A1:M25 avec quelque lignes masquées.

En AA1 et AA3 le résultat avec votre et ma méthode, pour le moment uniquement avec FlgHeader=false.

Ce soir, je l'adapte pour "FlgHeader=true" fonctionne aussi.

20joannn1.xlsb (28.32 Ko)

BsAlv,

J'ai fais quelques tests avec ce que vous m'avez dis et c'est bon ça fonctionne. Mon code JSON ne sélectionne plus les lignes masquées

Je vous remercie !

Cordialement,

re,

maintenant aussi avec "FlgHeader=true" dans la fonction personnalisée "Excel2JSON". Il y a un MFC pour vérifier si les 2 cellules sont égales.

9joannn1.xlsb (30.27 Ko)

Merci BsAlv pour l'aide que vous m'avez apporté !

Bien cordialement,

Rechercher des sujets similaires à "ignorer lignes masquees"