Macro VBA pour concatener cellules

Bonjour à tous,

Je voudrais créer une macro qui concatène des cellules d'une feuille à l'autre.

*Sur la feuille 1

J'ai des colonnes (une vingtaine) qui contiennent des valeurs, une par cellule. Les colonnes contenant les infos sont séparées entre elles par deux colonnes vides.

*Sur la feuille 2

Je voudrais un bouton, qui, lorsqu'on clique dessus, lance une macro qui concatène horizontalement le contenu des colonnes de la feuille 1, en séparant les valeurs par des virgules sans espaces.

Exemple

*Feuille 1

Toto A 1

B 2

James 3

Cameron D

*Résultat souhaité feuille 2 : (après avoir cliqué sur le bouton donc ^^)

Toto,A,1

B,2

James,3

Cameron,D

Comme dans l'exemple, il faudrait que les cellules vides ne fassent pas apparaître de problèmes de virgules.

Merci d'avance pour votre aide !

Crdt,

- Pierrot -

Salut Pierrot,

Avec ce code, ça devrait marcher :

For i = 1 To 10

If ActiveWorkbook.Sheets("Feuil1").Cells(i, 1) = 0 Then
Exit For
Else

ActiveWorkbook.Sheets("Feuil2").Cells(i, 1).FormulaR1C1 = ActiveWorkbook.Sheets("Feuil1").Cells(i, 1).Value & "," & ActiveWorkbook.Sheets("Feuil1").Cells(i, 2).Value & "," & ActiveWorkbook.Sheets("Feuil1").Cells(i, 3).Value

Next i

J'ai mis un petit test pour que la boucle s'arrête si elle rencontrer une case vide, tu peux le virer, si ça ne t'es pas utile!

Bonjour,

Te serait-il possible de joindre un bout de fichier pour exemple, car l'énoncé est assez vague :

- une vingtaine de colonne, cela peut être 19 , 20 ou 21 ou autre, donc pour une macro qui ne touche qu'une colonne sur 3, cela peut poser problème

- on ne connais pas l'emplacement de la 1ère colonne.

Cordialement.

Edit : @Reuk, je n'ai pas testé ta macro mais je ne pense pas que cela corresponde à la demande, ses données ne sont pas dans les colonnes A, B Et C, mais sur une vingtaine de colonne séparées par 2 colonnes vides à chaque fois.

Effectivement, je n'avais pas tout lu en détails, mais il a juste à remplacer la valeur des colonnes et ça fonctionnera!

Bien mettre le numéro de la colonne et pas la lettre!

Donc ici,

    For i = 1 To 10

    If ActiveWorkbook.Sheets("Feuil1").Cells(i, 1) = 0 Then
    Exit For
    Else

    ActiveWorkbook.Sheets("Feuil2").Cells(i, 1).FormulaR1C1 = ActiveWorkbook.Sheets("Feuil1").Cells(i, "ta 1ère colonne (en nombre, pas en lettre)").Value & "," & ActiveWorkbook.Sheets("Feuil1").Cells(i, "ta 2ème colonne (en nombre, pas en lettre)").Value & "," & ActiveWorkbook.Sheets("Feuil1").Cells(i, "ta 3ème colonne (en nombre, pas en lettre)").Value

    Next i

Mais effectivement, s'il y a des colonnes ou tu n'as pas toujours des données, il va falloir caler quelques tests en plus!

Cela ne change rien, il a une vingtaine de colonne pas seulement 3, c'était juste un exemple, il ne va pas faire une concaténation sur un code de 30 lignes pour ses 20 colonnes

Bonjour

un essai

Bonjour Reuk, bonjour Zirak,

merci de votre intérêt pour mon post.

Je joins un extrait si ça peut faciliter les choses.

Le but est d'avoir un bouton en Feuille 1, et en cliquant dessus la macro produit le contenu de la cellule B4 sur la feuille 2 par exemple.

J'ai regardé le fichier de M. Banzai64, le résultat est bon pour moi, je vais voir si je parviens à l'adapter. Je reviens vite sur le forum ^^

Merci encore

Crdt,

Pierrot

Bonjour

Adapté à ton fichier

Bonjour,

La macro de Banzai64 est vraiment bien, il reste juste 2 points à traiter :

* Comment choisir les onglets et cellules d'input et d'output des valeurs svp ? Je vois With Sheets ("Feuil1") ainsi que ColDep = 2 LigDep=3 mais pas feuille 2.

* En réalité, dans mon doc, mes colonnes sont disposées de la manière suivante :

info utile ; OK ; vide ; info utile ; OK ; vide ; info utile ; OK ; vide ; etc

Je voudrais zapper les OK et les vides, et ne concatener que les infos utiles (1 colonne sur 3 donc).

Ensuite ce sera parfait !

Crdt,

Pierrot

Bonjour

Dans le dernier fichier que j'ai envoyé remplaces la ligne suivante

          If .Cells(J, I) <> ""  Then

par

          If .Cells(J, I) <> "" And UCase(.Cells(J, I)) <> "OK" Then

Ça marche, bravo !

Comment faire pour choisir une autre feuille pour l'output stp ?

Bonjour

pierrot_42 a écrit :

l'output

En français c'est quoi ?

Pardon, je veux dire la feuille ou les données concaténées sortent (ici feuille2, mais dans mon fichier c'est différent, je voudrais pouvoir changer)

Bonjour

Le bouton détermine la page de recopie

Fait un copier du bouton sur la page qui doit recevoir les données

Si c'est dans le même fichier pas de soucis

Dans deux fichiers vérifies l'affectation du bouton à la macro

C'est parfait, merci beaucoup pour ton aide Banzai, et ta patience, je commence... !

Bonne fin de journée. Je passe le post en résolu.

Très cordialement,

Pierrot

Rechercher des sujets similaires à "macro vba concatener"