Microsoft 365 Formule Excel

zest.d

XLDnaute Nouveau
Bonjour,
J'aimerais alimenter une colonne en fonction d'un onglet source sauf que la recherche que je fais peut avoir plusieurs résultats dont plusieurs identiques et j'aimerais ne prendre que les 2 résultats différents du coup.

Ci-joint, un fichier test2.xlsx pour mieux comprendre mon besoin.

Je vous remercie tous par avance,

Cordialement,
zest.d
 

Pièces jointes

  • test2.xlsx
    97.4 KB · Affichages: 9
Solution
Re,
Là, ce n'est plus raisonnable, mais il vous suffit de rajouter à la queue leu leu toutes les formules avec toutes les unités. Ce qui ferait 14 formules imbriquées.
Mais ceci dit c'est pas compliqué mais demande de l'huile de coude. :)
Bonjour Sylvanu,
Pour info, j'ai fini par faire et trouver une formule un peu moins grande que celles que l'on utilisait.
VB:
=JOINDRE.TEXTE(CAR(10);VRAI;SIERREUR(INDEX(RefLiensGlobal!$U:$U;EQUIV(I2&{"VTS10";"VTS11";"VTS12";"VTS20";"VTS21";"VTS22";"E1";"E2";"E4";"E5";"J1";"J2";"J4";"J5"};RefLiensGlobal!$J:$J&RefLiensGlobal!$P:$P;0));""))

Il subsiste juste un inconvénient à la mise en forme ... lorsque je fais copier/coller pour ne plus avoir les formules qui prennenet de la place, je me...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Zest,
Une tentative en PJ, mais mes résultats sont différent du tableau que vous donnez. :(
Par ex pour l'adresse 050000 je ne trouve aucune correspondance.
Je suis parti du principe que s'il y en a deux, les deux se suivent comme pour 050400 en lignes 2 et 3.
Sinon cette formule ne marche pas.
VB:
=SIERREUR(INDEX(RefLiens!$G:$G;EQUIV(A2;RefLiens!$C:$C;0))&SI(INDEX(RefLiens!$C:$C;EQUIV(A2;RefLiens!$C:$C;0))=INDEX(RefLiens!$C:$C;1+EQUIV(A2;RefLiens!$C:$C;0));" "&INDEX(RefLiens!$G:$G;1+EQUIV(A2;RefLiens!$C:$C;0));"");"")
 

Pièces jointes

  • test2.xlsx
    104.4 KB · Affichages: 3

zest.d

XLDnaute Nouveau
Bonjour Zest,
Une tentative en PJ, mais mes résultats sont différent du tableau que vous donnez. :(
Par ex pour l'adresse 050000 je ne trouve aucune correspondance.
Je suis parti du principe que s'il y en a deux, les deux se suivent comme pour 050400 en lignes 2 et 3.
Sinon cette formule ne marche pas.
VB:
=SIERREUR(INDEX(RefLiens!$G:$G;EQUIV(A2;RefLiens!$C:$C;0))&SI(INDEX(RefLiens!$C:$C;EQUIV(A2;RefLiens!$C:$C;0))=INDEX(RefLiens!$C:$C;1+EQUIV(A2;RefLiens!$C:$C;0));" "&INDEX(RefLiens!$G:$G;1+EQUIV(A2;RefLiens!$C:$C;0));"");"")
Bonjour Sylvanu, merci pour ta réponse et ta solution et désolé pour le temps de réponse :(
Je n'ai pas pu fournir tout le fichier BDD donc ton test n'a pu aboutir mais ta solution fonctionne.
Je l'ai modifiée pour mon cas, c'est à dire la mettre directement dans l'onglet RelLiens plutôt que dans le référentiel data comme cela je peux la triturer un peu ... cependant, je vais passer un peu de temps à bien la comprendre cette formule :)
En les cas merci encore.

Cordialement,
Zest.d
 

zest.d

XLDnaute Nouveau
Bonjour Sylvanu, merci pour ta réponse et ta solution et désolé pour le temps de réponse :(
Je n'ai pas pu fournir tout le fichier BDD donc ton test n'a pu aboutir mais ta solution fonctionne.
Je l'ai modifiée pour mon cas, c'est à dire la mettre directement dans l'onglet RelLiens plutôt que dans le référentiel data comme cela je peux la triturer un peu ... cependant, je vais passer un peu de temps à bien la comprendre cette formule :)
En les cas merci encore.

Cordialement,
Zest.d
Re Bonjour Sylvanu,
Ce serait abusé de demander plus ?
En fait la rupture ne se fait pas forcément sur la ligne suivante ... si l'on reprend l'exemple de l'entrée en colonne C "050400" la première adresse sortie est 050A00 mais la rupture sur la seconde sortie est sur la ligne 538 "053C00" ... il y a rupture sur la colone D et la colonne E.
Ce que je souhaiterais c'est d'avoir le résultat final, toujours pour l'exemple de l'entrée "050400" :
CPU chpid 38 pchid 281 S5 vers port I0001 Baie E2 NXS SX50 SYS1 sur l'adresse 053d00 & port I0033 Baie E1 EQX SX11 VI02 sur l'adresse 053400

humhum .. je me rends compte que cela ne doit pas être si simple au final ...

Cordialement,
Zest.d
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
CPU chpid 38 pchid 281 S5 vers port I0001 Baie E2 NXS SX50 SYS1 sur l'adresse 053d00 & port I0033 Baie E1 EQX SX11 VI02 sur l'adresse 053400
Pas sur d'avoir tout bien compris.:)
Pour 050400 il n' y a nulle part 053D00. Je ne trouve que du 053A00 sur E2 et 053C00 sur E1.
Un essai en PJ avec :
VB:
=SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E1";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")&
SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E2";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")
( à valider par Maj+Ctrl+Entrée sur les anciennes version d'XL )
Ce qui donne pour 050400 :
CPU chpid 38 pchid 281 S5 Port I0033 Baie E1 EQX SX11 VI02
CPU chpid 38 pchid 281 S5 Port I0001 Baie E2 NXS SX50 SYS1
 

Pièces jointes

  • test2 (3).xlsx
    104.9 KB · Affichages: 3

zest.d

XLDnaute Nouveau
Pas sur d'avoir tout bien compris.:)
Pour 050400 il n' y a nulle part 053D00. Je ne trouve que du 053A00 sur E2 et 053C00 sur E1.
Un essai en PJ avec :
VB:
=SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E1";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")&
SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E2";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")
( à valider par Maj+Ctrl+Entrée sur les anciennes version d'XL )
Ce qui donne pour 050400 :
Hum Hum ... Cela ne fonctionne pas chez moi ... bizarre.
Je vais continuer à chercher le pourquoi du comment. En tout état de cause merci beaucoup pour tout.

Cordialement,
Zest.d
 

zest.d

XLDnaute Nouveau
Bonjour Sylvanu,
Désolé pour la fausse alerte ... j'ai eu le même cas à savoir faire mon test sur une BDD non complète :)
Cela fonctionne parfaitement, merci beaucoup.

Cordialement,
Zest.d
Re Bonjour Sylvanu,
pour une histoire de mise en forme dans la cellule, y a t'il un moyen d'insérer un saut de ligne (char10) à la rupture au niveau du second terme CPU ? J'essaie mais bon ... pas probant pour le moment :)

Merci,
Zest.d
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'essaie mais bon ... pas probant pour le moment
Il suffit de rajouter un car(10) sur PC et apparemment un car(13) sur MAC.
VB:
=SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E1";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")&CAR(10)&
SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E2";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")
Ne pas oublier de mettre la colonne Libellé en format "Renvoyer à la ligne automatiquement", et de double cliquer sur une séparation de ligne pour mettre les lignes à la bonne hauteur pour voir les deux lignes affichées.
 

