Organisation d'une feuille Excel

Bonjour à tous,

Voici mon problème : j'ai une feuille Excel qui est générée via une macro et ensuite cette feuille je dois la convertir en JSON mais ceci n'est pas le problème puisque j'ai déjà le VBA qu'il me faut pour le convertir.

Le problème est que la mise en forme ne me convient pas lorsque je veux convertir en JSON le fichier possède des saut de lignes. Et je ne veux pas que cela apparaisse au moment ou je converti en JSON car cela me note des (":") et ca fausses le fichier. Voici un exemple de mise en forme que je vous parle (Classeur20)

Moi j'aimerai avoir une mise en forme du style (classeur30) c'est à dire qu'il n'y ai pas de saut de ligne inutile et qui fausse la conversion en JSON.

Merci d'avance de votre aide.

Cordialement,

6classeur30.xlsx (8.70 Ko)
7classeur20.xlsx (8.70 Ko)

Bonjour,

Vous pratiquez le VBA, je vous propose un algorithme (sans le code) à partir de votre exemple :
Démarrer une boucle à partir de la ligne qui suit l'en-tête du tableau jusqu'à la dernière ligne renseignée
Genre courant <- Genre de la ligne (ici fiction)

- For i = 2ème ligne Tableau To dernière ligne
si Séries et film vide (suppression de la ligne)
si Genre de la ligne suivante vide alors
Genre de la ligne <- Genre Courant
sinon
Genre courant <- Genre de la ligne
- Next i
en sortie de boucle, Tri du tableau sur la colonne D

