Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 fonction index Match

Calou83

XLDnaute Nouveau
Bonjour à toutes et tous,

j'ai un fichier avec 2 onglets : doublerecherche et recherche_feuille
j'ai créé le code ci-dessous : lorsque j'exécute la macro voici le code erreur : Erreur 13 incompatibilité de type
Je cherche partout dans les forums mais je ne trouve pas de solution.

VB:
Sub jeTeste2()
    Dim myrange As Range
    Set myrange = Range("ListeRef")
    Dim MyRange2 As Range
    Set MyRange2 = Range("ListeMagasin")
    Dim MyTable As Range
    Set MyTable = Worksheets("doublerecherche").Range("STOCK")
    
      
    Worksheets("Recherche_feuille").Range("MAG_1") = Application.WorksheetFunction.Index(MyTable, _
            Application.Match(Worksheets("Recherche_feuille").Range("test2"), Worksheets("doublerecherche").Range("ListeRef"), 0), _
            Application.Match(Worksheets("Recherche_feuille").Range("$b$11"), Worksheets("doublerecherche").Range("ListeMagasin"), 0))

End Sub

Avez-vous une idée ? Merci pour votre aide
 

Pièces jointes

  • Classeur Test.xlsm
    28 KB · Affichages: 8
Solution
Je ne sais pas bien comment tu procèdes
Ecris-tu le magasin manuellement en A1 et ensuite tu lances la macro ?
Bon j'ai mis un on error resume next chez moi même s'il trouve pas cela ne fait pas d'erreur mais selon les options cela varie
Voici une nouvelle version
Bruno
VB:
Sub Bruno()
Dim col%, lig%, lg%, i%
Feuil1.Select
On Error Resume Next
col = Application.Match([A1], Rows(11), 0)
If Err <> 0 Then Exit Sub
i = Application.Match([A1], Feuil7.Rows(1), 0)
For lg = 12 To [A65000].End(3).Row
lig = Application.Match(Cells(lg, 1), Feuil7.[A:A], 0)
Cells(lg, col) = Feuil7.Cells(lig, i)
Next
End Sub

Dranreb

XLDnaute Barbatruc
Bonjour.
Apparemment c'est parce que vous spécifiez un plage de plusieurs cellules comme 1er argument de Application.Match, alors ça renvoie aussi un tableau de tous ces résultats, ce qui n'est pas un argument 2 valide pour la Application.WorksheetFunction.Index
 

Calou83

XLDnaute Nouveau
Bonjour,

Merci pour votre réponse.
Le formule fonctionne dans le tableau avec la plage nommée test2.
=SIERREUR(INDEX(STOCK;EQUIV(test2;ListeRef;0);EQUIV($B$11;ListeMagasin;0));"")
comment puis-je le traduire en VBA

Encore merci et bonne journée
 

Dranreb

XLDnaute Barbatruc
Moi je préparerais le résultat dans un tableau dynamique que je verserais à la fin dans toute la plage.
Mais si la formule fonctionne installez la, quitte à affecter à la fin la valeur de la plage à elle même si vous ne voulez pas la garder.
 

youky(BJ)

XLDnaute Barbatruc
Bonjour tous,
A tester cette simple macro
Bruno
VB:
Sub Bruno()
Dim col%, lig%
col = Application.Match([B2], Feuil7.Rows(1), 0)
lig = Application.Match([B1], Feuil7.[D:D], 0)
If IsNumeric(col) And IsNumeric(lig) Then [B9] = Feuil7.Cells(lig, col)
End Sub
 

Calou83

XLDnaute Nouveau
Merci Bruno cela fonctionne.

Ce que je souhaite c'est remplir la colonne MAG_1 avec le même formule mais qui fait référence à la colonne Test2 (à la place de B1 et la cellule B11 à la place de B2
 

Calou83

XLDnaute Nouveau
Merci, pour info mon fichier à plus de 35000 lignes et les formules index equiv ralentissent considérablement le fichier c'est pourquoi je souhaitais passer le vba.
 

youky(BJ)

XLDnaute Barbatruc
Il est possible bien sur d'exécuter la macro sans le bouton.
en macro . . .
For col = 2 To 14 Step 4 ' voir +(14) si besoin
au lieu de 14 mets le N° de colonne du dernier Magasin
sinon on peut aussi le trouver par macro
Bruno
 

Calou83

XLDnaute Nouveau
Bonjour,

Désolée c'est encore moi.... j'ai essayé d'adapter le code pour effectuer la recherche que sur le magasin 2 (exemple) et je n'y arrive pas. Pouvez vous encore m'aider ?

Merci et bonne journée
 

Discussions similaires

Réponses
6
Affichages
575
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…