Vba : concatener des données

Résolu/Fermé
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 19 mars 2015 à 14:19
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 24 mars 2015 à 19:59
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
23 mars 2015 à 07:45
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 mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
24 mars 2015 à 19:59
Un énorme merci Frenchie83 ça fonctionne parfaitement!
C'est génial
0