Concatener sous conditions [Résolu/Fermé]

Signaler
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
-
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
-
Bonjour,


Je cherche à afficher via une formule Excel une concaténation de valeurs, mais en respectant certaines conditions.
Mon algo serait quelque chose comme ceci : pour une feuille avec les colonnes A et B valorisées, concaténer dans la colonne C les valeurs de la colonne B, à condition que
- la valeur de la colonne A soit la même que dans la ligne active
- il s'agisse de la première occurrence de la valeur A dans la ligne active. Sinon, afficher "NA"

J'ai joint une copie écran exemple, car j'ai conscience que ma question peut manquer de clarté.
J'ai trituré les formules que je connais dans tous les sens, sans résultat. Tout ce que j'obtiens est très lourd et pas franchement convaincant.
Je n'ai rien trouvé non plus sur le net. Toutes les solutions proposées passent par le VBA, que je préfèrerais éviter parce que je le maîtrise mal et que j'aurais donc plus de difficultés à le maintenir.

Quelqu'un aurait-il une idée ?
Merci d'avance pour votre aide !

2 réponses

Messages postés
2539
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
524
Bonjour,

Le procédé décrit sur
http://gerard.g.pagesperso-orange.fr/logexl_08.htm#RechVTous
passe par VBA mais uniquement pour enregistrer une formule personnalisée.
Ensuite la procédure est identique à l'usage des fonctions.

Cordialement.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57064 internautes nous ont dit merci ce mois-ci

Messages postés
12477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 août 2020
1 960 >
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017

Bonjour à vous deux

1) que veux tu dire par de façon à ce que la dernière occurrence du séparateur ne soit pas affichée : que le dernier - n'apparaisse pas ? ce qui dans ton exemple donnerait A - D - H - KN ?

2) Pour éviter les doublons tu peux mettre dans ta formule la condition qu’il s'agit bien de la 1ere valeur rencontrée (en décomptant avec un NB.SI) pour appliquer la fonction personnalisée , exemple :
=SI(NB.SI($A$2:A2;A2)=1;RechVTous(A2;$A$2:$A$24;$B$2:$B$24;"/");"NA")

Cdlmnt
Via
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
49
Bonjour à tous les deux, Via et g,

Merci pour vos réponses.
En fait dans la version actuelle, j'ai un résultat comme celui-ci : A - D - H - K - N -

C'est le dernier tiret que j'aurais voulu supprimer.
Je regarde vos deux propositions au plus vite et je vous tiens au courant.

Merci !
Messages postés
12477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 août 2020
1 960 >
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017

Bonjour

Normalement la dernière ligne de la macro RechVTous = Left(temp, Len(temp) - 1) supprime le dernier séparateur en ne gardant que les caractères avant le dernier de la chaine

S'il reste un séparateur c'est que une cellule de la colonne B est vide ou contient un ou des espaces
Essaie alors de rajouter ces lignes en fin de macro juste avant le End Function :
For n = Len(RechVTous) To 1 Step -1
If Right(RechVTous, 1) = separateur Or Right(RechVTous, 1) = " " Then
RechVTous = Left(RechVTous, Len(RechVTous) - 1)
Else: Exit For
End If
Next
>

Cdlmnt
Via
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
49 >
Messages postés
12477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 août 2020

Bonjour Via,

Avant tout pardon pour ma réponse tardive !
Merci de m'avoir répondu !

J'ai ajouté ton code comme ci-dessous :

Function RechVTous(v, champRech As Range, ChampRetour As Range, separateur)
a = champRech
temp = ""
For i = 1 To champRech.Count
If a(i, 1) = v Then
temp = temp & ChampRetour(i) & separateur
End If
Next i
RechVTous = Left(temp, Len(temp) - 1)
For n = Len(RechVTous) To 1 Step -1
If Right(RechVTous, 1) = separateur Or Right(RechVTous, 1) = " " Then
RechVTous = Left(RechVTous, Len(RechVTous) - 1)
Else: Exit For
End If
Next
End Function

Malheureusement, sans succès.
J'ai également retiré les cellules vides et les espaces, mais le résultat est inchangé.

Je vais essayer de passer par des fomules pour boir si je peux y arriver.

Bonne journée !
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
49
Me again,
J'ai résolu mon problème en ajoutant ceci dans une nouvelle colonne :

=GAUCHE(G6;NBCAR(G6)-3)

Je clos le ticket.
Merci pour votre aide !
Messages postés
2539
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
524
Bonsoir,

Je n'ai peut-être pas compris ton souhait, mais il me semble qu'en renseignant les arguments de la fonction comme ci-dessous, il n'y a pas de doublons :



Cordialement.
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
49
Coucou g

J'ai répondu dans le fil de ton premier commentaire :)
Messages postés
2539
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
524 >
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017

No problème...