Problème avec on error resume next

Signaler
Messages postés
11
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 octobre 2010
-
Messages postés
11
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 octobre 2010
-
Bonjour,

je sèche sur un truc simple mais apparemment compliqué pour moi :

Sur vba excel office 2003, je gère un match entre 2 feuilles, la 1er constituée d'1 colonne avec des réfécence en string. L'autre est un tableau d'une longueur = finligne tel que :
Sheets("UR prioritaires").Select
finligneURprio = Range("A65536").End(xlUp).Row 'Numero dernière ligne feuille
x = 2
For ligneURprio = 2 To finligneURprio
cible = Worksheets("UR prioritaires").Cells(ligneURprio, 1).Value
On Error Resume Next
lignematchee = WorksheetFunction.Match(cible, Worksheets("UR0912_IdF(MS)").Range("M2:M" & finligne), 0)
If Err.Number <> 0 Then
Err.Number = 0
GoTo boucle
End If
Worksheets("UR0912_IdF(MS)").Rows(lignematchee + 1).Copy Worksheets("Resultats_UR_Prioritaires").Rows(x)
x = x + 1
boucle:
Next ligneURprio

Tout fonctionne correctement jusqu'à la 40ème lignes ou une erreur 1004 se produit malgré le on error resume next
La conf de la gestion des erreurs/general est correcte et placée sur 'arrêt sur 'les erreurs non gérées'

Merci de m'éclairer si vous avez une idée du phénomène.

Amicalement

Lou
A voir également:

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Salut

Trop indigeste (*) sans mise en forme du code : 3ème icone à droite
(*) surtout quand il y a des boucles

Peut-être peux-tu éviter l'erreur plutôt que de la masquer (ce qui n'est jamais bon) : pour cela, il faut approfondir les déclarations de type de tes variables dont on ne sait rien.
La fonction Match doit (pas vérifié) renvoyer un Range.
Dans ce cas, dimensionne une variable As Range, fait ton Match puis test si ta variable Range "Is Nothing", ce qui voudra dire qu'il n'a rien trouvé.

Je vois un Goto : burk burk burk
Pas le courage de remettre en forme, mais il y a forcément un moyen d'éviter ce saut.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
4
bonjour,
pour éviter ton goto...
        If Err.Number <> 0 Then
            Err.Number = 0
        Else
            Worksheets("UR0912_IdF(MS)").Rows(lignematchee + 1).Copy Worksheets("Resultats_UR_Prioritaires").Rows(x)
            x = x + 1
        End If

A+
Messages postés
11
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 octobre 2010

Bonsoir Lermite222 et Jack, j'ai tout esayé entre autre ce que tu proposes Lermite222, mais l'erreur passe à travers, je n'aimes pas non plus les goto, aussi c'est juste la dernière option que j'ai affiché dans mon code. Pour les variables, autant pour moi, ce sont des entiers long, la variable cible est un string. L'idée est de récupérer la ligne ou ça matche de la feuille "UR0912_IdF(MS)" (car dans la feuille "UR prioritaires", seules sont présentes les clés sur 1 seule colonne) le résultat est placé dans la feuille "Resultats_UR_Prioritaires" qui affiche l'ensemble des infos, mais il se peut que la clé n'ai pas de concordance, c'est le cas pour 2 enregistrements, et c'est au premièr (position 40) que l'erreur 1004 se présente. Ce qui ce passe est vraiment très étrange...
Merci pour votre aide
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
4
sans ton classeur ce n'est pas possible de debugger.
Messages postés
11
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 octobre 2010

J'ai trouvé une solution, cela pourra peut être servir à d'autre :
En lisant dans de nombreux forums la fonction match poserai certains problèmes notamment dans la cas où elle ne trouve pas de correspondance.
L'erreur 1004 ne peut être gérée de manière classique, du style :
on error resume next ou on error run fonctionRécup() ou encore on error goto etiquette... et un blocage s'installe.
Une des solutions proposée serait :

Set cible = Worksheets("UR prioritaires").Range(Cells(ligneURprio, 1), Cells(ligneURprio, 1))
Set PlageRecherche = Worksheets("UR0912_IdF(MS)").Range("M2:M" & finligne)

If Not IsError(Application.Match(cible, PlageRecherche, 0)) Then
lignematchee = WorksheetFunction.Match(cible, PlageRecherche, 0)
'Worksheets("UR prioritaires").Cells(x, 2).Value = WorksheetFunction.Match(cible, PlageRecherche, 0)
End If
If Err.Number <> 0 Then
Err.Number = 0
GoTo boucle
End If

L'utilisation de IsError(function) est une des solutions proposée pour la gestion de l'erreur 1004.
Bonne journée