Incorporation d'une fonction RechercheV dans une macro

Incorporation d'une fonction RechercheV dans une macro - VB/VBA/VBS - Programmation

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 ?

Reply

Marsh Posté le 20-12-2002 à 12:03:51   

Reply

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.
 
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 ?


 
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

Reply

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 ?

Reply

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.
 
Elle ne permet pas de profiter de l'exceptionnelle rapidité de la formule RechercheV.
 
D'autres idées ?


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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed