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'outil | Version | Données | Méthode | Emplacement |
Outil 1 | vA | Date | @ | 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