Vba : concatener des données

Résolu
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -  
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour

J'espère que vous allez bien. Petit souci de mon côté. Je ne suis pas une experte en VBA, je tiens à le souligner. J'ai trouvé le code dans un fichier poster sur un site d'aide. Je croyais qu'il faisait parfaitement ce dont j'avais besoin mais pas tout à fait. J'ai essayer de l'arranger : sans succès.
Si quelqu'un sait si il y a une solution merci à l'avance :)

Voici : Depuis un autre fichier j'importe dans la feuil9, une liste. Celle-ci contient
Dans la colonne A : le client (il peut y en avoir plusieurs), dans la colonne B, le numéro de séchoirs (c'est par cette données que je veux que les données se regroupent) dans la colonne c : l'épaisseur (il peut y en avoir plusieurs), la colonne D : essence (il peut y en avoir plusieurs).. il y a d'autre colonnes mais les autres ça va.
Dans la macro compile (module1) : ce que je veux faire c'est regrouper sur une seule ligne les infos par la colonne B. mais que quand il y en a plusieurs mais qui sont différentes qu'elles se mettent sur la même ligne mais séparé par -
Exemple : Avant
Wic 1-190 4/4 Érable
Cym 1-190 4/4 Érable
Wic 1-190 4/4 Plaine
Exemple : après
Wic-Cym 1-190 4/4 Érable-Plaine

Présentement ça me donne
Wic-Cym-Wic 1-190 4/4 Érable

Merci à l'avance et n'hésitez pas à communiquer avec moi si je n'ai pas été clair ou si vous avez besoin de précision

Voici mon code:
Sub Compile()
Dim Lg&, i%, x%

Application.ScreenUpdating = False

With Sheets("Feuil9")
Lg = Range("B" & Rows.Count).End(xlUp).Row
Range("i2:i" & Lg) = "x"
'--- tri colonne A ---
Range("a5:i" & Lg).Sort _
Key1:=Range("b2"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'---
For i = 2 To Lg ' à partir de la ligne 2
If Cells(i + 1, "b") = Cells(i, "b") Then ' Si j'ai Plusieurs fois le même séchoir
x = i

Do While Cells(x + 1, "b") = Cells(i, "b")
Cells(i, "a") = Cells(i, "a") & "-" & Cells(x + 1, "a")

If Cells(i, "c").Value <> Cells(i, "c") Then
Cells(i, "c") = Cells(i, "c") & "-" & Cells(x + 1, "c")
End If
If Cells(x + 1, "b") = Cells(i, "b") And Cells(i, "d").Value <> Cells(i, "d").Value Then
Cells(i, "d") = Cells(i, "d") & "-" & Cells(x + 1, "d")
Else
Cells(i, "d") = Cells(i, "d")
End If
Cells(i, "g") = Cells(i, "g") & "-" & Cells(x + 1, "g")

Cells(i, "h") = Cells(i, "h") + Cells(x + 1, "h")

Cells(x + 1, "i").ClearContents
x = x + 1
Loop ' je met un x dans la colonne i tant que le numéro de séchoir est le même dans la colonne b.
i = x ' les données qui n'ont pas de x dans la colonne i seront effacées
End If
Next i

On Error Resume Next
Range("i2:i" & Lg).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Columns("i").ClearContents
End With
End Sub


Je joint aussi mon fichier
https://mon-partage.fr/f/7DXfkhPe/

1 réponse

Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
Bonjour
Exécuter le programme avec le bouton "compiler". Pour refaire un essai avec le texte d'origine, cliquez sur "Récupérer texte d'origine"
https://www.cjoint.com/c/ECxh2rUhT5e
cdlt
1
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
 
Un énorme merci Frenchie83 ça fonctionne parfaitement!
C'est génial
0