Modifier une liste (genre base de données)

rdaniel

XLDnaute Nouveau
Bonjour,:)
j'ai une grande liste a réorganiser de la manière suivante:

Liste départ:

1 Tata; toto; Titi
2 Lala; lolo;


Liste transformée:

1 Tata
1 toto
1 Titi
2 Lala
2 lolo


je joint un petit fichier... merci
 

Pièces jointes

  • Liste1.xlsx
    11.6 KB · Affichages: 59
  • Liste1.xlsx
    11.6 KB · Affichages: 63
  • Liste1.xlsx
    11.6 KB · Affichages: 61
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Modifier une liste (genre base de données)

Bonsoir Daniel, bonsoir le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim d As Range 'déclare la variable d (cellule de Destination)

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    .Range("D1").CurrentRegion.Clear 'efface les éventuelles anciennes données
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne dl de la colonne 1 (=A)
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
    .Range("A1:B1").Copy .Range("D1") 'copy la plage A1:B1 et la colle en D1
    For Each cel In pl 'boucle 1 : sur toutes les cellules cel de la plage pl
        For i = 0 To UBound(Split(cel.Offset(0, 1).Value, ";")) 'boucle 2 : sur toutes les mots délimités entre les points-virgule
        Set d = .Cells(Application.Rows.Count, 4).End(xlUp).Offset(1, 0) 'définit la cellule de destination d
            d.Value = cel.Value 'place la valeur de la cellule cel dans d
            d.Offset(0, 1).Value = Split(cel.Offset(0, 1).Value, ";")(i) 'récupère le nom entre deux points-virgule
        Next i 'prochain mot de la boucle 2
    Next cel 'procaine cellule de la boucle 1
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
Le fichier :
 

Pièces jointes

  • Daniel_v01.xls
    48 KB · Affichages: 48

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Modifier une liste (genre base de données)

Bonsoir,


Code:
Sub essai()
  Set d1 = CreateObject("scripting.dictionary")
  For Each c In Range("a2:a" & [a65000].End(xlUp).Row)
    a = Split(c.Offset(, 1).Value, ";")
    For Each m In a: d1(m) = c: Next m
  Next c
  [i2].Resize(d1.Count) = Application.Transpose(d1.keys)
  [h2].Resize(d1.Count) = Application.Transpose(d1.items)
End Sub

jb
 

Pièces jointes

  • Copie de Liste1.xls
    43 KB · Affichages: 56
Dernière édition:

rdaniel

XLDnaute Nouveau
Re : Modifier une liste (genre base de données)

Bonsoir Robert :)
Merci pour cette réponse rapide et fonctionnelle.
Je vais me remettre au VBA que j'ai laissé depuis de nombreuses années
Mais comme le code est documenté cela devrait aboutir.
Si j'ai des questions sur ce code je ne manquerais pas de te questionner si tu as du temps bien sûr.
Merci encore :D
 

rdaniel

XLDnaute Nouveau
Re : Modifier une liste (genre base de données)

Bonsoir J. B.
Merci pour cette réponse rapide et fonctionnelle.
Ayant arrêter le vba depuis longtemps (et la programmation en générale),
pourriez-vous me renvoyer le code un peu documenté, si cela ne vous dérange pas trop bien sûr, car j'aimerais mieux comprendre le code.
Merci beaucoup
Daniel
 

Discussions similaires

Réponses
2
Affichages
486

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG