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

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut concatener plusieurs colonne avec x critères

    salut le phorum

    je me bats depuis ce matin pour réussir à concatener plusieurs colonnes (10) en fonction de critères
    je ne veux pas de concatenation des éléments suivants
    Nom : exclu.jpg
Affichages : 37
Taille : 14,5 Ko

    uniquement ceux issus de cette liste
    Nom : a concatener.jpg
Affichages : 36
Taille : 20,2 Ko

    et voici le résultat souhaité
    Nom : EXEMPLE RESULTAT SOUHATE.jpg
Affichages : 36
Taille : 47,9 Ko

    y a t'il un moyen simple d'obtenir ce résultat ?

    merci d'avance

    david

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 31
    Points : 31
    Points
    31

    Par défaut

    Bonjour David,

    Je sens un peu de frustration dans tes paroles !

    Je viens de chercher une solution et j'en ai trouvé un mais elle est relativement lourde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Concatener(SI(AY2=RECHERCHEV(AY2;A1:A30;1;FAUX);AY2;"");SI(AZ2=RECHERCHEV(...
    Et ceci avec toutes les cellules que tu souhaites concaténer.

    Comme je te le disais c'est relativement lourd donc si quelqu'un peut te donner une meilleure solution, je suis moi aussi preneur !

    Bonne journée à toi,

  3. #3
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 651
    Points : 3 276
    Points
    3 276

    Par défaut

    Bonjour,

    A priori, je ne verrais que VBA.
    Une piste en 2 étapes:
    1 - Créer une fonction booléenne Exclu reprenant les codes à exclure. soit regroupés en un tableau Array, soit concaténés en une chaîne de caractères.
    2 - Pour la concaténation, boucler sur les cellules avec la condition
    Exclu(lacellule.Value) = False
    .

    Variante si les codes à exclure figurent sur 1 feuille.
    La recherche du code à exclure n'est rien.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  4. #4
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut

    merci à tous les deux pour vos propositions
    effectivement, je pense que VBA serait plus judicieux
    par contre marcel pourrais tu m'aider à développer la macro
    j'arrive à déchiffrer les macros (si pas trop complexes...) mais développer comme indiquer ci dessus
    j'avoue que je sèche un peu....

    on part du principe que dans un onglet je ne mets que les valeurs a concatener
    dans un second les valeurs à exclure
    et dans l'onglet principal, colonne BI j'obtiens mon résultat final

    j'espère que je ne t'en demande pas trop... je voudrais pas abuser

    merci beaucoup

    david

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut

    Citation Envoyé par Trystan441 Voir le message
     
    merci pour ta proposition mais le souci c'est que les fonctions imbriquées SI sont limitées à 7 or j'ai 10 colonnes à tester....

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 31
    Points : 31
    Points
    31

    Par défaut

    Munity,

    Si jamais tu souhaites éviter VBA, tu peux aussi utiliser la méthode suivante : (composée de SIERREUR)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CONCATENER(SIERREUR(RECHERCHEV(A35;A27:A33;1;FAUX);"");SIERREUR(RECHERCHEV(etc.
    En cas de rajout de critère d'exclusion, passe ta plage en tableau pour que ta zone de recherche devienne dynamique.

    Trystan

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut

    merci de ta réponse
    le VBA me convient aussi

  8. #8
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 651
    Points : 3 276
    Points
    3 276

    Par défaut

    Salut,

    Une précision, s'il te plaît.
    Les codes à exclure sont-ils reportés dans une feuille de travail, ou peut-on les gérer directement dans VBA?
    La 1ère hypothèse serait la plus simple.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  9. #9
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut

    l'idéal serait de pouvoir etoffer cette liste au besoin tout comme la liste des codes à concatener
    donc oui un feuille pour les exclusions et une autre pour les concatenations
    l'utilisateur final n'y connait rien en VBA donc il faut qu'il puisse modifier en fonction de ses besoins les critères
    je ne serais pas toujours là pour modifier la macro....

  10. #10
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 651
    Points : 3 276
    Points
    3 276

    Par défaut

    Coucou,

    Dans la 1ère hypothèse (liste de codes à exclure sur une feuille séparée de celle où s'effectue la cobncaténation.

    Dans le code suivant:
    2 feuilles "CONCAT" et "UTILITAIRES"

    Dans la feuille "UTILITAIRES"
    Champ nommé "liste_exclu" comprenant tous les codes à exclure

    Dans la feuille "CONCAT"
    Les codes à concaténer se situent de la colonne A à la colonne F
    Concaténation en colonne G

    CODE A ADAPTER

    (au niveau des adresses, des noms de feuilles)

    Pour te guider, j'ai intégré quelques commentaires.
    (Je le fais rarement, mais bon...)

    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
    Option Explicit
     
    Public Function exclu(lecode As String) As Boolean
     
    Dim t As Range
     
    'Recherche du code dans le champ nommé liste_excu
    Set t = Worksheets("UTILITAIRES").Range("liste_exclu").Find(lecode, LookIn:=xlValues, lookat:=xlWhole)
    'Si le code n'est pas rien, - i.e. est trouvé -, alors il est exclu
    exclu = (Not t Is Nothing)
    'Libération de la variable
    Set t = Nothing
     
    End Function
     
    Public Sub laconcat()
     
    Dim laplage As Range
    Dim c As Range, cod As Range
    Dim lachaine As String
     
    With Worksheets("CONCAT")
            'Définitiondu champ vertical des cellules à concaténer
            '1ère cellule = G2, dernière = la dernière cellule en partant du bas de la feuille
            Set laplage = .Range("G2:G" & .Cells(.Rows.Count, 1).End(xlUp).Row)
            For Each c In laplage
                    'Initialisation de la chaine de caractères de concaténation à vide
                    lachaine = ""
                    'Booucle sur les codes de la 1ère (A) à la 6ème colonne (F)
                    'sur la ligne de la cellule de concaténation
                    For Each cod In .Range(.Cells(c.Row, 1), .Cells(c.Row, 6))
                            'Test 1 : code informé, Test 2 : code non exclu
                            If Len(cod) > 0 And exclu(cod.Value) = False Then
                                    lachaine = lachaine & cod.Value & " "
                            End If
                    Next cod
                    'Suppression du dernier blanc
                    lachaine = RTrim(lachaine)
                    'concaténation sur la cellule
                    c.Value = lachaine
            Next c
            'Libération de la variable
            Set laplage = Nothing
    End With

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  11. #11
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut

    merci Marcel
    je mets en application et te tiens informé
    un grand merci pour la macro

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut

    un grand merci MarcelG
    cela fonctionne parfaitement
    ci dessous le code quelque peu modifié (j'ai pas du faire grand chose pour l'adapter )
    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
     
     
    Option Explicit
     
    Public Function exclu(lecode As String) As Boolean
     
    Dim t As Range
     
    'Recherche du code dans le champ nommé liste_excu
    Set t = Worksheets("EXCLUSIONS").Range("liste_exclu").Find(lecode, LookIn:=xlValues)
    'Si le code n'est pas rien, - i.e. est trouvé -, alors il est exclu
    exclu = (Not t Is Nothing)
    'Libération de la variable
    Set t = Nothing
     
    End Function
     
    Public Sub laconcat()
     
    Dim laplage As Range
    Dim c As Range, cod As Range
    Dim lachaine As String
     
    With Worksheets("FICHIER TEST TRANSFORME")
            'Définitiondu champ vertical des cellules à concaténer
            '1ère cellule = G2, dernière = la dernière cellule en partant du bas de la feuille
            Set laplage = .Range("BI2:BI" & .Cells(.Rows.Count, 1).End(xlUp).Row)
            For Each c In laplage
                    'Initialisation de la chaine de caractères de concaténation à vide
                    lachaine = ""
                    'Booucle sur les codes de la 1ère (AY) à la 6ème colonne (BH)
                    'sur la ligne de la cellule de concaténation
                    For Each cod In .Range(.Cells(c.Row, 51), .Cells(c.Row, 60))
                            'Test 1 : code informé, Test 2 : code non exclu
                            If Len(cod) > 0 And exclu(cod.Value) = False Then
                                    lachaine = lachaine & cod.Value & " "
                            End If
                    Next cod
                    'Suppression du dernier blanc
                    lachaine = RTrim(lachaine)
                    'concaténation sur la cellule
                    c.Value = lachaine
            Next c
            'Libération de la variable
            Set laplage = Nothing
    End With
    End Sub
    et j'ai utilisé la fonction décaler pour avoir la liste_exclu en dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(EXCLUSIONS!$A$2;;;NBVAL(EXCLUSIONS!$A:$A)-1)
    encore un grand merci

    première étape terminé
    je continue en espérant pouvoir me débrouiller

  13. #13
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 651
    Points : 3 276
    Points
    3 276

    Par défaut

    Coucou,

    Bravo pour le nom dynamique.

    Des questions sur le code?
    Essaie de comprendre mot à mot, ligne par ligne.
    Cette intégration sera un investissement pour tes développements futurs.

    Si ta demande est satisfaite, alors tu peux placer cette discussion en mode 'Résolue"

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  14. #14
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    642
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 642
    Points : 264
    Points
    264

    Par défaut

    pour être honnete, ce sont des instructions que je connais
    mais je ne serais jamais parvenu à ce résultat ne sachant pas dans quel sens prendre le problème

    c'est le défaut d'un autodidacte en VBA

    sinon le code une fois lu et relu est parfaitement clair
    merci pour tes commentaires qui m'ont bien aidé

    et oui cela sera un plus pour mes développements futurs, c'est sur

    david

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

Discussions similaires

  1. [XL-2010] Filtrer plusieurs colonnes avec critères différents
    Par amorello dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/05/2015, 15h38
  2. Selection de plusieurs colonnes avec une zone de liste
    Par vinzeffect dans le forum Access
    Réponses: 3
    Dernier message: 20/01/2007, 23h51
  3. plusieurs colonnes avec opérateur IN
    Par inluvwitiou dans le forum MS SQL-Server
    Réponses: 3
    Dernier message: 16/03/2006, 14h29
  4. Requête à plusieurs colonnes avec la fonction COUNT
    Par zigune dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/11/2004, 11h43
  5. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 16h22

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