Répartir informations dans une même cellule en plusieurs lignes

Bonjour,

Nouveau sur le forum, j’aurai réellement besoin de votre aide car je sèche complètement …

Désolé pour ce nom qui est pas forcément très compréhensible mais voici ma problématique, je désirerai éclater une cellule / lignes contenant des mots ou expressions plus ou moins longs séparés par des virgules en plusieurs lignes et également réussir à annoter un numéro d’ID (recette) et une référence (source) de ligne sur chacune de ces lignes nouvellement crées.

Exemple en B2 : Tomate, Cerise, Poivron Vert, Courgette, Haricot Rouge
et en A2 : Recette 1 (ID) et C2 : Marché, Grande Surface (Source)

Je souhaiterai avoir sur une autre feuille et dans l’idéal en ne recourant qu’à des formules :
A2 : Recette 1 / B2 : Tomate / C2 : Marché
A3 : Recette 1 / B3 : Cerise / C3 : Marché
A4 : Recette 1 / B4 : Poivron Vert / C4 : Marché
A5 : Recette 1 / C5 : Courgette / C5 : Marché
A6 : Recette 1 / C6 : Haricot Rouge / C6 : Marché
A7 : Recette 1 / B7 : Tomate / C7 : Grande Surface
A8 : Recette 1 / B8 : Cerise / C8 : Grande Surface
A9 : Recette 1 / B9 : Poivron Vert / C9 : Grande Surface
A10 : Recette 1 / B10 : Courgette / C10 : Grande Surface
A11 : Recette 1 / B11 : Haricot Rouge / C11 : Grande Surface

Vous trouverez ci-après un fichier résumant ma demande qui je le pense serait plus explicite.

Merci par avance pour votre aide,

Quentin

Tableau_donnees_eclatees.xlsx (16,2 Ko)

Bonjour,

Que de question?

https://www.developpez.net/forums/d1816203/logiciels/microsoft-office/excel/repartir-informations-meme-cellule-plusieurs-lignes/

A tester

