Erreur dans rechercheV

Erreur dans rechercheV - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 23-08-2009 à 04:02:50   

Reply

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


Message édité par seniorpapou le 23-08-2009 à 11:39:52
Reply

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
 

Reply

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

Reply

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

Reply

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.

Reply

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

Reply

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

Reply

Sujets relatifs:

Leave a Replay

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