Fonction Application.Match VBA [Fermé]

Signaler
-
 aziatedu13 -
Bonjour,

J'ai un soucis avec la fonction Match de exel en VBA.

Dans une de mes fonction , je désire trouvé la ligne ou se trouve un élément de recherche
donc j'ai utilisé la fonction approprié :

Voici ma ligne de code :

Dim ligne as double

ligne = Application.Match("STBS", Sheets("STBS ref").Range("G1:G100"), 0)

Je désire donc trouvé le mot STBS dans la colonne G des ligne 1 à 100.
Mais lors d'un pas a pas , arrivé sur cette ligne, rien ne se passe....

J'ai bien un mots STBS dans la colonne G10

Si j'affecte la valeur ligne à une case, la case prend #VALEUR...
J'ai cherché pendant longtemps sur les forum, et ça marche pour plein de gens....

Je suis sous exel 2003 Version FR
Pouvez vous m'aider ???

4 réponses

Messages postés
23808
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2021
6 574
Bonjour,

Et tu as contrôlé que la fonction dans la feuille te retournait bien le résultat ?
Il y a peut-être un espace ou autre chose qui gène...
eric
oui, en faisait CTRL + F et "STBS" je trouve bien la case G10.

De plus, dans mon code j'ai mis

ligne = Application.Match("*"&"STBS"&"*", Sheets("STBS ref").Range("G1:G100"), 0)

Donc les "*" en plus pour etre sur qu'il n'y a pas de caractère " parasite".
Mais aucun résultat....
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 147
Bonjour aziatedu13, bonjour eric,

Peut être en faisant comme ça:

ligne = Application.WorksheetFunction.Match("STBS", Sheets("STBS ref").Range("G1:G100"), 0) 


;o)
Messages postés
23808
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2021
6 574
Bonjour polux,

En fait j'avais testé, on peut effectivement se passer de worksheetfunction.
Chose que je viens de découvrir ici..:-)
Et sa syntaxe fonctionne bien, chez moi il m'a bien retourné le n° de ligne

aziatedu13 : pas d'erreur non plus dans le nom de feuille (faire un copier coller du nom de l'onglet) ?

eric
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 147
Salut Eric,

Je ne connaissais pas la fonction Match, j'ai été dans l'aide Excel et j'ai copié l'exemple ... ^^
En testant, il me renvoie également le n° de ligne chez moi.

;o)
Bonjour,

Merci de vos réponse, mais rien n'y fait....toujours pas de bon résultat...
Je suis passé par une autre fonction : Range("G:G)..Find(What:="STBS", LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Rows

Celle ci me renvoie la ligne.

Dommage pour Match....
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 147
Tant mieux si ça fonctionne.

Pour ma part, je ne suis pas un grand fan des méthodes d'Excel et j'évite de les utiliser (problème de compatibilité d'une version à l'autre) et je préfère coder un fonction en VBA.


Sub Test
Dim Ligne As Long

Ligne = ReturnRow("STBS", "G1:G100")
If Ligne = 0 Then
    MsgBox "Elément non trouvé ....",VbExclamation,"Message système"
    Exit Sub
Else
    MsgBox "L'élément se trouve sur la ligne: " & Ligne
End If
End Sub

Public Function ReturnRow(ByVal chaine As Variant, ByVal pTarget As String) As Long
Dim plage As Range
Dim cel

     Set plage  = Sheets("STBS ref").Range(pTarget)

     For Each cel In plage
         If Instr(1, cel.value, chaine) <> 0 then
              ReturnRow = cel.Row
              Exit Function
         End If
    Next cel

    Set plage = Nothing

    ReturnRow = 0

End Function


Je peux ainsi passer l'élément à rechercher et la plage à tester qui peux être différente d'une recherche à l'autre.

;o)
Merci de vos réponse.