Comment simplifier la formule suivante (imbrication de =SI(ESTNA(SI(ESTNA(SI(ESTNA(SI(ESTNA...

WIsh_

XLDnaute Occasionnel
Bonjour à tous,

Est-il possible de simplifier la formule suivante ?

=SI(ESTNA(SI(ESTNA(SI(ESTNA(INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0))); INDEX('2018'!$A$2:$A$260; EQUIV('FACTURE ECHUE'!$C11; '2018'!$F$2:$F$257;0));INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0)))); INDEX('2017'!$A$2:$A$260; EQUIV('FACTURE ECHUE'!$C11; '2017'!$F$2:$F$257;0)); SI(ESTNA(INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0))); INDEX('2018'!$A$2:$A$260; EQUIV('FACTURE ECHUE'!$C11; '2018'!$F$2:$F$257;0));INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0)))));"-";(SI(ESTNA(SI(ESTNA(INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0))); INDEX('2018'!$A$2:$A$260; EQUIV('FACTURE ECHUE'!$C11; '2018'!$F$2:$F$257;0));INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0)))); INDEX('2017'!$A$2:$A$260; EQUIV('FACTURE ECHUE'!$C11; '2017'!$F$2:$F$257;0)); SI(ESTNA(INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0))); INDEX('2018'!$A$2:$A$260; EQUIV('FACTURE ECHUE'!$C11; '2018'!$F$2:$F$257;0));INDEX(ME2N!$A$2:$A$848; EQUIV('FACTURE ECHUE'!$C11; ME2N!$F$2:$F$848; 0))))))

Merci d'avance,
Bien cordialement,

WIsh
 
Dernière édition:
Solution
Bonjour.
Je propose cette fonction perso, à mettre dans un module standard :
VB:
Option Explicit
Function ColonneA(ByVal Arg, ParamArray Rech())
   Dim P, Rng As Range, L As Long
   On Error Resume Next
   For P = 0 To UBound(Rech)
      Set Rng = Rech(P)
      Err.Clear: L = WorksheetFunction.Match(Arg, Rng, 0)
      If Err = 0 Then ColonneA = Rng(L, 1).EntireRow.Columns(1).Value: Exit Function
      Next P
   End Function
Formule (un peu à l'aveugle et pas testé puisque pas de classeur joint) :
Code:
=ColonneA('FACTURE ECHUE'!$C11;ME2N!$F$2:$F$848;'2018'!$F$2:$F$257;'2017'!$F$2:$F$257)

ShuarS

XLDnaute Occasionnel
Bonjour,

Ca pique un peu les yeux.
Il est bon d'utiliser les balises pour le code :
1579078834544.png

Et surtout un fichier modèle pour exemple est plus parlant.
Si la macro fonctionne, pourquoi la modifier ?

Shu
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je propose cette fonction perso, à mettre dans un module standard :
VB:
Option Explicit
Function ColonneA(ByVal Arg, ParamArray Rech())
   Dim P, Rng As Range, L As Long
   On Error Resume Next
   For P = 0 To UBound(Rech)
      Set Rng = Rech(P)
      Err.Clear: L = WorksheetFunction.Match(Arg, Rng, 0)
      If Err = 0 Then ColonneA = Rng(L, 1).EntireRow.Columns(1).Value: Exit Function
      Next P
   End Function
Formule (un peu à l'aveugle et pas testé puisque pas de classeur joint) :
Code:
=ColonneA('FACTURE ECHUE'!$C11;ME2N!$F$2:$F$848;'2018'!$F$2:$F$257;'2017'!$F$2:$F$257)
 

Dranreb

XLDnaute Barbatruc
Je vais modifier la fonction pour qu'on puisse préciser la colonne à restituer.
À moins que vous ne préfèreriez, comme moi, pour n'effectuer qu'une fois la recherche, que la fonction renvoie deux infos: la valeur trouvée en colonne A et le nom de la feuille où elle l'a trouvée.
 

WIsh_

XLDnaute Occasionnel
Je préfère que la fonction soit modifiée pour qu'on puisse préciser la colonne à restituer car il faut renvoyer l'année présente dans la colonne X, les feuilles ne s'appellant pas 2019, 2018 et 2017. De plus, j'ai également une feuille "autres" à laquelle j'étant la formule et dont la colonne X comprend différentes années.

Merci d'avance,
Cordialement,

WIsh_
 

WIsh_

XLDnaute Occasionnel
J'ai ajouté un module avec ColonneX au lieu de colonneA et renseigné dans la fonction la colonne 24 ("X"). Cela fonctionne, merci.

Quelqu'un connait-il un moyen de simplifier la fonction initiale sans recourir aux macros ?
Merci d'avance,

WIsh_
 

Discussions similaires

Réponses
6
Affichages
513
Réponses
5
Affichages
915

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG