[VBA] Copier & concatener plage de cellule

johnmjs

XLDnaute Nouveau
Bonjour,

Tout d'abord merci pour ce forum qui m'a permis d'apprendre beaucoup. :)

Je vous expose mon problème :

- je dispose d'un tableau ou sont rentrés divers critères, je filtre ce tableau à l'aide d'un autofilter pour avoir les éléments qui m'intéressent (ceux qui ont une distance non nulle), jusque la ça va mon filtre fonctionne

- je souhaite ensuite recopier certaines colonnes filtrées sur une autre feuille de mon classeur, la encore cela fonctionne

- par contre je souhaiterai copier le concaténer le contenu de mes deux colonnes de commentaires afin d'afficher sur la seconde feuille dans la cellule appropriée commentaire1 : commentaire2

j'ai essayer avec un :
Sheets("Feuil1").Range("E7:F65534").SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Feuil2").[F6]
Malheureusement cela ne fonctionne pas, bon fallait s'y attendre :), cela me colle les deux colonnes dans des cellules distinctes

J'ai donc essayé avec une boucle :
For c = 9 To c = 65534 Step 1
Sheets("Feuil2").Range("F" & marqueur) = Sheets("Feuil1").Range("E" & c).SpecialCells(xlCellTypeVisible).Value & " : " & Sheets("Feuil1").Range("F" & c).SpecialCells(xlCellTypeVisible).Value
marqueur = marqueur + 1
Next c

Malheureusement cela ne fonctionne pas non plus, j'ai l'impression que l'on ne rentre pas dans la boucle, j'ai du rater quelque chose mais quoi?
Peut etre faut il faire autrement, merci de vos lumières, parce que la je galère...

Je joins mon fichier et ma macro pour que ce soit plus clair
 

Pièces jointes

  • exempletest.xls
    28 KB · Affichages: 167
  • exempletest.xls
    28 KB · Affichages: 176
  • exempletest.xls
    28 KB · Affichages: 192

Cousinhub

XLDnaute Barbatruc
Re : [VBA] Copier & concatener plage de cellule

Bonjour,

peut-être ainsi :

Code:
Sub FiltreCopie()
Dim plageBase As Range
Dim Cel As Range
Dim I As Byte
Dim Tblo()
With ThisWorkbook.Worksheets("Feuil1")
    Set plageBase = .Range(.Cells(7, 1), Cells(7, 1).End(xlDown))
End With
With plageBase
    .AutoFilter Field:=4, Criteria1:="<>"
End With
Sheets("Feuil1").Range("A7:B65534").SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Feuil2").[A6]
For Each Cel In plageBase.Offset(0, 3).SpecialCells(xlCellTypeConstants, 23)
    ReDim Preserve Tblo(I)
    Tblo(I) = Cel.Offset(0, 1).Value & Cel.Offset(0, 2).Value
    I = I + 1
Next Cel
Sheets("Feuil2").Range("F6").Resize(UBound(Tblo) + 1, 1) = Application.Transpose(Tblo)
Feuil2.Columns.AutoFit
Feuil1.ShowAllData
End Sub

bon courage
 

johnmjs

XLDnaute Nouveau
Re : [VBA] Copier & concatener plage de cellule

Merci à toi bhbh, ça fonctionne parfaitement, maintenant plus qu'à comprendre le code ^^, notamment ta boucle for, tu balayes la plage de base et le offset? , tu décales de 3 colonnes ? J'arrive pas trop à visualiser, la ligne : ReDim Preserve Tblo(I) me pose problème également, mais je vais chercher un peu et ça va rentrer, c'est en forgeant qu'on devient forgeron après tout.
Merci
 

kingfadhel

XLDnaute Impliqué
Re : [VBA] Copier & concatener plage de cellule

bonjour,
d'abord tu ouvres VBE (Alt+[f11])
ensuite tu colles le code suivant:
Code:
Function ConcatPlage(plage As Range, Optional séparateur As String = ", ") As String
    Dim rep As String, c As Range
    For Each c In plage
        If c.Value <> "" Then
            rep = rep & c.Value & séparateur
        End If
    Next c
    ConcatPlage = Left(rep, Len(rep) - Len(séparateur))
End Function

ensuite tu clique sur la cellule de destination et insérer une fonction personnalisés tu trouveras "ConcatPlage"

tu renseigne la plage à concatener et tu mets ton séparateur entre guillemets

exemple : =ConcatPlage(A29:A36;"-")
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU