Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

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
519
Réponses
5
Affichages
142
Réponses
9
Affichages
397
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…