2 Finds dans une fonction marche seulement en exécution détaillé

Bonjour,

Alors mon problème est bizarre.

J'avais avant un

.FindNext(cel)

Sauf que lors de l'exécution en condition normal il ne me donnait pas le bon résultat, je l'ai donc transformer en

.Find(What:=[VALEUR], After:=cel)

Qui me donnait le bon résultat, comme on peut le voir ici : https://forum.excel-pratique.com/excel/fonction-findnext-dans-une-formule-154377

Aujourd'hui j'ai repris ce principe dans la fonction suivante :

Private Function get_DebConfig(ByRef table As String, ByVal version As String) As Range
    Dim rng As Range
    With ThisWorkbook.Worksheets("CONFIG")
        Set rng = .Columns(1).Find(version)
        If Not rng Is Nothing Then
            Set rng = .Columns(2).Find(table, after:=rng.Offset(-1, 1))
            If Not rng Is Nothing Then
                Set get_DebConfig = rng.Offset(0, 1)
            End If
        End If
    End With
End Function

Me permettant de trouver le début de ma configuration selon les paramètres d'entrées. Lorsque je le lance en mode "pas à pas détaillé" aucun soucis je trouve la bonne configuration. Sauf que lorsque je le lance dans ma fonction global, il me remonte toujours une erreur, je fais débogage, je relance la macro au même endroit avec F5 et plus d'erreur.

Je ne comprend pas pourquoi elle fonctionne en 2 temps mais pas directement en retournant le message d'erreur suivant :

Erreur d'exécution '50290':

Erreur définie par l'application ou par l'objet

Si quelqu'un pourrait m'expliquer en quoi l'état pas à pas détaillé est différent que l'exécution globale, merci. Et comment régler ce problème.

Bonjour,

Le bug a-t-il lieu sur cette ligne :

Set rng = .Columns(2).Find(table, after:=rng.Offset(-1, 1))

Il ne faut pas que la cellule trouvée soit en ligne 1 sinon .

Cdlt,

Bonjour,

J'ai dans l'idée que c'est peut-être faisable par formule avec un Decaler()
Mais sans fichier ni explications...
eric

Set rng = .Columns(2).Find(table, after:=rng.Offset(-1, 1))

Il ne faut pas que la cellule trouvée soit en ligne 1 sinon .

La première ligne début ligne 10 exprès, il n'y a pas de soucis pour cela.

J'ai dans l'idée que c'est peut-être faisable par formule avec un Decaler()

Mais sans fichier ni explications...

Si tu veux plus d'explication, c'est au sein d'un outil d'extraction de données. Les fichiers sources de données sont différents, les data ne se trouvent pas aux mêmes endroits, en même quantité, etc... De plus chaque fichiers sources de données possèdent différentes versions avec certaines versions des emplacements différents.

Mon outil donc va extraire les données peut importe la source de données et la version, pour cela il faut lui préciser les constantes et où chercher. Pour cela j'ai un onglet "Configuration", il va répertorier l'ensemble des versions de chaque outils qui est pris en compte, avec pour chaque l'emplacement, la méthode de recherche et d'extraction.

Nom de l'outilVersionDonnéesMéthodeEmplacement
Outil 1vADate@Year0

J'ai donc 6 outils différents avec en moyenne 4 version pour chaque. Je ne pense pas que cela soit vraiment optimal avec "DECALER". Je ne peux pas mettre de fichier exemple de l'outil entier, si vous voulez vraiment je peux mettre un exemple de configuration et une version de l'algorithme général. Mais cela réglera pas le soucis du pas à pas ou en entier.

Bonjour,

sans erreur flagrante dans le code ni fichier de travail présentant l'anomalie ça va être difficile de t'aider.

La seule erreur que je note est que tu ne fixes pas les paramètres lookat et lookin dans le .find
Ceux-ci dépendent de la dernière utilisation manuelle de Rechercher et peuvent s'avérer incorrects au moment de l'utilisation.
Il faut systématiquement les fixer dans .find
eric

Rechercher des sujets similaires à "finds fonction marche seulement execution detaille"