Eclater une colonne par niveau

Bonsoir,

J'aurais besoin de votre aide pour du VBA sur Excel

Je souhaite créer une hiérarchie en fonction des 2 colonnes.

Mon exemple ci dessous sera certainement plus parlant

Exemple :

J'ai un tableau avec 2 colonnes (tableau à gauche)

Je souhaite que la macro VBA automatise la création du tableau de droite (résultat par hiérarchie attendu)

Est ce possible selon vous ?

RubriqueCaracRubriqueNiv1Niv2Niv3Niv4Niv5Niv6Niv7Niv8
A1A1A1A1
A2A1A2A1
A3A1A3A1
A4A3A4A1A3
B1B1B1B1
B2B1B2B1
B3B2B3B1B2
B4B3B4B1B2B3
B5B4B5B1B2B3B4
B6B3B6B1B2B3

Merci infiniment pour votre aide

Voici le tableau et le résultat sur excel

3exemple.xlsx (12.49 Ko)

Salut,

Ces macros devraient faire l'affaire :

Option Explicit

Sub Eclatement()
    Dim i As Integer, j As Byte, Carac As String

    Call Effacer

    Range("B2:C2").Copy Range("F2")

    For i = 3 To Range("B" & Rows.Count).End(xlUp).Row
        If Left(Range("B" & i), 1) = Left(Range("B" & i - 1), 1) Then
            Range("F" & i) = Range("B" & i)
            Carac = Range("C" & i)
            For j = 7 To 14 ' Colonnes G à N
                If Cells(i - 1, j) = "" Then
                    Cells(i, j) = Carac
                    GoTo Etiquette
                ElseIf Cells(i - 1, j) = Carac Then
                    Cells(i, j) = Carac
                    GoTo Etiquette
                Else
                    Cells(i, j) = Cells(i - 1, j)
                End If
            Next j
        Else
            Range("B" & i & ":C" & i).Copy Range("F" & i)
        End If
Etiquette:
    Next i

End Sub

Sub Effacer()
    Range("F2:N" & Rows.Count).ClearContents
End Sub

Cordialement

11essai-11.xlsm (25.62 Ko)

Cest parfait le code fonctionne super bien

J'ai une demande supplémentaire

Est il possible d'ajouter des libellés lors de l'éclatement ?

je ne m'en sors pas à l'ajouter à votre code

RubriqueCaracRubriqueNiv1Niv2Niv3
A1MaisonG1Texte1
A2FenetreG1Texte1
A3PapierG1Texte1
A4StyloG2Texte2
B1FeutreX1Texte3
B2MurX1Texte3
B3BriqueX1Texte3
B4OrX2Texte4
B5SelX4Texte5
B6PoivreX3Texte6

Par ailleurs, juste une petite question, faut il prévoir le nombre de niveau à l'avance où peut-on les déterminer en fonction des 2 colonnes ?

(cette question est un petit plus)

Peux-tu me fournir un fichier avec ces libellés (et des titres pour ces colonnes de libellés) ainsi que le résultat voulu, comme la première fois ?

Le nombre de niveaux pourrait être trouvé par la macro. Peux-tu me fournir les résultats souhaités pour deux situations avec des nombres de niveaux différents ?

Amicalement

Bonsoir,

Je m'excuse mais mon besoin a changé

J'ai un tableau avec 2 colonnes (tableau à gauche). A la différence de ma demande initiale pas besoin de copier la colonne rubrique. La carac vide correspond au Niv1.

Je souhaite que la macro VBA automatise la création du tableau de droite (résultat par hiérarchie attendu). Sachant que le nombre de niv est en fonction des 2 colonnes. Est il possible de les créer par la macro (si trop compliqué pas grave)

RubriqueCaracNiv1Niv1 LibelléNiv2Niv2 LibelléNiv3Niv3 LibelléNiv4Niv4 LibelléNiv5Niv5 Libellé
U1Rubrique1 U1Rubrique1
U2Rubrique2U1Rubrique1U1Rubrique1U2Rubrique2
U3Rubrique3U2Rubrique2U1Rubrique1U2Rubrique2U3Rubrique3
U4Rubrique4 U4Rubrique4
U5Rubrique5U4Rubrique4U4Rubrique4U5Rubrique5

Merci beaucoup pour votre aide tres préciseuse

Salut,

Dans le premier exemple que tu m'as fourni lundi à 18 heures 57, tu avais des données dans ta colonne B qui étaient reportées sans modification dans la colonne F, puis les niveaux commençaient à la colonne G et il était relativement aisé de comprendre ta logique selon ton exemple.

Puis tu as inscrit un exemple directement sur ton fil le lundi à 22 heures 30 dans lequel la première colonne sans titre – la colonne C ? – comporte des mots bien différents (maison, fenêtre, etc.) de la colonne suivante sans titre (la colonne E ? Texte 1, Texte 2, etc.).

Puis dans le dernier exemple que tu me fournis, les colonnes C et E comportent des noms identiques qui prêtes à confusion et les données de la colonne B ne sont pas reportées dans la colonne H de la même manière que sur ton exemple de lundi 18:57. Est-ce parce que tu ne t'es pas donné la peine de créer un nouveau fichier représentatif de la réalité ou est-ce que ça correspond plus à la réalité que tes exemples précédents ?

Quoi qu'il en soit, je n'ai pas l'envie de travailler d'une manière aussi approximative. Soit tu te donnes la peine de créer un fichier qui tient la route (je t'avais demandé des titres de colonnes également) et qui me permets de comprendre ta philosophie et ton besoin, soit je laisse tomber.

Dans ton exemple sur la base duquel je t'ai fourni ma première réponse, il était aussi très clair comment on revenait ''en arrière d'un niveau'' (sur la ligne 11). Si ceci est nécessaire, place un exemple clair qui montre ton souhait à ce sujet.

Amicalement.

Rechercher des sujets similaires à "eclater colonne niveau"