IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Intégration d'un concaténation


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 54
    Par défaut Intégration d'un concaténation
    Bonjour

    Je fais appel à votre champs de connaissances infinies du VBA . Cf:le tableau ci dessous:

    Nom : copie_xls.png
Affichages : 276
Taille : 9,1 Ko



    je dois réaliser une concaténation de données de la colonne2 dans la colonne 3 en fonction du nombre de lignes que comporte la case colonne 1 (exemple:
    la case A (colonne1) comporte 4 lignes de données (colonne2) que je concatène dans la 1ere ligne de la colonne3.
    Sachant que les plages à concaténer sont variables. J'ai écris la routine qui fonctionne mais qui me semble assez
    lourde (je reproduis la concaténation en la répétant pour chaque ajout de ligne a concaténer, j'en ai fait 8 maximum, et j'ai
    des cases colonnes2 de 25 lignes à concaténer. Comment puis-je itérer la concaténation sans avoir à l'ajouter explicitement
    à chaque fois?
    D'avance, merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub concaten_1()
     
    Dim i As Long
     
    Range("A22") = "this is the end my friend"
     
     
    Do
    i = i + 1
     
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" And Cells(i, 1).Offset(2, 0).Value = "" And Cells(i, 1).Offset(3, 0).Value = "" And Cells(i, 1).Offset(4, 0).Value = "" And Cells(i, 1).Offset(5, 0).Value = "" And Cells(i, 1).Offset(6, 0).Value = "" And Cells(i, 1).Offset(7, 0).Value = "" And Cells(i, 1).Offset(8, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1]&""   /   ""&R[2]C[-1]&""   /   ""&R[3]C[-1]&""   /   ""&R[4]C[-1]&""   /   ""&R[5]C[-1]&""   /   ""&R[6]C[-1]&""   /   ""&R[7]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" And Cells(i, 1).Offset(2, 0).Value = "" And Cells(i, 1).Offset(3, 0).Value = "" And Cells(i, 1).Offset(4, 0).Value = "" And Cells(i, 1).Offset(5, 0).Value = "" And Cells(i, 1).Offset(6, 0).Value = "" And Cells(i, 1).Offset(7, 0).Value = "" And Cells(i, 1).Offset(8, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1]&""   /   ""&R[2]C[-1]&""   /   ""&R[3]C[-1]&""   /   ""&R[4]C[-1]&""   /   ""&R[5]C[-1]&""   /   ""&R[6]C[-1]&""   /   ""&R[7]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" And Cells(i, 1).Offset(2, 0).Value = "" And Cells(i, 1).Offset(3, 0).Value = "" And Cells(i, 1).Offset(4, 0).Value = "" And Cells(i, 1).Offset(5, 0).Value = "" And Cells(i, 1).Offset(6, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1]&""   /   ""&R[2]C[-1]&""   /   ""&R[3]C[-1]&""   /   ""&R[4]C[-1]&""   /   ""&R[5]C[-1]&""   /   ""&R[6]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" And Cells(i, 1).Offset(2, 0).Value = "" And Cells(i, 1).Offset(3, 0).Value = "" And Cells(i, 1).Offset(4, 0).Value = "" And Cells(i, 1).Offset(5, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1]&""   /   ""&R[2]C[-1]&""   /   ""&R[3]C[-1]&""   /   ""&R[4]C[-1]&""   /   ""&R[5]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" And Cells(i, 1).Offset(2, 0).Value = "" And Cells(i, 1).Offset(3, 0).Value = "" And Cells(i, 1).Offset(4, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1]&""   /   ""&R[2]C[-1]&""   /   ""&R[3]C[-1]&""   /   ""&R[4]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" And Cells(i, 1).Offset(2, 0).Value = "" And Cells(i, 1).Offset(3, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1]&""   /   ""&R[2]C[-1]&""   /   ""&R[3]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" And Cells(i, 1).Offset(2, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1]&""   /   ""&R[2]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value = "" Then
    Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1]&""   /   ""&R[1]C[-1])"
    Else
    If Cells(i, 1).Value <> "" And Cells(i, 1).Offset(1, 0).Value <> "" Then Cells(i, 3).FormulaR1C1 = "=CONCATENATE(RC[-1])"
     
     
     
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    Loop Until Cells(i, 1).Value = "this is the end my friend"
     
     
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Quelle est ta version d'Excel ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 54
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Quelle est ta version d'Excel ?
    Bonjour

    Il s'agit d Excel 2016

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous,

    Pour ma part, ce genre de formulation me donne le vertige.

    Par VBA

    Par hypothèse (comme l'on disait autrefois), la plage débute en A1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Option Explicit
     
    Sub essai()
     
    Dim dernl As Long, i As Long, lastrow As Long, larow As Long
    Dim laconcat As String
     
    With Feuil1
            dernl = .Cells(.Rows.Count, 2).End(xlUp).Row
            larow = 1
            Do
                    lastrow = Application.WorksheetFunction.Min(dernl, .Cells(larow, 1).End(xlDown).Row - 1)
                    laconcat = ""
                    For i = larow To lastrow
                            laconcat = laconcat & .Cells(i, 2).Value & " / "
                    Next i
                    laconcat = Left(laconcat, Len(laconcat) - 3)
                    .Cells(larow, 3).Value = laconcat
                    larow = lastrow + 1
            Loop While lastrow < dernl
    End With
     
    End Sub
    Je n'ai pas testé, mais, à mon sens, la fonction Join aurait pu être affectée à une variable tableau afin de procéder à la concaténation.

    D'autre part, je me méfie du "/" comme séparateur car ce symbole peut être un délimiteur de date.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 54
    Par défaut
    Bonjour

    En effet la formulation "bourrin" me donne moi même le vertige Merci cela fonctionne parfaitement.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    volubiliss,

    J'ai ôté de mon code la déclaration de la variable tableau, non utilisée.

    Regarde également ma remarque quant au séparateur "/".

    Bonne continuation.

  7. #7
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    c'est un code un peu lourd (sans vouloir te vexer) et pour concatener utilise & c'est plus simple

    du coup voici un code qui fonctionne par rapport à ce que tu présentes et il n'y a pas de limite puisque cela t'inquiète

    J'ai pris l'hypothèse que la cellule de départ est A2 et que les lignes de la colonne A ont des cellules vide si c'est la même valeur de cellule (Comme c'est dans la capture écran)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub Concat_Val()
        Dim Tablo(1 To 3) As String
        Dim Lign As Long
        Dim DerLign As Long
     
        'Départ en ligne 2
        Lign = 2
        DerLign = [B2].End(xlDown).Row
     
        Tablo(1) = Cells(Lign, 1).Value
        Tablo(2) = Lign
        Tablo(3) = "'" & Cells(Lign, 2).Value
        For Lign = 3 To DerLign
     
            If Cells(Lign, 1) = "" Then
                Tablo(3) = Tablo(3) & " / " & Cells(Lign, 2).Value
            Else
                Cells(Tablo(2), 3) = Tablo(3)
                Tablo(1) = Cells(Lign, 1).Value
                Tablo(2) = Lign
                Tablo(3) = "'" & Cells(Lign, 2).Value
            End If
     
        Next
     
        Cells(Tablo(2), 3) = Tablo(3)
     
    End Sub
    Tu nous dis si c'est bon ou pas

    A bientôt

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Menhir et Igllobel ,

    (Voir ci-dessus. J'avais pris une autre voie.)

    Menhir,

    Je n'aurais pas trouvé la formule (pas le courage!). Sauf erreur, la fonction DECALER est aussi utilisée pour l'affectation de nom à une plage dynamique.
    Une réserve:
    - Celle-ci comprend un "=" à l'intérieur. Je pense que tu as géré la condition après une première écriture, ce que je fais toujours (notamment avec Index et Equiv)
    - Sur mon poste, à la 3ème occurrence de la colonne A, en colone C, j'ai la concaténation depuis la ligne 2

    Nom : Capture_Forum_20190702.JPG
Affichages : 224
Taille : 26,8 Ko

    J'aurais géré cette formulation par VBA en testant la 1ère colonne, et, pourquoi pas, un
    Ceci afin de ne pas écrire la formule sur toute une plage. par purisme )

    Igloobel

    Juste rattacher les objets Range.

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Une solution sans VBA :

    Dans la première ligne vide après ton tableau, mets en colonne A une lettre (n'importe laquelle, c'est juste pour marquer la fin).

    En D2, tu mets la formule :
    En C2, tu mets la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(A2="";"";JOINDRE.TEXTE(" / ";VRAI();DECALER(B2;0;0;MIN(D3:D100)-D2;1))
    Tu copies C2:D2 vers le bas jusqu'à la fin de ton tableau.
    Si tu ne veux pas casser les format (tes encadrements) fait un "copier + coller formule".

    JOINDRE.TEXTE est une nouvelle fonction apparue avec 2016.
    Pour plus d'info : https://support.office.com/fr-FR/art...3-0e8fc845691c

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intégration/concaténation de HTML et PHP dans echo
    Par aiglobulles dans le forum Langage
    Réponses: 4
    Dernier message: 23/07/2014, 11h52
  2. [NETBEANS] Intégration de Jboss dans NetBeans
    Par Kleb dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/06/2003, 18h45
  3. Concaténation vertical ???
    Par loaded dans le forum Langage SQL
    Réponses: 10
    Dernier message: 07/05/2003, 15h44
  4. Concaténer TStrings
    Par Tuxxy dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/03/2003, 12h30
  5. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo