Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

utiliser la fonction match en vba

3 réponses
Avatar
christèle
j'ai tenté d'utiliser la fonction equiv en vba en passant par l'objet
WorksheetFunction
J'ai qchose du genre :

for i =1 to 10
maPlage = range(cells (i,2), cells(i,6))
maCellule = cells(i,7)
reponse = Application.WorksheetFunction.Match(maCellule,maPlage,0)
cells(i,8).value = reponse

VBA me signale qu'il ne peut lire la propriété Match de la classe
WorksheetFunction
Comment dois je faire ?
Merci

3 réponses

Avatar
MichDenis
Une façon de faire :

'-----------------------------
Sub test()
Dim MaPlage As Range
Dim MaCellule As Variant

On Error Resume Next
For i = 1 To 10
Set MaPlage = Range(Cells(i, 2), Cells(i, 6))
MaCellule = Cells(i, 7)
reponse = Application.WorksheetFunction.Match(MaCellule, MaPlage, 0)
If Err <> 0 Then
MsgBox "La fonction Match n'a rien trouvé."
Else
MsgBox reponse
End If
Next

End Sub
'-----------------------------




"christèle" a écrit dans le message de news:

j'ai tenté d'utiliser la fonction equiv en vba en passant par l'objet
WorksheetFunction
J'ai qchose du genre :

for i =1 to 10
maPlage = range(cells (i,2), cells(i,6))
maCellule = cells(i,7)
reponse = Application.WorksheetFunction.Match(maCellule,maPlage,0)
cells(i,8).value = reponse

VBA me signale qu'il ne peut lire la propriété Match de la classe
WorksheetFunction
Comment dois je faire ?
Merci
Avatar
christèle
Je n'utilise pas cette soluc car je ne devrais pas avoir de message d'erreur

Finalement j'ai simplement remplacer
reponse = Application.WorksheetFunction.Match(MaCellule, MaPlage, 0)
par
reponse = Application.Match(MaCellule, MaPlage, 0)

vba accepte mais me renvoie dans la cellule de réception une erreur #N/A#
alors que lorsque j'inscris la fonction directement dans excel, ça marche
comprend pas !
est ce parceque je n'ai pas déclaré mes variables dans les règles de l'art ?
merci




Une façon de faire :

'-----------------------------
Sub test()
Dim MaPlage As Range
Dim MaCellule As Variant

On Error Resume Next
For i = 1 To 10
Set MaPlage = Range(Cells(i, 2), Cells(i, 6))
MaCellule = Cells(i, 7)
reponse = Application.WorksheetFunction.Match(MaCellule, MaPlage, 0)
If Err <> 0 Then
MsgBox "La fonction Match n'a rien trouvé."
Else
MsgBox reponse
End If
Next

End Sub
'-----------------------------




"christèle" a écrit dans le message de news:

j'ai tenté d'utiliser la fonction equiv en vba en passant par l'objet
WorksheetFunction
J'ai qchose du genre :

for i =1 to 10
maPlage = range(cells (i,2), cells(i,6))
maCellule = cells(i,7)
reponse = Application.WorksheetFunction.Match(maCellule,maPlage,0)
cells(i,8).value = reponse

VBA me signale qu'il ne peut lire la propriété Match de la classe
WorksheetFunction
Comment dois je faire ?
Merci





Avatar
MichDenis
Tu as raison d'utiliser cette syntaxe :
reponse = Application.Match(MaCellule, MaPlage, 0)

Bon nombre d'usagers ont aussi noté comme toi un comportement
"bizarre" de "Match" lorsqu'utilisé avec "WorksheetFunction"
ça ressemble à et cela à tout l'apparence d'un "bug" d'excel.

Cependant, il est plus prudent d'utiliser le "on error resume next"
au cas où une erreur de saisie dans la feuille de calcul se serait
présentée.



"christèle" a écrit dans le message de news:

Je n'utilise pas cette soluc car je ne devrais pas avoir de message d'erreur

Finalement j'ai simplement remplacer
reponse = Application.WorksheetFunction.Match(MaCellule, MaPlage, 0)
par
reponse = Application.Match(MaCellule, MaPlage, 0)

vba accepte mais me renvoie dans la cellule de réception une erreur #N/A#
alors que lorsque j'inscris la fonction directement dans excel, ça marche
comprend pas !
est ce parceque je n'ai pas déclaré mes variables dans les règles de l'art ?
merci




Une façon de faire :

'-----------------------------
Sub test()
Dim MaPlage As Range
Dim MaCellule As Variant

On Error Resume Next
For i = 1 To 10
Set MaPlage = Range(Cells(i, 2), Cells(i, 6))
MaCellule = Cells(i, 7)
reponse = Application.WorksheetFunction.Match(MaCellule, MaPlage, 0)
If Err <> 0 Then
MsgBox "La fonction Match n'a rien trouvé."
Else
MsgBox reponse
End If
Next

End Sub
'-----------------------------




"christèle" a écrit dans le message de news:

j'ai tenté d'utiliser la fonction equiv en vba en passant par l'objet
WorksheetFunction
J'ai qchose du genre :

for i =1 to 10
maPlage = range(cells (i,2), cells(i,6))
maCellule = cells(i,7)
reponse = Application.WorksheetFunction.Match(maCellule,maPlage,0)
cells(i,8).value = reponse

VBA me signale qu'il ne peut lire la propriété Match de la classe
WorksheetFunction
Comment dois je faire ?
Merci