Dissocier et réorganiser des données

Bonjour,

J'aurai besoin d'un petit coup de main. Je suis loin d'être un expert sous excel, je sais l'utiliser tout simplement.

Voila j'ai des lignes de données à traiter. Les données sont assemblées dans la première colonne et associées aux colonnes suivantes.

Avec la fonction convertir, je dissocie les données, mais je suis incapable de les remettre en colonne et que chaque élément soit associé à ces éléments.

Je joints un fichier excel avec mon point de départ et ce que je cherche à obtenir en feuille 3.

Je reste à votre disposition pour toute question.

Merci pour votre aide éventuelle.

Laurent.

20essai-donnees.xlsx (9.72 Ko)

Bonsoir et bienvenue

Avec une macro

Amicalement

Nad

Merci beaucoup Nad pour ton aide.

Est-il possible que tu m'expliques comment tu as fais ?

Car mon fichier est un exemple seulement.

Les données que je vais traiter comporte au moins 500 lignes en moyenne...

Puis-je copier coller la macro dans d'autres feuilles excel ? La macro créee marche-t-elle sous OpenOffice Calc ?

Bonne soirée, merci.

Laurent.

Laur74 a écrit :

Est-il possible que tu m'expliques comment tu as fais ?.

Tu peux voir le code en faisant ALT + F11
Laur74 a écrit :

Les données que je vais traiter comporte au moins 500 lignes en moyenne...

La macro s'adapte au nombre de lignes de la feuille
Laur74 a écrit :

Puis-je copier coller la macro dans d'autres feuilles excel ?

La macro est dans un module - Il suffit de l'affecter à un bouton comme je l'ai fait dans la feuille "départ"

IMPORTANT ! Modifier les noms des feuilles si nécessaire Sheets("départ") et Sheets("arrivée")

Laur74 a écrit :

La macro créee marche-t-elle sous OpenOffice Calc ?.

Non

Amicalement

Nad

Merci, beaucoup.

Je vais essayer de comprendre comment sa marche.

Bonne fin de soirée.

Bonjour à nouveau,

Pourrais tu me rajouter des commentaires dans la macro pour m'expliquer comment tu as réaliser l'ensemble.

J'ai essayer de déplacer le bonton sans succès, et il faut que je rajoute des colonnes sans succès non plus.

J'ai compris tu réalise un boucle avec des conditions..mais bon.

Merci beaucoup.

Bonjour

Copie ce code ; les commentaires apparaitront en vert

Sub Lister()
Dim Lg As Integer
Dim c As Range
Dim Rep
Dim Mots As Object
Dim i As Byte
Application.ScreenUpdating = False

'Efface les données de la feuille arrivée à partir de la ligne 2
Sheets("arrivée").Range("A2:D65536").ClearContents

'Calcul de la dernière ligne non vide de la feuille départ (le code étant lancé depuis cette feuille)
Lg = Range("A65536").End(xlUp).Row

'Insertion d'une formule dans la colonne F de la feuille départ
'qui compte le nombre de virgules (donc le nombre de mots)
With Range("F1:F" & Lg)
.FormulaR1C1 = "=LEN(RC1)-LEN(SUBSTITUTE(RC1,"","",""""))+1"
.Value = .Value
End With

'Mise en mémoire de tous les mots séparés par une virgule
Set Mots = CreateObject("Scripting.Dictionary")

For Each c In Range("A1:A" & Lg)
    Rep = Split(c.Value, ",")
    For i = LBound(Rep) To UBound(Rep)
        If Rep(i) <> "" Then Mots(Trim(Rep(i))) = Trim(Rep(i))
    Next i
Next c

'Copie des mots dans la feuille arrivée
Sheets("arrivée").Range("A2").Resize(Mots.Count, 1).Value = Application.Transpose(Mots.Items)

'Copie des colonnes B (2) à F dans la feuille arrivée avec duplication des lignes suivant le nombre inscrit en colonne F (6)
For i = 1 To Range("A65536").End(xlUp).Row
    For j = 1 To Cells(i, 6).Value
        Cells(i, 2).Resize(, 5).Copy Sheets("arrivée").Range("B65536").End(xlUp).Offset(1, 0)
    Next j
Next i

'Efface la colonne F de la feuille départ
Sheets("départ").Range("F:F").Clear

'Affiche la feuille arrivée et efface la colonne F de la feuillearrivée
With Sheets("arrivée")
.Activate
.Range("F:F").Clear
End With
End Sub

Merci de ta réponse, je comprends ton raisonnement.

Dans cette ligne de commande :

'Copie des colonnes B (2) à F dans la feuille arrivée avec duplication des lignes suivant le nombre inscrit en colonne F (6)

For i = 1 To Range("A65536").End(xlUp).Row

For j = 1 To Cells(i, 6).Value

Cells(i, 2).Resize(, 5).Copy Sheets("arrivée").Range("B65536").End(xlUp).Offset(1, 0)

Next j

Next i

Que modifies-tu pour augmenter le nombre de colonnes ? Car au final j'ai plus de colonne que dans mon exemple.

Merci. Laurent.

Re

De la ligne 1 à la dernière ligne non vide

For i = 1 To Range("A65536").End(xlUp).Row

De 1 à la valeur inscrite en colonne F (6)

For j = 1 To Cells(i, 6).Value

A partir de B (2) on prend 5 colonnes (B vaut 1)

Cells(i, 2).Resize(, 5)

On copie dans la feuille arrivée

.Copy Sheets("arrivée")

Dans la 1ère cellule vide de la colonne B

.Range("B65536").End(xlUp).Offset(1, 0)

Nad

Super, j'ai compris le principe.

J'ai modifié en :

'Copie des colonnes B (2) à O dans la feuille arrivée avec duplication des lignes suivant le nombre inscrit en colonne O (15)

For i = 1 To Range("A65536").End(xlUp).Row

For j = 1 To Cells(i, 16).Value

Cells(i, 2).Resize(, 15).Copy Sheets("arrivée").Range("B65536").End(xlUp).Offset(1, 0)

Next j

Next i

J'ai fais un essai....Ca marche.

Un grand merci à toi, bonne fin de journée, je ne te dérange plus.

Laurent.

Rechercher des sujets similaires à "dissocier reorganiser donnees"