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 ?
| Rubrique | Carac | Rubrique | Niv1 | Niv2 | Niv3 | Niv4 | Niv5 | Niv6 | Niv7 | Niv8 | ||
| A1 | A1 | A1 | A1 | |||||||||
| A2 | A1 | A2 | A1 | |||||||||
| A3 | A1 | A3 | A1 | |||||||||
| A4 | A3 | A4 | A1 | A3 | ||||||||
| B1 | B1 | B1 | B1 | |||||||||
| B2 | B1 | B2 | B1 | |||||||||
| B3 | B2 | B3 | B1 | B2 | ||||||||
| B4 | B3 | B4 | B1 | B2 | B3 | |||||||
| B5 | B4 | B5 | B1 | B2 | B3 | B4 | ||||||
| B6 | B3 | B6 | B1 | B2 | B3 |
Merci infiniment pour votre aide
Voici le tableau et le résultat sur excel
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 SubCordialement
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
| Rubrique | Carac | Rubrique | Niv1 | Niv2 | Niv3 | |||||||
| A1 | Maison | G1 | Texte1 | |||||||||
| A2 | Fenetre | G1 | Texte1 | |||||||||
| A3 | Papier | G1 | Texte1 | |||||||||
| A4 | Stylo | G2 | Texte2 | |||||||||
| B1 | Feutre | X1 | Texte3 | |||||||||
| B2 | Mur | X1 | Texte3 | |||||||||
| B3 | Brique | X1 | Texte3 | |||||||||
| B4 | Or | X2 | Texte4 | |||||||||
| B5 | Sel | X4 | Texte5 | |||||||||
| B6 | Poivre | X3 | Texte6 |
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)
| Rubrique | Carac | Niv1 | Niv1 Libellé | Niv2 | Niv2 Libellé | Niv3 | Niv3 Libellé | Niv4 | Niv4 Libellé | Niv5 | Niv5 Libellé | ||||
| U1 | Rubrique1 | U1 | Rubrique1 | ||||||||||||
| U2 | Rubrique2 | U1 | Rubrique1 | U1 | Rubrique1 | U2 | Rubrique2 | ||||||||
| U3 | Rubrique3 | U2 | Rubrique2 | U1 | Rubrique1 | U2 | Rubrique2 | U3 | Rubrique3 | ||||||
| U4 | Rubrique4 | U4 | Rubrique4 | ||||||||||||
| U5 | Rubrique5 | U4 | Rubrique4 | U4 | Rubrique4 | U5 | Rubrique5 |
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.