Concatener sous conditions

Résolu
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

  1. 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.
    1. Magnifique ! Ca a l'air de fonctionner !
      Je vérifie tout ça en détail dans la journée avant de clore mon ticket. Merci !!
    2. Re bonjour g,

      Ca marche nickel, je suis ravie :)

      Il me reste deux dernières questions : saurais-tu comment modifier le code VBA de façon à ce que la dernière occurrence du séparateur ne soit pas affichée ?

      Et y aurait-il une possibilité pour que ce rechVtous ne renvoie de résultat que pour la première valeur de la colonne A, afin d'éviter les doublons ?
    3. @identifiant-commentBonjour à 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
    4. 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 !
    5. @identifiant-commentBonjour

      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