Et, si vous n'êtes pas familier du VBA, vous pouvez utiliser l'enregistreur de macro (utile pour la suppression de la ligne et le tri°

Sinon, je pourrai vous produire le code

image

Bonjour,

Je débute depuis pas longtemps dans le VBA et je ne maitrise pas trop :/

Merci pour l'algorithme.

Cordialement,

Avez-vous besoin d'aide ?
Votre exemple est-il complet en terme de cas et de colonnes ?
3 colonnes seulement : genre série film ?
Série et film sont toujours sur la même ligne ?
sinon, peut-on avoir série avant film seulement ou film avant série ?
peut-il y avoir des lignes blanches intercalées ?
y a-t-il autre d'autres colonnes ?
Votre tableau démarre-t-il toujours à la même ligne / colonne ?
Ces informations sont nécessaires si vous souhaitez automatiser par macro.
Le plus simple serait de mettre un fichier avec tous les cas possible et la disposition sur la feuille.

En termes de colonnes non il y en a plus dans la vraie feuille c'était juste pour un exemple

ensuite, oui séries et films sont sur la même ligne tout le temps

je ne souhaite pas qu'il y ai de case vides j'aimerais que tout soit ensemble pour éviter de retrouver ces cases vides dans mon format JSON

Oui il y a d'autres colonnes.

Le fichier ressemble à ça et les lignes blanche sont gênantes.

Vous voyez le fichier généré par la macro ressemble à ça mais en fait les deux ligne "fruit" et "fournisseur" produisent des lignes vide en dessous des "oui" et ce sont ces lignes qui me dérange. et en fait j'aimerais qu'à partir de ce fichier je puisse faire une macro pour obtenir un fichier avec les même infos mais sans ces lignes vide.

Dans votre dernier exemple, le tableau n'a pas de trous, où alors je n'ai pas bien compris

image

voilà le code, j'ai testé bien sûr, mais faites vos propres tests.

Le code n'est pas très bon car il va supprimer des valeurs résiduelles au-dessous du tableau dans la colonne 1 (A12,A13...) si dans la ligne du tableau (B,C,D) tout est vide, mais normalement, çà ne doit pas arrivé vu la constitution de votre tableau

Le fichier doit être transformé en .xlsm ou la macro doit être incluse dans un xlsm qui va pointer sur votre fichier. Code à ajouter dans ce cas
Le tableau complet (avec les en-têtes doit être nommé TABLEAU)

Sub ActualiserTableau()
Dim i As Integer
Dim j As Integer
Dim Vide As Boolean
Dim Memo() As String
    With Range("TABLEAU")
        ReDim Memo(.Columns.Count)
        Sheets("Liste").Activate
        For i = 2 To .Rows.Count
            For j = 1 To .Columns.Count
                If j = 1 Then
                    If .Cells(i, j) = "" Then
                        .Cells(i, j) = Memo(j)
                    Else
                        Memo(j) = .Cells(i, j)
                    End If
                End If
            Next j
        Next i
    End With
    'boucle de suppression
    With Range("TABLEAU")
        For i = 2 To .Rows.Count
            Vide = True
            For j = 2 To .Columns.Count
                If .Cells(i, j) <> "" Then Vide = False
            Next j
            If Vide Then
            'si reste colonnes vide, on supprimer
                Range(.Cells(i, 1), .Cells(i, .Columns.Count)).Select
                Selection.Delete Shift:=xlUp
            End If
        Next i
    End With

End Sub

Merci beaucoup pour votre aide je vais tester le code,

par rapport au case vide je parle de la case B4 à D5 c'est ces lignes vides qui me posent problème,

je vais tester le code et je reviens vers vous d'ici quelques jours le temps de bien tester le code comme il me convient,

Merci beaucoup en tout cas pour votre aide,

çà ne peut pas marcher en l'état.
A cause des cellules fusionnées en en-tête !
D'où, il est important de fournir un fichier qui est le reflet du fichier réel ...

Mon code est en partie inutile et n'est pas adapté à votre dernier exemple.Finalement, ce que vous souhaitez, c'est supprimer les lignes 4 et 5 ?
Avec un test du genre si pour ligne courante, A renseigné et le reste des colonnes vide, supprimer la ligne ?

Oui c'est possible, il faudra juste modifier le code vba qui créer ce fichier mais c'est possible oui.

nos réponses se croisent, vous pouvez répondre à ma dernière.
Je complète : allez-vous intervenir manuellement entre la réception de votre fichier et l'envoi JSON ?
Sinon, et si le tableau a TOUJOURS la même position, inutile de nommer la plage "TABLEAU", on travaille en dur dans le code VBA en considérant que :
Le tableau démarre en A4, se finit en colonne D et va jusqu'à la dernière ligne non vide de la feuille.

j'aimerais que ca intervienne automatiquement avec la macro mais si c'est impossible alors le faire manuellement.

ca répond a votre question ?

à une oui, mais pas aux autres.

oui si il y a une case vide il faut soit qu'elle soit supprimé soit qu'elle ne soit pas pris en compte dans le fichier JSON

ce n'est pas de supprimer la ligne 4 et 5 car elles sont important mais le fait qu'elles soient présentes dans le fichier pour définir un titre cela créer des ligne vides comme on peut le voir et c'est ceci qui est gênant.

Désolé, je ne comprends pas vous dites

ce n'est pas de supprimer la ligne 4 et 5 car elles sont important mais le fait qu'elles soient présentes dans le fichier pour définir un titre cela créer des ligne vides comme on peut le voir et c'est ceci qui est gênant.

Il ne faut pas les supprimer, mais elles génèrent des lignes vides ...
Envoyez un fichier avec sur la feuille, ce que vous avez en entrée et au-dessous, ce que vous souhaitez par macro.

En fait vous voyez lorsque la ligne 4 et 5 sont crées ? elles sont créer pour définir un titre, le problème c'est que ce titre comme il N'est pas sur les même lignes que "oui" et "producto" et bien le reste de la ligne est en case vides (toutes la ligne 4 et 5) du coup quand je vais générer mon code JSON cela va créer des caractères vides entre tout les "oui" et les "hhhh", "iiiiii" et "3kn" et je voudrait que les caractères vides ne soient pas afficher lors de la conversion en JSOn

Encore une fois,

Envoyez un fichier avec sur la feuille, ce que vous avez en entrée et au-dessous, ce que vous souhaitez obtenir par macro.

Ce qui pour vous est évident ne l'est pas forcément pour un tiers.

Par exemple, avez-vous besoin des titres ?

Je vous invite à relire la charte du forum Ici

voici un exemple,

Cordialement,

5exemple.xlsx (9.87 Ko)

Quelques remarques par rapport à votre dernier fichier :
C4 à C6 doivent être fusionnées.
D4 à D6 , F4 à F6, G4 à G6 sont fusionnées mais pas E4, E5, E6.
Cela ne doit pas faciliter le code vba pour la conversion JSON.
Je ne comprenais pas pourquoi mon code en cours ne fonctionnait pas pour le test cellule vide et je viens de voir que dans votre fichier, en G8, il y a

=G4

il y a Typo Caja , mais on ne le voit pas car la police est En vert sur fond vert !!!
Vous ne me facilitez pas la tâche !

Je suis désolé je n'avais pas vu ce détail

merci pour l'aide que vous me fournissez !

Voici mes dernières corrections.

10classeur20-clr.xlsm (18.49 Ko)

Voir la feuille "Test" où j'ai supprimé la formule = G4.

Le tableau est supposé débuter en D4 sinon adapter le code VBA

Set DebutTableau = ActiveSheet.Range("D4")
Rechercher des sujets similaires à "organisation feuille"