VBA : dysfonctionnement fonction Find : Excel ne trouve pas des valeurs

Résolu/Fermé
GG69 - 6 janv. 2020 à 16:55
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 6 janv. 2020 à 18:16
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

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 6 janv. 2020 à 17:06
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).

0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié le 6 janv. 2020 à 17:55
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


0
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié le 6 janv. 2020 à 18:17
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 !).
0