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:
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:
={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:
LIGNE(BdD!$AV$2:$AV$144765)
, aucun problème mais à partir de l'introduction du ça ne va plus:
IIf(Range("O2").Value = Range("BdD!AV2").Value, Range("BdD!AV2:AV144765").Row, 0)
ne pose pas de problème mais:
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:
Evaluate(IIf(Range("O2").Value = Range("BdD!AV2:AV144765").Value, Range("BdD!AV2:AV144765").Row, 0))
Idem.
Le code entier:
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!!!!!!!
Partager