Gestion d'erreur

Bonjour à vous tous,

Je requiert votre aide encore un fois.

Mon problème vient de la gestion d'erreur.

à la première erreur, il va à 100 (ligne de gestion d'erreur) et continue avec le next i.

À la deuxième erreur, il plante.

Pourquoi ??

Je joins les fichiers d'essai.

12zz.xlsm (13.70 Ko)
9yy.xlsx (8.27 Ko)

Un gros merci

Claire

Bonjour,

il ne faut mettre le traitement d'erreur que juste avant la (ou les) ligne susceptible de générer l'erreur.

Le mettre tout au début pour cacher la poussière sous le tapis n'est jamais une bonne solution

il faut systématiquement rétablir le gestionnaire d'erreur avec On Error Goto 0 dès que ce passage est fait (dans le fil du code et dans le traitement d'erreur) pour être alerté des erreurs suivantes.

Tant que tu n'as pas réactivé le gestionnaire d'erreur tu restes dedans. Il n'y en qu'un seul possible, il ne peut superviser les suivantes.

Pourquoi faire un On Error Goto erreur et dedans mettre un Goto 100 ?

Autant mettre un On Error Goto suite, étiquette que tu mets juste avant le Next puisque c'est là que tu veux aller.

A tester :

Sub trouver_identique()
    zz = "zz.xlsm"
    yy = "yy.xlsx"
    Windows(zz).Activate
    For i = 1 To 6

        On Error GoTo suite
        Windows(zz).Activate
        On Error GoTo 0
        valeur = Range("a" & i).Value

        On Error GoTo suite
        Workbooks(yy).Activate
        On Error GoTo 0
        Range("a:a").Select

Debug.Print valeur & i
        Cells.Find(valeur).Activate
        place = ActiveCell.Address
        Windows(zz).Activate
        Range("a" & i).Offset(0, 1).Value = place
        Workbooks(yy).Activate
        ActiveCell.Interior.Color = RGB(253, 233, 217)
suite:
    On Error GoTo 0
    Next i
End Sub

Je ne me suis pas soucié du reste du code sur lequel il y aurait des choses à dire

eric

Salut eriiic,

J'ai testé et cela bloque toujours à la deuxième erreur.

Pour ce qui est du reste du code, je sais qu'il peut être amélioré mais cela fait plusieurs années que je n'ai pas touché au vba.

Alors je suis tout de même contente de moi.

Merci

Claire

Bonjour,

sur quelle ligne ?

Avant c'était bien sur Windows(..).Activate qu'il bloquait ?

Pourquoi Windows() et non par Workbooks() d'ailleurs ?

eric

Bonjour,

Il bloquait toujours sur la ligne Cells.Find.

J'ai changé les Windows par Workbooks.

J'ai ajouté une gestion d'erreur devant la ligne Cells.Find (goto suite) et une après (goto 0) mais cela plante toujours.

L'erreur se fait à la ligne Cells.Find(valeur).Activate lorsque la deuxième valeur recherchée n'existe pas.

Merci de ton aide

Claire

J'espère que je ne me suis pas trop emmêle les pinceaux en essayant de traduire ton code.

Sans fichier ni explications de ce que tu veux ce n'est pas impossible.

Sinon tu as l'essentiel, je pense que tu pourras adapter à ton besoin exact.

Sub trouver_identique()
    Dim sh1 As Worksheet, sh2 As Worksheet, c As Range
    Set sh1 = Workbooks("zz.xlsm").Sheets("nom_de_la_feuille")    'zz = "zz.xlsm"
    Set sh2 = Workbooks("yy.xlsx").Sheets("nom_de_la_feuille")   'yy = "yy.xlsx"
    For i = 1 To 6
        valeur = sh1.Range("a" & i).Value
        '  toujours fixer les paramètres LookIn et lookat de .find.
        ' sinon tu récupères ceux de la dernière utilisation de Rechercher ou Remplacer
        ' et tu vas rechercher 'contient' au lieu de '=' (ou l'inverse)
        Set c = sh2.Range("a:a").Cells.Find(valeur, LookIn:=xlValues, lookat:=xlWhole)
        ' .find retourne un objet Range qu'il tester
        If Not c Is Nothing Then
            sh1.Range("a" & i).Offset(0, 1).Value = c.Address ' ???
            c.Interior.Color = RGB(253, 233, 217)
        End If
    Next i
End Sub

Tu prenais la feuille active par défaut, rien ne te dit que ce sera la bonne feuille qui sera active.

Si c'était voulu remplace Sheets("nom_de_la_feuille") par ActiveSheet

eric

Salut eriiic,

Cela fonctionne lorsque j'ai dans mon fichier yy qu'un caractère

Mais la "string" recherché est contenu dans une autre "string".

J'ai essayé la fonction Like mais je n'ai pas compris comment l'utiliser.

Peux-tu m'éclairer, s'il te plait

Claire

8zz.xlsm (16.70 Ko)
8yy.xlsx (8.68 Ko)

Tu aurais dû être curieuse et regarder l'aide de range.find, il y a tout d'expliqué dedans.

Et lire les commentaires :

' et tu vas rechercher 'contient' au lieu de '=' (ou l'inverse)

lookat:=xlPart

eric

Bonjour Eric

Un gros merci

Rechercher des sujets similaires à "gestion erreur"