Incorporation d'une fonction RechercheV dans une macro - VB/VBA/VBS - Programmation
Marsh Posté le 20-12-2002 à 16:42:10
brizggy a écrit : Je voudrais inclure une fonction RechercheV dans une macro. Je sais que je pourrais passer par des pointeurs mais l'utilisation de cette fonction me ferai gagner beaucoup de temps d'exécution. |
Function trouvevaleur(valeur, plage As Range)
trouver = False
For Each cellule In plage
If cellule = valeur Then
trouver = True
GoTo sortie:
End If
Next
sortie:
If trouver = True Then
trouvevaleur = cellule.Address
Else
trouvevaleur = "Faux"
End If
End Function
Marsh Posté le 20-12-2002 à 17:31:17
Merci pour la réponse, mais cette solution ne m'intéresse pas vraiment. Je l'ai testée et elle entraîne un très long temps d'exécution.
Elle ne permet pas de profiter de l'exceptionnelle rapidité de la formule RechercheV.
D'autres idées ?
Marsh Posté le 20-12-2002 à 19:06:12
brizggy a écrit : Merci pour la réponse, mais cette solution ne m'intéresse pas vraiment. Je l'ai testée et elle entraîne un très long temps d'exécution. |
sous forme de tableau c'est beaucoup plus rapide:
Function trouvevaleur(valeur, plage As Range)
debut = Timer
trouver = False
Dim pp()
ReDim pp(plage.Count - 1)
pp() = plage
For i = 1 To UBound(pp, 1)
For j = 1 To UBound(pp, 2)
If pp(i, j) = valeur Then
ligne = i
ligne = j
trouver = True
GoTo sortie
End If
Next
Next
sortie:
fin = Timer
If trouver = True Then
MsgBox (fin - debut)'tu pourras supprimer
'cette ligne c'est juste pour tester la vitesse
trouvevaleur = plage.Cells(i, j).Address
End If
End Function
Marsh Posté le 20-12-2002 à 12:03:51
Je voudrais inclure une fonction RechercheV dans une macro. Je sais que je pourrais passer par des pointeurs mais l'utilisation de cette fonction me ferai gagner beaucoup de temps d'exécution.
J'ai trouvé la formule. Dans mon cas, ça donne ceci :
a = Application.WorksheetFunction.VLookup(Cells(i, 1), Range(Sheets("St ER1" ).Cells(2, 1), Sheets("St ER1" ).Cells(200, 2)), 2, False)
Cells(i, 6) = a
i est mon numéro de ligne courante. Cette formule fonctionne très bien SAUF quand la valeur que je recherche ne figure pas dans la liste de la feuille "St ER1".
Dans ce cas, la macro s'arrête carrément !
Avez-vous une solution ?
Sinon, connaissez-vous une fonction permettant de vérifier qu'une valeur figure dans une liste donnée ?