Bonjour,
Je cherche à récupérer des données d'une feuille à une autre dans un fichier de plus de 140 000 lignes.
Mon code y parviens très bien avec:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    Selection.FormulaArray = _
        "=IF(OR(R2C19<>""TROUVER"",ISERROR(INDEX(BdD!R2C1:R144765C64,SMALL(IF(R2C15=BdD!R2C28:R144765C28,ROW(BdD!R2C28:R144765C28))," & i & ")-1,1))),"""",INDEX(BdD!R2C1:R144765C64,SMALL(IF(R2C15=BdD!R2C28:R144765C28,ROW(BdD!R2C28:R144765C28))," & i & ")-1,1))"
Mais le passage par l'inscription de la formule dans les cellules est très long, j'essaie donc de calculer le résultat directement par VBA mais n'y parviens pas.

La formule obtenue est:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
={SI(OU($S$2<>"TROUVER";ESTERREUR(INDEX(BdD!$A$2:$BL$144765;PETITE.VALEUR(SI($O$2=BdD!$AV$2:$AV$144765;LIGNE(BdD!$AV$2:$AV$144765));1)-1;1)));"";INDEX(BdD!$A$2:$BL$144765;PETITE.VALEUR(SI($O$2=BdD!$AV$2:$AV$144765;LIGNE(BdD!$AV$2:$AV$144765));1)-1;1))}
J'ai commencé par le commencement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
LIGNE(BdD!$AV$2:$AV$144765)
, aucun problème mais à partir de l'introduction du ça ne va plus:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
IIf(Range("O2").Value = Range("BdD!AV2").Value, Range("BdD!AV2:AV144765").Row, 0)
ne pose pas de problème mais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
IIf(Range("O2").Value = Range("BdD!AV2:AV144765").Value, Range("BdD!AV2:AV144765").Row, 0)
ne fonctionne plus: "Erreur d'exécution '13': Incompatibilité de type" et en voulant passer sur une formule matricielle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Evaluate(IIf(Range("O2").Value = Range("BdD!AV2:AV144765").Value, Range("BdD!AV2:AV144765").Row, 0))
Idem.

Le code entier:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Sub APPFUNCT()
 
 
Dim x
 
x = Evaluate(IIf(Range("O2").Value = Range("BdD!AV2:AV144765").Value, Range("BdD!AV2:AV144765").Row, 0))
Range("S4").Value = x
 
End Sub
Merci pour toute aide!!!!!!!