XL 2013 une formule simple index equiv qui ne trouve pas de l'eau a la mer

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
j'utilise depuis pas mal de temp déjà des formule index equiv (x colonnes) que ce soit en formule ou en vba avec evaluate
mais la un truc simple ne fonctionne pas et la le mur me supplie d’arrêter de lui filer des coup de boules

qui sait ou est le bouton de la lumiere SVP
ni celle ci
=INDEX(J3:J100;EQUIV(1;(K3:K100=B6)*(L3:L100=C6)*(M3:M100=D6);0))

ni celle la

=INDEX(Feuil1!J3:J10;EQUIV(1;(Feuil1!K3:K10=Feuil1!B6);0))​

Capture.JPG
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
je n'arrive pas a piger ou est l'erreur pour la ligne "orange"
VB:
Sub test()
    Dim I&
    ColumnIndex = "Feuil1!N1:N100"
    colonnes = Array("Feuil1!K3:K100", "Feuil1!L3:L100", "Feuil1!M3:M100")
    For I = 2 To 11
        valeurs = Array(Cells(I, 2).Value, Cells(I, 3).Value, Cells(I, 4).Value2)
        MsgBox GetValInMatch(ColumnIndex, colonnes, valeurs)
    Next
End Sub
Function GetValInMatch(CI, c, v)
    formule = "=INDEX(" & CI & ",MATCH(1,"
    formule = formule & "(" & c(0) & "=""" & v(0) & """)*(" & c(1) & "=""" & v(1) & """)*(" & c(2) & "=" & v(2) & "),0))"
Debug.Print formule
GetValInMatch = Evaluate(formule)
End Function
numcouleurqualdatedonnées1données2
1​
bleuxx
22/05/2015​
orangehh
04/03/2017​
eeaf
2​
rougeyy
15/03/2018​
rougeyy
15/03/2018​
bbac
3​
vertdd
03/07/2020​
vertdd
12/09/2017​
llvv
4​
jauneaa
06/02/2019​
jauneaa
06/02/2019​
ddae
5​
orangehh
04/03/2017​
bleuxx
22/05/2015​
aaab
6​
violetqq
12/11/2016​
bleuxx
26/05/2015​
mmgi
7​
cyanuu
22/04/2016​
cyanuu
22/04/2016​
ggah
8​
marronjj
18/06/2020​
marronjj
18/06/2020​
hhaj
9​
bleuxx
26/05/2015​
vertdd
03/07/2020​
ccad
10​
vertdd
12/09/2017​
violetqq
12/11/2016​
ffag
 

laurent950

XLDnaute Accro
Patrick cela fonctionne.

************************************************************************************************
Code Faux : Correction ci-dessous :
Sub test()
Dim I&
ColumnIndex = "Feuil1!N1:N100"
colonnes = Array("Feuil1!K3:K100", "Feuil1!L3:L100", "Feuil1!M3:M100")
For I = 2 To 11
valeurs = Array(Cells(I, 2).Value, Cells(I, 3).Value, Cells(I, 4).Value2)
MsgBox GetValInMatch(ColumnIndex, colonnes, valeurs)
Next
End Sub
Function GetValInMatch(CI, c, v)
formule = "=INDEX(" & CI & ",MATCH(1,"
formule = formule & "(" & c(0) & "=""" & v(0) & """)*(" & c(1) & "=""" & v(1) & """)*(" & c(2) & "=" & v(2) & "),0))"
Debug.Print formule
GetValInMatch = Evaluate(formule)
End Function

************************************************************************************************
Correction : Module TestPatrickToulon
VB:
Sub test()
    Dim I&
    ColumnIndex = "Feuil1!N1:N100"
    colonnes = Array("Feuil1!K1:K100", "Feuil1!L1:L100", "Feuil1!M1:M100")
    For I = 3 To 11
        valeurs = Array(Cells(I, 2).Value, Cells(I, 3).Value, Cells(I, 4).Value2)
        MsgBox GetValInMatch(ColumnIndex, colonnes, valeurs)
    Next
End Sub
Function GetValInMatch(CI, c, v)
    formule = "=INDEX(" & CI & ",MATCH(1,"
    formule = formule & "(" & c(0) & "=""" & v(0) & """)*(" & c(1) & "=""" & v(1) & """)*(" & c(2) & "=" & v(2) & "),0))"
Debug.Print formule
'[A18] = formule
GetValInMatch = Evaluate(formule)
End Function

************************************************************************************************
Les lignes de ta matrice (doivent commencer à la ligne N°1) cf ci-dessous :
Array("Feuil1!K3:K100", "Feuil1!L3:L100", "Feuil1!M3:M100")
Array("Feuil1!K1:K100", "Feuil1!L1:L100", "Feuil1!M1:M100")

La première recherche de ton tableau c'est : Rouge + Qualité + 12/05/2015
// Soit ton tableau référence en (B3,C3,D3) et en correspondance dans ta matrice en (K1,L1,M1)
entitéprocessusdate
rougequalité
12/05/2015

NB : Impossible a trouvé car ta matrice commencer a K3,L3,M3 (Inexistant dans la matrice)

Problème de départ Boucle :
QUI COMMENCE A LA LIGNE : Numéro 2
refentitéprocessusdatePrioritéEtatResponsableRapporteur
Donc la première ligne de code est fausse : (Ramènes les titres = Introuvable dans la matrice)
entité + processus + date
CAUSE MAUVAIS DEPART BOUCLE = For I = 2 To 11
C'est pour cela que la Formule est fausse !
=INDEX(Feuil1!N1:N100;EQUIV(1;(Feuil1!K1:K100="entité")*(Feuil1!L1:L100="processus")*(Feuil1!M1:M100=date);0))

Modification départ de la Boucle = For I = 3 To 11
Donc la première ligne de code est Bonne
: (Ramènes les INFOS = qui sont dans la matrice)
Rouge + Qualité + 12/05/2015
=INDEX(Feuil1!N1:N100;EQUIV(1;(Feuil1!K1:K100="rouge")*(Feuil1!L1:L100="qualité")*(Feuil1!M1:M100=42136);0))

La Formule est Correcte et la Fonction Evaluate est opérationnelle.

Ps : Patrick j'ai trouvé ce lien sur la fonction Index Equiv qui est pas inintéressante.


Ps : Tu auras toujours 1 comme resultat car dans la colonne N1:N100 (Toutes les premieres sont remplis à 1 donc c'est normal si tu changes le résultat suit)

Laurent950
 

Pièces jointes

  • ex exceldownlod (Patrick).xlsm
    27.3 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
bonjour Laurent

merci j'avais trouvé entre temps mais étant constamment dérangé par un excité des tableaux et classe et autre cochonnerie je n'ai pas conclu le post

ps:mais j'ai toujours des résultats pas bon ci tu etait observateur tu l'aurais vu
voila mon code
VB:
Sub test()
    Dim I&
    colonnes = Array("Feuil1!K1:K100", "Feuil1!L1:L100", "Feuil1!M1:M100")
    For I = 3 To 11
        valeurs = Array(Cells(I, 2).Value, Cells(I, 3).Value, Cells(I, 4).Value2)
        Debug.Print "ligne " & I
        ColumnIndex = "Feuil1!Q3:Q100"
        Cells(I, "H") = GetValInMatch(ColumnIndex, colonnes, valeurs)

        ColumnIndex = "Feuil1!P3:P100"
        Cells(I, "G") = GetValInMatch(ColumnIndex, colonnes, valeurs)
    Next
End Sub
Function GetValInMatch(CI, c, v)
    formule = "=INDEX(" & CI & ",MATCH(1,"
    formule = formule & "(" & c(0) & "=""" & v(0) & """)*(" & c(1) & "=""" & v(1) & """)*(" & c(2) & "=" & v(2) & "),0))"
    Debug.Print formule
    '[A18] = formule
    GetValInMatch = Evaluate(formule)
End Function

voila les formule que j'obtiens dans le debug
Code:
ligne 3
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="rouge")*(Feuil1!L1:L100="qualité ")*(Feuil1!M1:M100=42136),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="rouge")*(Feuil1!L1:L100="qualité ")*(Feuil1!M1:M100=42136),0))
ligne 4
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="orange")*(Feuil1!L1:L100="RH")*(Feuil1!M1:M100=42137),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="orange")*(Feuil1!L1:L100="RH")*(Feuil1!M1:M100=42137),0))
ligne 5
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="vert")*(Feuil1!L1:L100="RH")*(Feuil1!M1:M100=42138),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="vert")*(Feuil1!L1:L100="RH")*(Feuil1!M1:M100=42138),0))
ligne 6
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="bleu")*(Feuil1!L1:L100="SI")*(Feuil1!M1:M100=42139),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="bleu")*(Feuil1!L1:L100="SI")*(Feuil1!M1:M100=42139),0))
ligne 7
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="bleu")*(Feuil1!L1:L100="qualité ")*(Feuil1!M1:M100=42140),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="bleu")*(Feuil1!L1:L100="qualité ")*(Feuil1!M1:M100=42140),0))
ligne 8
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="violet")*(Feuil1!L1:L100="environnement")*(Feuil1!M1:M100=42141),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="violet")*(Feuil1!L1:L100="environnement")*(Feuil1!M1:M100=42141),0))
ligne 9
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="rouge")*(Feuil1!L1:L100="environnement")*(Feuil1!M1:M100=42142),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="rouge")*(Feuil1!L1:L100="environnement")*(Feuil1!M1:M100=42142),0))
ligne 10
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="rouge")*(Feuil1!L1:L100="sécurité")*(Feuil1!M1:M100=42143),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="rouge")*(Feuil1!L1:L100="sécurité")*(Feuil1!M1:M100=42143),0))
ligne 11
=INDEX(Feuil1!Q3:Q100,MATCH(1,(Feuil1!K1:K100="jaune")*(Feuil1!L1:L100="RH")*(Feuil1!M1:M100=42144),0))
=INDEX(Feuil1!P3:P100,MATCH(1,(Feuil1!K1:K100="jaune")*(Feuil1!L1:L100="RH")*(Feuil1!M1:M100=42144),0))

aperçu du résultat
Capture.JPG


faut dormir la nuit
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Je cite @patricktoulon dans son titre ;) :
qui ne trouve pas de l'eau a la mer
La réponse est dans le titre. Je viens d'une région où "cela coule de source" depuis bien des décennies.

C'est tout à fait normal. L'amer ne se trouve qu'à la bière jamais à l'eau!

On pourrait aussi citer l'amer (issu du normand) qui a un léger rapport avec la mer et surtout la navigation. Mais dans le pays d'où je viens, il n'y a pas de mer et de plus l'amer de la mer ne se boit pas. Il est donc inutile.

Désolé, bon, je sors... :oops:
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972