Concaténation de plusieurs cellules en une seule

mariafan Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 11 juin 2008 - 10 juin 2008 à 15:27
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 11 juin 2008 à 15:50
Salut à toutes et tous,

Je voudrais en vba, concaténer les cellules de A à N dans <?XML:NAMESPACE PREFIX = ST1 /??><st1:personname productid="la colonne O" w:st="on">les cellules de la colonne AJ</st1:personname> .  c'est à dire les cellules des <st1:personname productid="la colonne D" w:st="on">colonnes A jusqu'à N</st1:personname> de la même ligne doivent se concaténer dans <st1:personname productid="la colonne O" w:st="on">la colonne AJ</st1:personname> toujours de la même ligne. Et ça à partir de la ligne 5 de mon fichier excel.
<st1:personname productid="la colonne D.??Comme" w:st="on">Comme</st1:personname>nt faire s.v.p.?

Merci ! 

14 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 juin 2008 à 15:49
Salut,

doits tu rajouter un separateur entre les chaines (espace, virgule, autre) ?

si non une formule copier dans chaque cellule de la colonne aj fera l'affaire et sera plus rapide. Au pire utilise une macro pour copier la formule.

la formule:

=CONCATENER(A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1)

A+
0
mariafan Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 11 juin 2008
10 juin 2008 à 15:55
Merci pour ta réponse.
Peu importe virgule, espace ou autre. Pour fixer, je vais dire espace.
Et il me faut une macro vba et non la formule car ça c'est une partie d'une grande macro que je fais.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 juin 2008 à 16:02
...

combien de ligne a concatener dans ton tableau ?
0
mariafan Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 11 juin 2008
10 juin 2008 à 16:07
Il y en a pas mal, je n'arriverai à les chiffrer
0

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

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 juin 2008 à 17:51
...

avec ce genre de reponse je sent que l'on vas avancer vite !

En fait tu sais quoi ? non !... bah je viens de poser 2 questions juste pour voir si tu avais envie d'y mettre du tien dans ton probleme et la maintenant je suis sure que tu cherches surtout quelqu'un pour faire ton boulot !

Franchement c'est super simple comme code donc essais et revient me voir... ou attend un encore un peu il y aura peut etre une ame plus charitable que moi

A+

 
0
mariafan Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 11 juin 2008
10 juin 2008 à 18:07
Si j'ai posé la question dans un forum, c'est que j'ai déjà essayé et j'ai pas réussi à le faire.
J'arrive à le faire juste pour une seule ligne, j'ai pas su comment le faire sur tout mon fichier.
Voici mon code appliquer sur la ligne 14 et 36 c'est la colonne AJ où je dois concaténer les autres cellules de ma ligne:

            NoLigne = 14
            Cells(NoLigne, 36) = ""
            For i = 1 To 14
            Cells(NoLigne, 36) = Cells(NoLigne, 36) & Cells(NoLigne, i) & " "
            Next
            Cells(NoLigne, 36) = RTrim(Cells(NoLigne, 36))

Il ne faut pas prendre les gens pour des cons.
0
lepgwen Messages postés 19 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 11 mars 2009
10 juin 2008 à 18:34
Salut

J'ai ce code, j'espère que ca correspond à ce que tu souhaites

Sub Bouton2_QuandClic()
    Dim i As Integer
    Dim j As Integer
    Const maxcol As Integer = 5
    Const col As Integer = 10
   
    i = 1
    j = 1
    Feuil1.Cells(i, 10) = ""
   
    Do While Feuil1.Cells(i, j) <> ""
        Feuil1.Cells(i, 10) = ""
        For j = 1 To maxcol
            Feuil1.Cells(i, 10) = Feuil1.Cells(i, 10) & " " & Feuil1.Cells(i, j)
        Next
        i = i + 1
        j = 1
    Loop
End Sub

Bon courage
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 juin 2008 à 19:21
...

Il ne faut pas prendre les gens pour des cons.

extrait du reglement que tu as accepté :

<li>
On demande une explication ou de l'aide sur un sujet précis,on ne l'exige pas!
N'oubliez
pas que vous vous adressez à des membres bénévoles qui vont partager de
leur temps et leurs connaissances afin de vous aider Vous vous devez de
garder cet esprit communautaire en tête ;-)</li><li>
On pose une question aussi précise que possible.
Répondre prend parfois beaucoup de temps. inutile d'en ajouter par des échanges n'étant que des reformulations. relisez-vous...</li><li>
On précise les détails du problème : contexte, langage, message d'erreur, etc.
</li><li>
On pense à donner le bout de code qui pose problème et à préciser le langage utilisé.
C# n'est pas C++, VBA n'est pas VB6, etc... vérifiez le thème où vous postez.</li><li>
On ne demande pas un programme tout fait, on ne demande que de l'aide sur un problème concret.
Dirigez-vous
directement dans la recherche de sources pour les programmes complets.
Inutile de demander du "code tout cuit", vous n'obtiendrez aucune
réponse.</li>Pour la version complete c'est ici : [reglement.aspx Voir le règlement de CodeS-SourceS]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 juin 2008 à 22:57
salut bigfish_le vrai,

