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

Excel Discussion :

Tableau to String concat [XL-2010]


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut Tableau to String concat
    Bonjour Chers tous,

    Je suis un utilisateur occasionnel d'Excel.
    Dans le cadre d'une analyse de gros fichier Excel, j'aimerai pouvoir faire une petite manip. Grace au forum j'ai découvert INDEX/EQUIV + CONCATENATE mais après tests je n'y arrive pas tout à fait!

    J'ai un tableau contenant en Col 1 des articles et en col 2 leurs fournisseurs.
    Un article pouvant avoir plusieurs fournisseurs, dans la colonne 1 on peut avoir plusieurs lignes qui représentent le meme article mais avec des fournisseurs différents.

    J'aimerai obtenir dans un autre sheet, sur une ligne, une concaténation de tous les fournisseurs pour un article.
    Je pense que mon fichier Excel sera plus clair!

    Si quelqu'un pourrait me venir en aide, ce serait super sympa.

    Ciao
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Salut,

    Comme ça je ne vois pas de solution simple à base de formule Excel.
    En créant la fonction personnalisée CONCATENER_SI ci-jointe, l'écriture de la formule dans Excel sera simple.
    Par exemple, dans ton fichier exemple, tu pourras écrire en cellule J18 =CONCATENER_SI(I18;$B$3:$B$10;$C$3:$C$10;0).
    Puis copier cette cellule vers le bas.

    La fonction =CONCATENER_SI prend pour paramètre :
    - valeurAComparer : la cellule contenant la valeur à comparer à une plage de cellules.
    - plageATester : la plage de cellule à tester par rapport à valeurAComparer
    - plageAConcatener : la plage de cellule à concatener lorsque la condition est remplie
    - condition : un entier codant le type de test à effectuer entre valeurAComparer et plageATester .
     ...0 : =
     ...1 : <
     ...2 : <=
     ...3 : >=
     ...4 : >
    
    Pour créer cette fonction personnalisée, utilise les touches <ALT> + <F11>, puis Menu Insertion -> Module

    Et colle le code ci-dessous
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Option Explicit
     
    Enum CONDITION_ENUM
        COND_EQUAL = 0
        COND_INF = 1
        COND_INF_OR_EQUAL = 2
        COND_SUP_OR_EQUAL = 3
        COND_SUP = 4
    End Enum
     
    Public Function CONCATENER_SI(valeurAComparer As String, plageATester As Range, plageAConcatener As Range, Optional condition As CONDITION_ENUM = COND_EQUAL) As String
        Dim l As Long, c As Long
     
        If condition = COND_EQUAL Then
            For c = 1 To plageATester.Cells.Columns.Count
                For l = 1 To plageATester.Cells.Rows.Count
                    If plageATester.Cells(l, c).Value = valeurAComparer Then
                        CONCATENER_SI = CONCATENER_SI & CStr(plageAConcatener.Cells(l, c)) & ","
                    End If
                Next l
            Next c
        ElseIf condition = COND_INF Then
            For c = 1 To plageATester.Cells.Columns.Count
                For l = 1 To plageATester.Cells.Rows.Count
                    If plageATester.Cells(l, c).Value < valeurAComparer Then
                        CONCATENER_SI = CONCATENER_SI & plageAConcatener.Cells(l, c) & ","
                    End If
                Next l
            Next c
        ElseIf condition = COND_INF_OR_EQUAL Then
            For c = 1 To plageATester.Cells.Columns.Count
                For l = 1 To plageATester.Cells.Rows.Count
                    If plageATester.Cells(l, c).Value <= valeurAComparer Then
                        CONCATENER_SI = CONCATENER_SI & plageAConcatener.Cells(l, c) & ","
                    End If
                Next l
            Next c
        ElseIf condition = COND_SUP Then
            For c = 1 To plageATester.Cells.Columns.Count
                For l = 1 To plageATester.Cells.Rows.Count
                    If plageATester.Cells(l, c).Value > valeurAComparer Then
                        CONCATENER_SI = CONCATENER_SI & plageAConcatener.Cells(l, c) & ","
                    End If
                Next l
            Next c
        ElseIf condition = COND_SUP_OR_EQUAL Then
            For c = 1 To plageATester.Cells.Columns.Count
                For l = 1 To plageATester.Cells.Rows.Count
                    If plageATester.Cells(l, c).Value >= valeurAComparer Then
                        CONCATENER_SI = CONCATENER_SI & plageAConcatener.Cells(l, c) & ","
                    End If
                Next l
            Next c
        End If
     
        If Right(CONCATENER_SI, 1) = "," Then
            CONCATENER_SI = Left(CONCATENER_SI, Len(CONCATENER_SI) - 1)
        End If
    End Function

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Si les données sont triées sur la colonne B comme sur le fichier et si on peut utiliser une colonne supplémentaire (sur ton fichier la colonne D).

    En D3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI($B3=$B2;$D2&","&CAR(10)&$C3;$C3)
    On tire vers le bas.

    Et enfin pour remplir ton tableau.

    En I18
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX($D$3:$D$10;EQUIV($H18;$B$3:$B$10;0)+NB.SI($B$3:$B$10;$H18)-1)
    On tire vers le bas.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Effectivement la solution de Mercatog fonctionne bien.
    Et le tri préalable (si ce n'est pas déjà fait) par type d'article est un moindre mal.

    Pour coller à la position de la colonne résultat du fichier exemple,
    si tu veux le résultat en J18, la formule de Mercatog s'adaptera en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX($D$3:$D$10;EQUIV($I18;$B$3:$B$10;0)+NB.SI($B$3:$B$10;$I18)-1)
    A+

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut
    Waouh!
    Je suis impressionné par votre réactivité.
    Je suis tout de suite convaincu que je vais en apprendre beaucoup dans ce forum.

    Je vous remercie! Je teste ça ce soir et vous reviens assez rapidement.
    Une belle journée ;-)

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut
    Parfait!
    Ca marche comme je souhaitais.
    Je vous remercie pour votre aide précieuse!

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

Discussions similaires

  1. Tester si une String fait partie d'un tableau de String
    Par laloi dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/04/2005, 16h47
  2. [J2SE] tableau de string
    Par Jules82 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 17/03/2005, 14h35
  3. Ranger un tableau de String dans ma HashMap
    Par jeyce dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 26/08/2004, 22h41
  4. [Collections] Conversion de Vector en tableau de String
    Par java_math dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 06/06/2004, 12h55
  5. [Collections] Tableau de String
    Par gexti dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 02/06/2004, 15h42

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