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 :

Concaténation en fonction contenu cellule [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut Concaténation en fonction contenu cellule
    Bonjour à tous,

    dans une feuille Excel, j'ai en Col A des références, en Col C des dépendances de A. J'aimerais, en Col D avoir la concaténations de toutes les cellules en C dont la référence en A est identique.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Col A	Col C			Col D
    AVE 102	AVE_102.eng		AVE_102.eng, AVE_102_Cafe.wag, AVE_102_Estd.wag, AVE_102_Ex_P.wag
    AVE 102	AVE_102_Cafe.wag		
    AVE 102	AVE_102_Estd.wag		
    AVE 102	AVE_102_Ex_P.wag
    L'éditeur de macro ne m'étant d'aucune utilité et n'ayant pas trouvé le moindre bout de code qui pourrait m'aider à démarrer, je me retourne vers vous pour me mettre le pied à l'étrier.

    Merci d'avance de votre aide.

    Cordialement
    Pascal

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Pascal, bonjour le forum,

    Deux questions pour ne pas répondre à coté :
    La colonne B est-elle vide ?
    Les références dans la colonne A sont-elles triées par ordre alphabétique ou pas forcément ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Bonjour Thautheme,

    La colonne B est-elle vide ?
    Non, elle comporte la dépendance de A, mais non retravaillée et n'est pas utile. Elle a servi de base pour C.

    Les références dans la colonne A sont-elles triées par ordre alphabétique ou pas forcément ?
    Elles sont obligatoirement triées déjà à l'importation des données depuis un fichier .txt.

    Cordialement
    Pascal

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Peut-être comme ça :

    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
    Sub Macro1()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim C As String 'déclare la variable C (Concaténation)
    Dim K As Integer 'déclare la variable K (incrément)
    Dim L As Integer 'déclare la variable O (Onglet)
    Dim TL() As Variant 'déclare la variable TL (Tbaleu des Lignes)
     
    Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
    O.Columns(4).ClearContents 'efface d'éventuelles anciennes données
    TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionaire D
    For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
        D(TV(I, 1)) = "" 'alimente le dictionnaire D avec la donnée en colonne 1 (la référence)
    Next I 'prochaine ligne de la boucle
    TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
    For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
        C = "" 'initialise la concaténation C
        For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
            'si la donnée en colonne 1 de TV de la boucle 2 est égale à l'élément J du tableau temporaire TMP de la boucle 1,
            'redéfinit la concaténation C
            If TV(I, 1) = TMP(J) Then C = IIf(C = "", TV(I, 3), C & ", " & TV(I, 3))
        Next I 'prochaine ligne de la boucle 2
        ReDim Preserve TL(K) 'redimensionne le tableau des lignes TL (K lignes)
        TL(K) = C 'récupère dans la ligne K de TL la concaténation C
        K = K + 1 'incrémente K
    Next J 'prochain élément de la boucle 1
    O.Cells(1, "D") = TL(L) 'renvoie le premier élément TL(L) dans la cellule ligne 1 colonne D de l'onglet O
    'boucle sur toutes les lignes I du tableau des valeurs TV (en partan de la seconde et jusqu'à l'avant dernière)
    For I = 2 To UBound(TV, 1) - 1
        'si la donnée ligne I+1, colonne 1 de TV est différente de la donnée ligne I colonne 1 de TV, renvoie la concaténation C de TL(L+1)
        'dans la cellule ligne I+1 colonne D de l'onglet O, incrémente L
        If TV(I + 1, 1) <> TV(I, 1) Then O.Cells(I + 1, "D") = TL(L + 1): L = L + 1
    Next I 'prochaine ligne de la boucle
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Bonjour à tous,

    merci Thautheme, je vais tester ce code dans la journée.

    Cordialement
    Pascal

  6. #6
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Re,

    le code provoque une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
            'si la donnée en colonne 1 de TV de la boucle 2 est égale à l'élément J du tableau temporaire TMP de la boucle 1,
            'redéfinit la concaténation C
            If TV(I, 1) = TMP(J) Then C = IIf(C = "", TV(I, 3), C & ", " & TV(I, 3))
        Next I 'prochaine ligne de la boucle 2
    que je suis incapable d'apprécier. Seule adaptation apportée au code : nom de la feuille.

    Cordialement
    Pascal

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

Discussions similaires

  1. [XL-2007] Code VBA sélection ligne en fonction contenu cellule
    Par py86acces dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/01/2017, 08h57
  2. Réponses: 3
    Dernier message: 08/10/2016, 11h58
  3. [XL-2007] Création ligne en fonction contenu cellules
    Par apsylon dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/09/2013, 18h13
  4. [XL-2003] Fonction concaténer et formats de cellule
    Par Goupo dans le forum Excel
    Réponses: 2
    Dernier message: 07/04/2009, 16h19

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