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)

  • Initiateur de la discussion Initiateur de la discussion rdaniel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

R

rdaniel

Guest
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

Dernière modification par un modérateur:
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

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

Dernière édition:
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 😀
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
1
Affichages
115
Réponses
8
Affichages
297
Réponses
5
Affichages
696
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…