Index equiv en VBA

bonjour à tous,

j'ai adapté un code pour faire une recherchev par vba, et souhaitais l'adapter pour la fonction index equiv.

la formule est celle-ci :

=INDEX(Fe2!B:B;EQUIV(Matrice!C5&Matrice!K5;Fe2!A:A&Fe2!C:C;0))

J'avais essayé de coller par macro celle ci et de l'étirer mais le temps de traitement n'est pas super au vu du nombre de lignes à traiter..

si quelqu'un à une idée ?

merci d'avance

ci- dessous ce que j'ai commencé.

cdt

Sub test_index_equiv()
  Dim varRetour As Variant
ligfin = Cells(Cells.Rows.Count, "A").End(xlUp).Row
 With Sheets("Matrice")
For x = 4 To ligfin

On Error Resume Next

'on concatene pour recherchev
variable1 = .Range("C" & x).Value & .Range("K" & x).Value
variable2 = Sheets("Fe2").Range("A1:A10000") & Sheets("Fe2").Range("C:C10000")

 varRetour = WorksheetFunction.Index(Sheets("Fe2").Range("B1:B" & Cells(65536, 1).End(xlUp).Row), Application.WorksheetFunction.Match(variable1, variable2, 0))

'.Range("E" & x).Value = WorksheetFunction.VLookup(.Range("C" & x).Value, Sheets("Fe3").Range("A1:B" & Cells(65536, 2).End(xlUp).Row), 2, False)

   If Not IsNull(varRetour) Then
           .Range("F" & x).Value = varRetour
        End If

Next x
End With
End Sub

Bonjour Yoda60

Si c'est juste pour inscrire le résultat, à mes yeux, il est inutile de passer par la fonction

Il suffirait peut-être d'utiliser Find, mais sans fichier difficile de l'affirmer

A+

bonjour Bruno,

avec un fichier joint

4yoda1.xlsm (112.13 Ko)

merci.

Bonjour yoda60

Merci, mais une demande ou un fichier sans aucune explication équivaut à zéro

Pouvez-vous nous dire quelle est votre problématique et ce que vous souhaitez obtenir au final SVP

A+

désolé de mon manque de clarté

par exemple si en feuille "matrice" colonnes C et K (en rouge) concordent avec une des lignes de la feuille 2 (colonne A et colonne C) en rouge => on reporte le résultat de la colonne B vers la colonne E de la feuille 1.

ex la cellule C5 et la cellule K5 de la feuille "matrice" on retrouve "résultat 10" etc...

la formule matriciel est dans cette même colonne.

si on peut avoir le résultat directement c'est encore mieux.

merci d'avance

4yoda1.xlsm (138.42 Ko)

Bonjour,

Essayez avec cette formule

=INDEX('Fe2'!A2:C5532;EQUIV(matrice!C5;'Fe2'!A2:A5532;0);2)

bonjour

merci pour cette formule qui fonctionne bien, mais je pensais faire par macro.

En étirant (environ 8000 lignes minimum) ma formule initiale =INDEX('Fe2'!B:B;EQUIV(matrice!C5&matrice!K5;'Fe2'!A:A&'Fe2'!C:C;0)) ramait beaucoup..

Donc plutôt que de mettre des formules et étirer jusqu'à la dernière ligne non vide et ensuite copier collé en valeur, je souhaitai essayer en vba.

Si quelqu'un a une piste , merci d'avance.

au final le pb est résolue et le temps de traitement est tout à fait correct (en ayant restreint la plage en la rendant dynamique).

derniereLigne1 = Sheets("fe2").Cells(Rows.Count, 1).End(xlUp).Row
'
    Range("H5").Formula2R1C1 = _
        "=INDEX(fe2!R1C[-6]:R" & derniereLigne1 & "C[-6],MATCH(Matrice!RC[-5]&Matrice!RC[3],fe2!R1C[-7]:R" & derniereLigne1 & "C[-7]&fe2!R1C[-5]:R" & derniereLigne1 & "C[-5],0))"
   [H5].AutoFill Destination:=Range("H5:H" & Cells(65536, 2).End(xlUp).Row)

merci

Bonjour,

Avec un tableau structuré, le tour était joué sans utiliser VBA... Les formules s'arrêtent à la dernière ligne du tableau, et s'actualisent automatiquement lors de l'ajout/suppression de lignes.

Rechercher des sujets similaires à "index equiv vba"