c'est les USA qui te font oublier notre langue?
notre ami a dit (ou a voulu dire ) :
Il ne faut pas prendre les cons pour des gens.

voilà pour te rassurer

mariafan -> pour le moment, personne ne t'a pris pour un con. il serait juste bienvenu que tu expliques "en une seule fois" (trop tard) clairement ton problème. çà serait un gain de temps pour tout le monde

je ne fais pas de VBA
partant de là je vais te montrer comment je comprends ta question

Je voudrais en vba, concaténer les cellules de A à N dans <st1:personname productid= "la colonne O" w:st="on">les cellules de la colonne AJ</st1:personname> . 
ok VBA çà peut être ACCESS mais " cellules ", je suppose EXCEL.
les cellules de A à N, la cellule A n'existe pas, A une colonne. il veut sans doute parler des cellules d'une ligne en particulier, non précisée.

c'est à dire les cellules des <st1:personname productid ="la colonne D" w:st= "on">colonnes A jusqu'à N</st1:personname> de la même ligne doivent se concaténer dans <st1:personname productid="la colonne O" w:st="on">la colonne AJ</st1:personname> toujours de la même ligne.
OK c'est bien ce qui me semblait. bon on ne sait toujours pas la ligne mais c'est un début.
par contre la colonne AJ pour moi çà ne veut rien dire, j'ai sûrement A3 et J8 mais AJ...., 1 colonne + 1 colonne <> 1 colonne
pas grave, il va peut-être préciser après

Et ça à partir de la ligne 5 de mon fichier excel.
OK c'est bien EXCEL et il veut çà sur la ligne 5.
mais çà quoi?
concaténer les cellules de la ligne 5 des colonnes A à N en exceptant les A et J?
ok encore un sujet trop clair...

conclusion (que je me dis UNIQUEMENT à moi même)
il ne m'aide pas à l'aider, j'vais peut-être pas non plus le forcer quand même...
<hr size ="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
10 juin 2008 à 23:26
...
pardon PCPT,  cela doit etre due au poulet lavé a la javel que j'ai mangé hier midi . Ça a surement endomagé les quelques neurones qui me servent à comprendre le français ecrit par mariafan

Plus serieusement, merci pour ta tentative de conciliation.

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
11 juin 2008 à 02:06
...

c'est juste pour fair plaisir a l'ami PCPT

Donc le code suivant 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... mais faut pas m'enerver ...

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 = 14 '14 correspond a la colonne N
   
    '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 premier 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
    'Attentionla suite ne marche pas si le calculautomatique 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

c'etait vraiment que pour faire plaisir a PCPT.... ...

aller je deconne

A+
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 juin 2008 à 08:53
pour me combler, PremierLigne, Colonne et ColonneResultat auraient pu être en argument de Concatenation
mais çà me fait déjà bien plaisir

colonne "AJ" OK, j'avais déjà zappé qu'après Z ... ^^
et après un copier/coller comme "étiré manuel" sur la formule alors générée, sur la hauteur donc les lignes voulues

pas bête et bien expliqué

++
0
mariafan Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 11 juin 2008
11 juin 2008 à 10:22
Bonjour,
Merci PCPT et Bigfish_le vrai et désolé si je me suis emporté mais ça m'énerve de faire du VBA excel alors je ne l'ai jamais fait et que je dois rendre ma macro aujourd'hui. Je m'excuse.

Bon bref, j'ai essayé ton code Bigfish_le vrai, mais j'ai une erreur lors de l'exécution qui est la suivante:
Erreur d'exécution '1004' : erreur définie par l'application ou par l'objet et ça concerne la ligne suivante:
Range(ColonneResultat & Premierligne).FormulaLocal = MaFormule

Est ce que vous avez une explication à ça??? sachant que j'ai vérifié si le calcul automatique est activée.

Merci encore pour tes explication Bigfish_le vrai.
Bonne journée.

 Merci
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
11 juin 2008 à 15:50
...

ou lala ! je n'arrive pas a reproduire cette erreur...

As-tu changer quelque chose avant de l'essayer ou l'as-tu associées a une autre macro ?

quelle version d'excel utilises-tu ?

toutes infos pour ce probleme seront les bienvenus car cela risque de ne pas etre simple.

en attendant, le meme code mais en version francisé et corrigé (voir les lignes en bleu)

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, i As Long
   
    Premierligne = 14 ' ou premierligne correspond a la premiere ligne de la plage de cellule a concatener
    ColonneResultat = "AJ"
    MaFormule = "=concatener("'la formule commence ici
    Colonne = 14 '14 correspond a la colonne N
   
    '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 premier 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 & ";Car(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).Formula = 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 pense a 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

on vas y arrivé
0
Rejoignez-nous