Pièces jointes

  • test2 (3) (1).xlsx
    104.9 KB · Affichages: 2

zest.d

XLDnaute Nouveau
Il suffit de rajouter un car(10) sur PC et apparemment un car(13) sur MAC.
VB:
=SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E1";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")&CAR(10)&
SIERREUR(INDEX(RefLiens!$G$1:$G$2000;EQUIV(A2&"E2";RefLiens!$C$1:$C$2000&RefLiens!$E$1:$E$2000;0));"")
Ne pas oublier de mettre la colonne Libellé en format "Renvoyer à la ligne automatiquement", et de double cliquer sur une séparation de ligne pour mettre les lignes à la bonne hauteur pour voir les deux lignes affichées.
Merci Sylvanu,
et encore une fois merci ! Je savais bien qu'il y avait ducar(10) là dessous ...
Une dernière fois ... si je veux tester E1, E2, J1 et J2 ? Cela donnerait-il ceci ? :
VB:
=SIERREUR(INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"E1";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&CAR(10)&
SIERREUR(INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"E2";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&" "&
SIERREUR(INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"J1";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")[SIZE=3]&CAR(10)&[/SIZE]
SIERREUR(INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"J2";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")

En fait,, cela me rajoute des interlignes ... comme si le test s'en fichait que ce soit du Ex ou du Jx ...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
En fait,, cela me rajoute des interlignes ... comme si le test s'en fichait que ce soit du Ex ou du Jx ...
Effectivement les car(10) sont introduits quelque soient les résultats suivants.
Pour éviter ça, il suffit d'introduire les car(10) uniquement si d'autres valeurs sont trouvées.
Essayez :
VB:
=SIERREUR(INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"E1";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&
SIERREUR(CAR(10)&INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"E2";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&
SIERREUR(CAR(10)&INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"J1";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&
SIERREUR(CAR(10)&INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"J2";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")
( un peu au pif puisque vos colonnes ne correspondent plus aux anciennes. )
 

zest.d

XLDnaute Nouveau
Effectivement les car(10) sont introduits quelque soient les résultats suivants.
Pour éviter ça, il suffit d'introduire les car(10) uniquement si d'autres valeurs sont trouvées.
Essayez :
VB:
=SIERREUR(INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"E1";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&
SIERREUR(CAR(10)&INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"E2";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&
SIERREUR(CAR(10)&INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"J1";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")&
SIERREUR(CAR(10)&INDEX(RefLiensGlobal!$AA:$AA;EQUIV(A2&"J2";RefLiensGlobal!$I:$I&RefLiensGlobal!$O:$O;0));"")
( un peu au pif puisque vos colonnes ne correspondent plus aux anciennes. )
Oups ... j'ai voulu supprimer la pièce jointe et en fait j'ai supprimé le post je crois ...
Bon toujours dans la continuité mais en plus complexe du coup. Ci-joint un fichier testZest.xlsx dans lequel j'ai essayé d'être exhaustif par rapport à ma demande globale du coup ... j'en profite :)
merci,
Cordialement,
Zest.d
 

Pièces jointes

  • testZest.xlsx
    120 KB · Affichages: 1

Discussions similaires

Réponses
3
Affichages
346