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.
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
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,
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é
Quelle réactivité, en effet j’ai fait quelques modifs 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,
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
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 !