Concaténation de + 300 cellules

raphael1008

XLDnaute Junior
Bonjour à tous,
J'ai besoin de concatener plus de de 300 cellules en ajoutant un espace et un point virgule entre les cellules. Ca me semble compliqué avec la fonction concatener, quelqu'un a une idée ? Je vous joint mon fichier.
Merci d'avance ...
Raphael 1008
 

Pièces jointes

  • Classeur2.xls
    27 KB · Affichages: 158
  • Classeur2.xls
    27 KB · Affichages: 166
  • Classeur2.xls
    27 KB · Affichages: 171

Staple1600

XLDnaute Barbatruc
Re : Concaténation de + 300 cellules

Bonjour

En partant du code de jf27
Code:
Sub concat()
For i = 2 To 359
Strg = Strg & Cells(i, 1) & "; "
Next
[B1] = Left(Strg, Len(Strg) - 2)
End Sub
1) ALT+F11
2) Insertion/Module
3)Copier la macro concat ci-dessus
4)ALT+Q
5)Outils/Macros/concat [Exécuter]

Tes cellules seront concaténées dans la cellule B1
 
Dernière édition:

raphael1008

XLDnaute Junior
Re : Concaténation de + 300 cellules

Re,
J'ai recopié la macro mais j'ai une erreur,
Sub test()
Dim resultat As String
resultat = 0
For i = 1 To 358
resultat = resultat + CStr(cell(i, 1)) + "; "
Next i

End Sub
Excel me met en jaune cell, qu'estce que ca veut dire ?

Merci
 

d.ryba

XLDnaute Junior
Re : Concaténation de + 300 cellules

En cherchant sur internet j'ai trouver çà, et ç marche super bien. Ce n'est pas une macro, mais une fonction excel.



Code:
Function ConcatPlage(plage As Range, séparateur As String, Optional contenant As String) As String
    Dim rep As String, c As Range
    For Each c In plage
        If InStr(c.Value, contenant) > 0 Then
            rep = rep & c.Value & séparateur
        End If
    Next c
    ConcatPlage = Left(rep, Len(rep) - Len(séparateur))
End Function

Même mode opératoire pour l'installer :

1) ALT+F11
2) Insertion/Module
3)Copier la fonction ConcatPlage ci-dessus
4)ALT+Q

pour la mettre en application :

Code:
=ConcatPlage([I]la_plage[/I];"[I]le_symbole_séparateur[/I]","[I]condition_optionnelle[/I])

ex1 : [A1:A20] = 1 à 20, concatener les expressions contenant "2"
Code:
=ConcatPlage(A1:A20;"#";2)
[I]Résultat : 2#12#20[/I]


ex2 : [A1:A20] = 1 à 20, concatener toutes les expressions
Code:
=ConcatPlage(A1:A20;"#")
[I]Résultat: 1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20
[/I]

En espérant avoir été clair dans ma description.
 

Bigfish

XLDnaute Occasionnel
Re : Concaténation de + 300 cellules

Boujour le forum,

ce qui suit ne vas pas completement coller au file de ce poste mais pour aider voici une copie d'une reponse que j'ai deja faite sur un autre forum pour une question similaire :

Le code suivant permet de concaténer des chaines contenus dans differente cellules et en les separent par des espaces. La concatenation ce fait sur des lignes.
Ce code peu paraitre compliqué mais en faite il est surtout construit pour un maximum de rapidité dans le cas ou ta plage serait tres grande( plusieurs millier de lignes). Evidemment sur une petit centaine de ligne, 2 boucle imbriquées aurait amplement suffit...

Code:
Sub concatenation()
    'les variables:
    Dim MaFormule As String, RefDeMaChaine As String, Colonne As Long, Premierligne As Long
    Dim DerniereLigne As Long, Maplage As Range, ColonneResultat As String
   
    Premierligne = 14 ' ou premierligne correspond a la premiere ligne de la plage de cellule a concatener
    ColonneResultat = "AJ"
    MaFormule = "=concatenate(" 'la formule commence ici
    Colonne = 16 '16 correspond a la colonne P
   
    'on creer la formule de concatenation en auto pour pas ce faire chi... ^^
    For i = 1 To Colonne 'depui la colonne 1 (colonne A)
        RefDeMaChaine = Columns(i).Rows(Premierligne).Address(RowAbsolute:=False)
            ' si  PremiereLigne = 14, sans l'option RowAbsolute:=False, le resultat
            ' pour la premiere colonne serait $A$14
            ' Mais avec cette option, le resultat est $A14. ceci prepare notre formule a la fonction Autofill
        MaFormule = MaFormule & RefDeMaChaine
        If i <> Colonne Then
            MaFormule = MaFormule & ",Char(32)" & "," 'char(32) correspond a un espace. Attention char est une fonction excel pas une fonction VBA
        Else
            MaFormule = MaFormule & ")" 'La formule ce termine ici
        End If
    Next i
   
    'on recherche la derniere ligne de la plage de cellules a concatener sur la colonne A
    DerniereLigne = Columns("A").Find("*", , , , xlByRows, xlPrevious).Row
   
    'on determine la plage de cellules qui doit contenir le resultat de concatenation
    Set Maplage = Range(ColonneResultat & Premierligne & ":" & ColonneResultat & DerniereLigne)
   
    'on pose la formule dans la premiere cellule la colonne de resultat
    Range(ColonneResultat & Premierligne).FormulaLocal = MaFormule
   
    'on copie la formule sur toute la plage de resultat par la fonction autofil d'excel
    Range(ColonneResultat & Premierligne).AutoFill Destination:=Maplage, Type:=xlFillDefault
   
    'copy de la colonne de resultat
    'Attention la suite ne marche pas si le calcul automatique d'excel est desactivé donc pensea le reactiver ici si tu l'as desactivé.
    Maplage.Copy
   
    'on ecrase la colonne de resultat par elle meme pour remplacer les formules par le resultat des formules
    Maplage.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    MsgBox "Concatenation terminé ", vbInformation
End Sub

Remarque: n'oubliez jamais que les fonctions de bases d'excel sont, sauf exception, toujours plus rapide que votre code VBA
Donc quand vous codez pensez VBA pas VB6.

Ah oui j'oubliais : je travailles avec une version anglaise d'excel donc il faudra peut etre et meme surement franciser la formule.

A+:)
 
Dernière édition:

Statistiques des forums

Discussions
312 330
Messages
2 087 342
Membres
103 524
dernier inscrit
Smile1813