Concaténer des colonnes dans excel avec une macro

Résolu/Fermé
ThomasMexcel Messages postés 28 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 28 mars 2018 - 8 août 2017 à 08:54
ThomasMexcel Messages postés 28 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 28 mars 2018 - 8 août 2017 à 16:04
Bonjour à tous,
J'ai un fichier avec X colonnes, et je souhaiterais concaténer le contenu dans la colonne X+1, par exemple :

colonne 1 colonne 2 colonne 3 colonne 4
fichier test excel fichier test excel

Manuellement, la fonction =colonne 1 &" "& colonne 2 etc... me donne le résultat que je veux. Je souhaiterais automatiser cette action avec un message box me demandant de renseginer le nombre de colonnes à concaténer et d'automatiser cette commande &" "&. Je me suis au prémable positionné dans la cellule qui contiendra le résultat.
Voici ce que j'ai écrit, mais je n'arrive pas à "incrémenter" dans la cellule, puisque mon résultat affiché est le dernier i uniquement. Pourriez-vous m'éclairer ?
Merci

Sub regroupement_colonnes()
Dim X As Byte

If MsgBox("Voulez-vous lancer le regroupement des cellules?", vbYesNo, "Extraction Nomenclature") = vbYes Then

X = InputBox("Saisir le nombre de colonnes à regrouper")

For i = 0 To X
ActiveCell = Cells(ActiveCell.Row, ActiveCell.Column - X + i)
Next i

End If

End Sub

7 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
Modifié le 8 août 2017 à 11:37
Bonjour,

Une proposition :
Sub regroupement_colonnes()
Dim X As Byte
If MsgBox("Voulez-vous lancer le regroupement des cellules?", vbYesNo, "Extraction Nomenclature") = vbYes Then
    X = InputBox("Saisir le nombre de colonnes à regrouper")
    ActiveCell = ""
    For i = X To 0 Step -1
        ActiveCell = Cells(ActiveCell.Row, ActiveCell.Column - X + i) & ActiveCell
    Next i
End If
End Sub



Peut-être a adapter et ajouter des gestions d'erreurs
Cordialement,
1
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
8 août 2017 à 11:45
Bonjour

Il faut concatener la valeur de chaque cellule à la valeur de la dernière cellule donc l'instruction de boucle devrait être :

For i = 0 To (X - 1)
ActiveCell = ActiveCell & Cells(ActiveCell.Row, ActiveCell.Column - X + i)
Next i


Cdlmnt
Via
1
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
8 août 2017 à 13:16
Bonjour à tous,

avec une fonction personnalisée :
Function concat(cel1 As Range, Optional sep As String = ", ", Optional nbCol As Long) As String
    Dim c As Range
    If nbCol = 0 Then nbCol = Abs(Application.ThisCell.Column - cel1.Column)
    For Each c In cel1.Resize(, nbCol)
        concat = concat & sep & c.Text
    Next c
    concat = Mid(concat, Len(sep) + 1)
End Function 

Syntaxes :
=concat(A2;" ";3) syntaxe complète : concat(cel1; separateur; nbCol)
=concat(A3;;3) utilisation séparateur par défaut = ", "
=concat(A4;" ") nbCol absent : toutes les colonnes jusqu'à celle de la formule
https://www.cjoint.com/c/GHilpdcE0Zg
eric
1
ThomasMexcel Messages postés 28 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 28 mars 2018
8 août 2017 à 13:30
Merci à tous pour vos suggestions, la première réponse de pilas31 fonctionne parfaitement. Je ne sais pas si la requête suivante est possible : si j'ai effectué ma macro sur la première ligne, j'aimerais pouvoir étirer ensuite la cellule pour reproduire la macro sur les lignes suivantes, ce qui n'est pas le cas actuellement (cf image jointe)
Est-ilpossible de reconnaître les cellules ? Ou difficilement réalisable en passant via une macro ?
merci

https://img-19.ccm2.net/3n5gXyIjh-xclwaPTsPGkBBmfUM=/a994e46341a5461eb789400d03074a75/ccm-ugc/apercu.PNG
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié le 8 août 2017 à 13:37
tu es sûr d'avoir testé toutes les propositions ?
0
ThomasMexcel Messages postés 28 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 28 mars 2018
8 août 2017 à 13:50
oui j'ai pour le moment le même résultat ..
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
8 août 2017 à 14:35
??? même sur mon fichier ? Tu plaisantes, il y a 3 lignes différentes...
0
ThomasMexcel Messages postés 28 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 28 mars 2018
8 août 2017 à 14:39
eriiic je n'arrive pas à avoir accès à ton fichier. Par contre je viens de voir que j'ai copié ta syntaxe dans l'onglet des macros, or tu me parles de créer une fonction.
Ai-je fait une erreur en important ta fonction dans l'onglet des macros ?
Merci pour ton aide
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
8 août 2017 à 14:48
As tu vérifié que tu n'est pas en calcul manuel ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThomasMexcel Messages postés 28 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 28 mars 2018
8 août 2017 à 15:47


Pour toi via55
0
ThomasMexcel Messages postés 28 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 28 mars 2018
8 août 2017 à 16:04
eriiic c'est à priori tout bon ! lorsque je tire ma cellule ma fonction répond bien à ma demande.
Merci pour tes infos précieuses !
0
hichamaziz Messages postés 28 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 2 avril 2019 1
8 août 2017 à 14:37
merci pour le post
-1