Public Sub SeparationEnLignes()
    Dim feuilleSource As Worksheet, feuilleCible As Worksheet
    Dim iSource%, iCible%, i%, j%, Dl%
    Dim currentA$, currentB$, currentC$, Tri$
    Dim currentSplit1() As String, currentSplit2() As String
    Application.ScreenUpdating = False
    Set feuilleSource = Worksheets("Data") 'A modifier, la feuille contenant les données originales
    Set feuilleCible = Worksheets("Tableau_désiré") 'A modifier, la feuille où l'on veut le résultat
    Sheets("Tableau_désiré").Activate
    'Initialisation des compteurs de lignes
    iSource = 1
    iCible = 1
    
    'Tant qu'il y a qq chose en colonne A
    Do While feuilleSource.Cells(iSource, "A").Value <> "" 'Tant qu'il y a qq chose en colonne A
        currentA = feuilleSource.Cells(iSource, "A").Value
        currentB = feuilleSource.Cells(iSource, "B").Value
        currentC = feuilleSource.Cells(iSource, "C").Value
        'On décompose la chaine par les virgules
        currentSplit1 = Split(currentB, ",") 'Colonne B
        currentSplit2 = Split(currentC, ",")  'Colonne C
        'Pour chaque élément, on l'écrit dans la feuille cible
        For i = 0 To UBound(currentSplit1)
            feuilleCible.Cells(iCible, "A").Value = currentA
            feuilleCible.Cells(iCible, "B").Value = LTrim(currentSplit1(i)) 'En enlevant les espaces à gauche
          For j = 0 To UBound(currentSplit2) 'boucle en col A & B & C
              feuilleCible.Cells(iCible, "A").Value = currentA
              feuilleCible.Cells(iCible, "B").Value = LTrim(currentSplit1(i)) 'En enlevant les espaces à gauche
              feuilleCible.Cells(iCible, "C").Value = LTrim(currentSplit2(j)) 'En enlevant les espaces à gauche
              iCible = iCible + 1
          Next j
        Next i
        iSource = iSource + 1
    Loop
    'TRI
    Dl = Range("A" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne A
    Tri = "Tableau_désiré" 'Nomme la variable avec nom de l'onglet
    Range("A1:C1").Select
    ActiveWorkbook.Worksheets(Tri).Sort.SortFields.Clear 'Effectue un Tri
    ActiveWorkbook.Worksheets(Tri).Sort.SortFields.Add Key:=Range( _
        "A2:A" & Dl), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal '1er Tri sur colonne A en ordre croissant
    ActiveWorkbook.Worksheets(Tri).Sort.SortFields.Add Key:=Range( _
        "C2:C" & Dl), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal '2ème Tri sur colonne C en ordre décroissant
    With ActiveWorkbook.Worksheets(Tri).Sort 'Applique le Tri
        .SetRange Range("A1:C" & Dl)
        .Header = xlYes
        .Apply
    End With
    Application.ScreenUpdating = True
    Sheets("Data").Activate
    Range("A1").Select
End Sub

Tableau_donnees_eclatees.xlsm (25,3 Ko)

1 « J'aime »

Bonjour,

Je viens de prendre connaissance de ton fichier c’est top @Mimimathy

Il y a un point que j’ai réussi à voir par moi même, cela concerne la rédaction du contenu de la cellule B (ingrédients), faisant appel à une fonction concatener (mais comment gérer les trous dans la liste qui posent un problème lors de la ré-écriture).

Par contre, j’aurai également deux petites questions, est-ce que on pourrait imaginer que le tableau s’agrandissent tout seul sans être obligé d’étirer les cellules. Vois-tu d’ailleurs également une autre solution sans être obligé de passer via une macro, dans l’idéal il faudrait que le fichier puisse s’actualiser sans action humaine.

D’autre part, est-ce que l’on pourrait si je rajoute une autre colonne (D) par exemple avec la commande faite ou non saisir automatiquement dans la colonne (E - F - G - H) la data / heure au moment ou cela a été fait ?

J’essai de trouver une solution de mon côté également mais je sèche un peu …
Merci par avance pour ton aide,

Bonne réception,

P.S Ci-joint le fichier à nouveau :slight_smile:

Tableau_donnees_eclatees.xlsm (27,0 Ko)

Bonjour,
Mon classeur fonctionne très bien,
Regarde l’onglet TABLEAU DESIRE, il est vide
si tu regardes dans l’onglet TABLEAU DESIRE après appui sur le bouton transfert,
Regarde l’onglet TABLEAU DESIRE, il est rempli

Alors si ce n’est pas à cet endroit que les données doivent se placer, je ne peut le savoir si c’est pas précisé

Teste et dis-moi

Bonjour,

Quelle réactivité, en effet j’ai fait quelques modifs :slight_smile:
Tableau_donnees_eclatees.xlsm (27,0 Ko)
Je viens de prendre connaissance de ton fichier c’est top @Mimimathy

Il y a un point que j’ai réussi à voir par moi même, cela concerne la rédaction du contenu de la cellule B (ingrédients), faisant appel à une fonction concatener (mais comment gérer les trous dans la liste qui posent un problème lors de la ré-écriture).

Par contre, j’aurai également deux petites questions, est-ce que on pourrait imaginer que le tableau s’agrandissent tout seul sans être obligé d’étirer les cellules. Vois-tu d’ailleurs également une autre solution sans être obligé de passer via une macro, dans l’idéal il faudrait que le fichier puisse s’actualiser sans action humaine.

D’autre part, est-ce que l’on pourrait si je rajoute une autre colonne (D) par exemple avec la commande faite ou non saisir automatiquement dans la colonne (E - F - G - H) la data / heure au moment ou cela a été fait ?

J’essai de trouver une solution de mon côté également mais je sèche un peu …
Merci par avance pour ton aide,

Bonne réception,

P.S Ci-joint le fichier à nouveau :slight_smile:

Re,

Vu que tu ne tiens pas compte de mes remarque de ma première réponse, à savoir qu’il n’est pas nécessaire de poser la même question sur plusieurs forum, et que insiste

Pour moi, le sujet est clos

@Mimimathy,

Je ne comprends pas forcément ta réaction même si je la respecte.
J’ai suivi toutes les indications que tu m’as gentiment fournis jusqu’à maintenant pour avancer et tenter de trouver une solution à ma requête.

D’autre part à aucun endroit tu ne fais mention sur le fait de fermer les autres feeds.

Nouveau sur ces plateformes, il y a du lobbying d’un forum à un autre ? Que plusieurs personnent répondent dans le même feed ou que tout soit centralisé au même endroit cela change-t-il réellement quelque chose ?

L’échange est la base du partage de connaissances. Je peux faire le lien entre les différents forums si tu le désires, cela ne me pose aucun problème et mon intention n’est quoi que tu puisses en penser pas mauvaise ! :wink: