Menu

Concaténer des colonnes dans excel avec une macro [Résolu]

ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention - 8 août 2017 à 08:54 - Dernière réponse : ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

21 réponses

Meilleure réponse
pilas31 1806 Messages postés vendredi 5 septembre 2008Date d'inscriptionContributeurStatut 16 mai 2018 Dernière intervention - Modifié par pilas31 le 8/08/2017 à 11:37
1
Merci
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,

Merci pilas31 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22510 internautes ce mois-ci

Commenter la réponse de pilas31
Meilleure réponse
via55 9435 Messages postés mercredi 16 janvier 2013Date d'inscription 18 juillet 2018 Dernière intervention - 8 août 2017 à 11:45
1
Merci
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

Merci via55 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22510 internautes ce mois-ci

Commenter la réponse de via55
Meilleure réponse
eriiic 21761 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention - 8 août 2017 à 13:16
1
Merci
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
http://www.cjoint.com/c/GHilpdcE0Zg
eric

Merci eriiic 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22510 internautes ce mois-ci

Commenter la réponse de eriiic
ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention - 8 août 2017 à 13:30
0
Merci
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
ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention > via55 9435 Messages postés mercredi 16 janvier 2013Date d'inscription 18 juillet 2018 Dernière intervention - 8 août 2017 à 15:45
Je suis en accès bloqué depuis le travail.
Tu peux simplement t'en rendre compte par toi même en utilisant 3 colonnes, lances la macro.
Lorsque que tu veux tirer ta case, le texte est recopié, et j'aimerais relancer ma macro sur la nouvelle ligne.
via55 9435 Messages postés mercredi 16 janvier 2013Date d'inscription 18 juillet 2018 Dernière intervention > ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention - 8 août 2017 à 15:52
Si tu veux que cela s'execute pour chaque ligne il ne pas une routine Sub mais une fonction personnalisée; Eric t'en a fourni une adaptée
ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention > via55 9435 Messages postés mercredi 16 janvier 2013Date d'inscription 18 juillet 2018 Dernière intervention - 8 août 2017 à 15:53
oui je suis en train d'essayer de l'appliquer. Merci pour tes infos :)
eriiic 21761 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention - 8 août 2017 à 14:51
Alors pourquoi dis-tu que tu as testé toutes les propositions ?
Pas d'accès à cette adresse ? Si tu y a accès sur certains navigateurs il faut faire 'Enregistrer le lien sous'
Une fonction personnalisée se met dans un module Standard (pas un module feuille).
Ensuite s'utilise sur la feuille comme une fonction native d'excel.
ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention > eriiic 21761 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention - 8 août 2017 à 16:00
Eriiic pardonne mon ignorance, mais j'ai importé ta fonction dans l'onglet personnal de vba. Je n'arrive pas à la lancer ensuite...
Commenter la réponse de ThomasMexcel
ThomasMexcel 28 Messages postés jeudi 8 juin 2017Date d'inscription 28 mars 2018 Dernière intervention - 8 août 2017 à 15:47
0
Merci


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