Erreur dans rechercheV - VB/VBA/VBS - Programmation
Marsh Posté le 23-08-2009 à 10:01:41
Bonjour,
j'ai l'impression que tu n'y coupes pas:
http://msdn.microsoft.com/en-us/library/dd797422.aspx
mais tu peux écrire ton code ainsi:
Sub ttt()
'Ton Finli est sujet à doute: contA compte le nombre de cellules non vides, mais n'indique pas la dernière cellule non vide!!
'FinLi = Application.WorksheetFunction.CountA(Sheets("feuil1" ).Range("j:j" ))
On Error Resume Next
finli = 10 'pour mon test
For i = 2 To finli
crit = Range("A" & i).Value
If Range("J" & i).Value = "" Then
Range("K" & i).Value = 0
Else
err.number=0
toto = Application.WorksheetFunction.VLookup(crit, Sheets("feuil2" ).Range("Tarifs" ), 3, False)
numerr = Err.Number
If numerr <>0 Then
Range("K" & i).Value = 0
Err.Number = 0
else
Range("K" & i).Value =toto
End If
End If
Next i
On Error GoTo 0
End Sub
Cordialement
Marsh Posté le 23-08-2009 à 11:40:52
re,
Une autre manière , sans le resume next:
Sub ttt1()
Err.Clear
'Ton Finli est sujet à doute: contA compte le nombre de cellules non vides, mais n'indique pas la dernière cellule non vide!!
'FinLi = Application.WorksheetFunction.CountA(Sheets("feuil1" ).Range("j:j" ))
On Error GoTo gest_error
finli = 10 'pour mon test
For i = 2 To finli
crit = Range("A" & i).Value
Range("K" & i).Value = 0
If Range("J" & i).Value <> "" Then
Err.Clear
toto = Application.WorksheetFunction.VLookup(crit, Sheets("feuil2" ).Range("Tarifs" ), 3, False)
numer = Err.Number 'pour voir le numéro d'erreur
Range("K" & i).Value = toto
numer = Err.Number ' numer est ici = 9 je ne sais pas pourquoi!!
End If
gest_error:
Err.Clear
Next i
On Error GoTo 0
End Sub
Marsh Posté le 23-08-2009 à 15:39:28
Merci pour ton aide, le ttt fonctionne très bien. Je n'arrive pas pour le ttt1.
Ok je vais modifier le code pour rechercher la dernière cellule non vide.
Encore merci
Marsh Posté le 23-08-2009 à 16:18:11
Bonsoir,
juste pour satisfaire ma curiosité, peux-tu me faire un copier coller de ton ttt1 STP
Merci
Marsh Posté le 24-08-2009 à 04:50:00
Je ne l'ai pas modifié et l'ai testé tel que tu l'as écris. Si le critère existe pas de souci ça passe, mais dès qu'il tombe sur un critère qui n'existe pas il se bloque sur toto=application.worksheetfunction.vlookup(...). Je suis sur la version 2000 d'office. Je suis allée voir sur le lien que tu m'as donné le problème c'est que l'anglais et moi ne sommes vraiment pas amis... Par contre le n°erreur qui est dans le ttt est 1004. Cordialement.
Marsh Posté le 24-08-2009 à 07:23:24
Bonjour,
voir peut-être de ce côté:
vérifier :
dans VBA, menu Outils/Options, onglet Général
que la récupération d'erreur n'est pas sur "Arret sur toutes les erreurs".
Dans ce cas, sélectionner "Arret sur les erreurs non gérées".
Marsh Posté le 26-08-2009 à 04:03:24
Bonjour,
Je viens de vérifier et je suis bien sur "arret sur les erreurs non gérées". Sinon ta 1ère solution me convient très bien : 2 fois + rapide que ce que j'avais écris, je fais cette recherche sur 20000 lignes et que je renouvelle 8 fois. Je n'étais pas satisfaite de moi car je ne comprenais pas pourquoi j'étais obligée de passer par la gestion d'erreur tel que je le code.
Merci
Marsh Posté le 23-08-2009 à 04:02:50
Bonjour,
Je n'arrive pas à corriger la rechercheV si le critère n'existe pas dans les données tarifs. En utilisant "On Error Resume Next" la macro fonctionne, mais j'aimerai savoir comment faire pour éviter d'utiliser "On Error Resume Next".
Merci pour vos conseils.
FinLigne = Application.WorksheetFunction.CountA(Sheets("RSS_Grp" ).Range("j:j" ))
On Error Resume Next
For i = 2 To FinLigne
Critere = Range("A" & i).Value
If Range("J" & i).Value = "" Then
Range("K" & i).Value = 0
ElseIf Application.WorksheetFunction.IsError(Application.WorksheetFunction.VLookup(Critere, Range("Tarifs" ), 3, False)) = True Then
Range("K" & i).Value = 0
Else
Range("K" & i).Value = Application.WorksheetFunction.VLookup(Critere, Range("Tarifs" ), 3, False)
End If
Next i