VBA : dysfonctionnement fonction Find : Excel ne trouve pas des valeurs [Résolu]

Signaler
-
Messages postés
23379
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 juillet 2020
-
Bonjour,
J'ai réalisé une macro qui copie des séries de données de fichiers volumineux dans de nombreux fichiers. Dans ce programme j'utilise la fonction Find à deux reprises :
Une première fois pour identifier un numéro de série, et ses valeurs associées (que je veux copier) ainsi que sa date(qui me permet de me positionner dans le fichier de destination).
La deuxième fois pour retrouver la date dans un des nombreux fichiers, et coller les valeurs à côté.

Je précise que les fichiers Excel où la recherche de la date est réalisée font 500 000 Lignes. Cela marche sur des fichiers mais pas d'autres donc je suppose que la taille des fichiers n'a pas d'influence sur la fonction recherche.

Avez-vous des idées ou des pistes de solutions ? J'ai cherché sur divers forums mais ne trouve pas d'indications me permettant d'avancer.

Voici l'extrait de mon code qui a fonctionné mais qui je fonctionne plus :
Dans ce code, l'erreur est générée sur la ligne : "b = d.Row"

"Erreur 91 : Variable Objet ou variable de bloc with non définie."

Je précise que :
-Je n'utilise pas la fonction with (dans mon programme entier)
-J'ai bien déclaré "dim d as range".
-Cet extrait de code est compris dans un boucle qui se répète à 13 reprises.
-Je suis sur Excel 2010


Set fichier = Application.Workbooks.Open(ChemintracésR50 & "Suivi facturation - " & Codechantier & " - " & Nomchantier & ".xlsx")
'Trouver la date la feuille de la courbe de charge
Sheets("Courbes de charges - Enedis").Activate

'Identifier et sélectionner les cellules de destination
'Recherche la date du relevé dans la colonne A
Set d = Range("A:A").Find(what:=Date_mesure, LookIn:=xlValues, lookat:=xlWhole)

'Affectation des coordonnées de la cellule contenant la date aux variables a et b
MsgBox i
a = 1 'numéro de colonne de la date
b = d.Row 'Numéro de ligne
e = a + 2 'numéro de colonne des valeurs
'activer la cellule de destination pour pouvoir coller les données
Cells(b, e).Activate
'Colle les valeurs
Selection.PasteSpecial
'Enregistre le fichier du site
fichier.Save
'Ferme le fichier du site
fichier.Close


Configuration: Windows / Chrome 79.0.3945.88

3 réponses

Messages postés
8128
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
24 juin 2020
1 432
Bonjour,

Le code que tu présente est partiel, on ne sait pas d'où vient Date_mesure
Dans tous les cas lorsqu'on utilise Find, il faut envisager le cas où ce qu'on cherche n'est pas trouvé ! (ici d = Nothing et par conséquence erreur sur d.Row (d est l'objet non défini).

Cordialement
Patrice

Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Messages postés
23379
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 juillet 2020
6 229
Bonjour à tous,

De plus .Find est assez spécial (et capricieux) sur les dates.
Avec comme paramètre LookIn:=xlValues (la bien mal nommée...), FIND effectue la recherche dans la propriété TEXT des cellules (c'est-à-dire dans la valeur affichée !).
Il faut rechercher Clng(ta_Date) avec
LookIn:=xlFormulas
qui ne dépend pas du format d'affichage.
Ou le plus simple est d'utiliser Equiv():
    Dim date1 As Date, lig As Variant
date1 = #1/22/2020#
lig = Application.Match(CLng(date1), [A:A], 0)
If IsError(lig) Then MsgBox "date absente"

eric


En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Bonjour à vous deux et merci pour votre retour rapide.

En fait je n'ai pas prévu le cas ou d= nothing car les dates journalières sont prévues jusqu'à 2060, avec 48 valeurs par jour, d'où la taille du tableau. Du coup il était impossible qu'excel ne trouve pas.

Par contre ces dernières heures j'ai creusé et j'ai résolu mon problème, j'y ai pensé par chance mais c'est TRES étonnant selon moi.

ma macro ne trouvait pas les valeurs car la largueur de la colonne contenant les dates était trop étroite. Ainsi s'affiche uniquement des #####.
J'ai cherché plusieurs heures mais l'élargissement de la cellule a résolu le problème.

Je trouve cela fou car pour moi l'affichage est fait juste pour l'utilisateur et excel doit pouvoir trouver les valeurs peu importe leurs mise en page, mais visiblement non.

Je tiens note de vos remarques en vue d'éventuels futurs blocages et vous remercie pour votre aide.

cordialement
Messages postés
23379
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 juillet 2020
6 229
Ca correspond à ce que je te disais :
Avec comme paramètre LookIn:=xlValues (la bien mal nommée...), FIND effectue la recherche dans la propriété TEXT des cellules (c'est-à-dire dans la valeur affichée !).