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 :

Concatener un nombre indéfini de lignes et mettre le résultat en cellule C1


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Par défaut Concatener un nombre indéfini de lignes et mettre le résultat en cellule C1
    Bonjour

    Je souhaiterais obtenir de l'aide pour ajuster la macro suivante de telle sorte que les données contenues en B2, B3,Bn puissent être concatener dans la cellule C1 avec le séparateur point virgule.

    Pourriez vous svp m'aider à ajuster la macro de mon fichier?

    Merci par avance pour votre aide,

    Anna

    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
    Sub Concatener()
        Dim I As Long
        Dim Fin As Long
     
        'déterminer la dernière ligne de la colonne A
        Fin = cells(Rows.Count, "A").End(xlUp).Row
     
        For I = Fin To 2 Step -1  'boucle du bas vers le haut jusqu'à ligne 2
            If Range("A" & I) = Range("A" & I - 1) And _
               Range("B" & I) = Range("B" & I - 1) Then
     
               ' si An et Bn sont identiques à An-1 et Bn-1, on concatène Cn et Cn-1
    '           Range("C" & I) = Range("C" & I ) & ", " & Range("C" & I - 1)
               'Si tu veux conserver l'ordre en C, il faudrait inverser la fin
               Range("C" & I) = Range("C" & I - 1) & ", " & Range("C" & I)
               'éliminer la ligne précédente déjà concaténée
               Rows(I - 1).Delete
            End If
        Next
     
    End Sub

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour Anna.
    Citation Envoyé par Anna_2013 Voir le message
    les données contenues en B2, B3,Bn puissent être concatener dans la cellule C1 avec le séparateur point virgule.
    D'après cette présentation, une seule ligne suffit :

    [C1].Value = Join(Application.Transpose(Range("B2", Cells(Rows.Count, 2).End(xlUp))), ";")


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Par défaut VBA macro concaténation
    Bonjour Marc,
    Je vous remercie pour votre message.
    Cependant étant débutant en VBA je ne comprends pas comment insérer la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C1].Value = Join(Application.Transpose(Range("B2", Cells(Rows.Count, 2).End(xlUp))), ";")
    Merci par avance,

    Anna

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Par défaut
    Bonjour,
    J'ai modifié le programme de concaténation par VBA pour obtenir le résultat en C1. Cependant aucune valeur n'apparait dans la cellule C1 seul un point virgule.

    Mes données comme indiqué dans le fichier joint se situe à partir de la ligne A2.

    Merci pour votre aide,

    Anna

    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
    Sub Concatener()
        Dim I As Long
        Dim Fin As Long
     
        'déterminer la dernière ligne de la colonne A
        [C1].Value = Join(Application.Transpose(Range("B2", Cells(Rows.Count, 2).End(xlUp))), ";")
     
        For I = Fin To 2 Step -1  'boucle du bas vers le haut jusqu'à ligne 2
            If Range("A" & I) = Range("A" & I - 1) And _
               Range("B" & I) = Range("B" & I - 1) Then
     
               ' si An et Bn sont identiques à An-1 et Bn-1, on concatène Cn et Cn-1
    '           Range("C" & I) = Range("C" & I ) & ", " & Range("C" & I - 1)
               'Si tu veux conserver l'ordre en C, il faudrait inverser la fin
               Range("C" & I) = Range("C" & I - 1) & ", " & Range("C" & I)
               'éliminer la ligne précédente déjà concaténée
               Rows(I - 1).Delete
            End If
        Next
     
    End Sub
    Sinon j'ai essayé de trouver un code plus simple mais je souhaiterais que Transpose range ("A1:A20") comprenne un nombre indéfini de lignes par exemple i=1 à n mais je ne sais pas comment l'adapter.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Concantener_3()
     Range("B1") = Join(Application.Transpose(Range("A1:A20").Special Cells(xlCellTypeConstants).Value), ";")
     End Sub

  5. #5
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut concaténer un nombre infini de lignes
    bonjour,

    Ta dernière intervention ne correspond pas à tademande initiale.

    Bien que je ne comprenne pas le but du code, si j'ai bien compris la réponse de Marc tu dois faire ceci :

    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
     
    Sub Concatener()
        Dim I As Long
        Dim Fin As Long
     
        'déterminer la dernière ligne de la colonne A
        Fin = Cells(Rows.Count, "A").End(xlUp).Row
     
        ' Mettre le code Marc ici si les valeurs de bi et bi-1  identiques doivent être répétées
        Range("c1") = Join(Application.Transpose(Range("b1:b" & Fin)), ";")
     
        For I = Fin To 2 Step -1  'boucle du bas vers le haut jusqu'à ligne 2
            If Range("A" & I) = Range("A" & I - 1) And _
               Range("B" & I) = Range("B" & I - 1) Then
     
               Range("C" & I) = Range("C" & I - 1) & ", " & Range("C" & I)
               'éliminer la ligne précédente déjà concaténée
               Rows(I - 1).Delete
            End If
        Next
     
        ' Mettre le code Marc ici si les valeurs de bi et bi-1  identiques ne doivent pas être répétées
        Range("c1") = Join(Application.Transpose(Range("b1:b" & Fin)), ";")
     
    End Sub
    Nota : la chaine concaténée commence par un ; et je ne suis pas sur que ce soit souhaité.

    Cordialement.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Anna, mon message correspond à ta demande initiale (que j'ai citée) sur la colonne B …

    Donc merci cette fois de présenter clairement & exhaustivement ton besoin en ne laissant aucune place ni au doute ni à l’ambiguïté …

    Cela évitera l'usine à gaz dans le cas où une ligne suffit !
    Citation Envoyé par Anna_2013 Voir le message
    je souhaiterais que Transpose range ("A1:A20") comprenne un nombre indéfini de lignes par exemple i=1 à n mais je ne sais pas comment l'adapter.
    Exemple pourtant déjà présent dans ma ligne de code !

    Et maintenant dans la ligne n°7 du code de Paul …

Discussions similaires

  1. Lire une ligne et mettre le résultat dans des variables
    Par www.rubis dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 06/05/2014, 15h23
  2. Mettre en couleur le plus petit nombre d'une ligne
    Par vatsyayana dans le forum Excel
    Réponses: 7
    Dernier message: 20/02/2008, 14h49
  3. [Regex]Remplacement d'un nombre indéfinie de motif
    Par gege2061 dans le forum Langage
    Réponses: 5
    Dernier message: 14/01/2006, 17h27
  4. afficher un nombre exact de ligne d'un champs
    Par tchoune dans le forum ASP
    Réponses: 4
    Dernier message: 29/12/2005, 16h50
  5. [vb.net][MaskedTextbox] nombre indéfinis de characteres ?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/12/2005, 18h43

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