Gestion de l'erreur Fonction Find.row

Bonjour à tous.

Je ne parviens pas à gérer l'erreur de ma fonction find lorsqu'aucune occurrence n'est trouvée.

J'ai cherché sur la toile, mais l'ensemble des exemples que j'ai trouvés sont relatifs à des variables typées range.

Or j'utilise la méthode Find avec la propriété Row.

C'est fou de coder des heures et des heures et de toujours batailler autant sur des problèmes qui sont plutôt ultra-réccurents et plutôt simples pour des codeurs avertis (ce que je ne suis sûrement pas, visiblement) !

Public CompteursDouble As Worksheet 'sheet qui recense tous les compteurs non numériques potentiellement fictifs
Sub recherche ()
Dim NbLineComptDouble As Integer 'stocke le nb de lignes de la feuille "Compteurs en double" du classeur export SAP
Dim NbLineCarnets As Integer 'nb de lignes de la sheet "Feuil1" du classeur "Reporting Carnets Métro"
Dim SNComptDouble As String 'stocke le n° de série du compteur de la feuille "Reporting Carnets Métro" contenant tous les n° de carnets métro
Dim x as Integer

NbLineCarnets = SheetReporting.UsedRange.Rows.Count
NbLineComptDouble = CompteursDouble.UsedRange.Rows.Count
FindSNCompt = 0
For x = NbLineComptDouble To 1 Step -1
    SNComptDouble = CompteursDouble.Range("A" & x)
    'On Error Resume Next
    FindSNCompt = SheetReporting.Range("A2:A" & NbLineCarnets).Find(what:=SNComptDouble, LookIn:=xlValues, SearchDirection:=xlNext).Row 'recherche le SN non numérique de la range de la feuille "compteurs en double" de l'export SAP dans la feuil1 du classeur "Reporting Carnets Métro". Renvoie le n° de ligne de l'occurrence trouvée
        If FindSNCompt <> 0 Then
            CompteursDouble.Rows(x).Delete
        End If
Next
End Sub

Merci d'avance pour vos retours.

Bonne matinée.

Bonjour Pipou, bonjour le forum,

Une recherche via Find renvoie un objet Range. En principe, on teste comme ça :

Dim R as Range

Set R = Columns(1).Find(blabla,blabla,blabla)
If Not R is Nothing Then FindSNCompt = R.row

Mais je ne comprends pas bien pourquoi tu boucles. Regarde l'aide VBA sur Range.Find qui explique comment trouver toutes les occurrences d'une recherche dans une plage...

Bonjour ThauThème.

Merci pour les éléments apportés.

Je pensais que je pouvais éviter de passer par la déclaration d'une variable Range afin d'éviter de "setter".

La boucle c'est parce que j'ai une recherche de n valeurs (donc dans une plage que je dois parcourir) à faire dans une plage située ailleurs.

Je suis bien obligé de boucler pour faire la recherche de mes n valeurs.

Donc si j'ai bien compris, je suis systématiquement obligé de déclarer ma variable en Range dès que j'utilise la méthode Find.

Mais si l'objet renvoyé est de type Range et que je lui associe n'importe quel objet de la classe Range, je peux typer la variable dans laquelle est retournée le résultat de la fonction selon la propriété.

Et dans ce cas, je ne peux jamais gérer l'erreur si Find ne trouve rien ?

Bonjour,

Tu n'éviteras pas l'erreur avec .Row. La gérer te compliquerait inutilement la tâche... Suis donc le conseil de ThauThème [Salut !] si tu continues d'opérer avec Find.

Sinon utilise Match...

Bonjour MFerrand.

Bien pris !

Merci pour vos contributions.

Bonne journée.

Rechercher des sujets similaires à "gestion erreur fonction find row"