Type Mismatch

Bonjour à tous,

Le but de ma macro est de transférer des données depuis un fichier publié quotidiennement vers un fichier d'agrégation, sous forme de tableau.

Pour ça, la première partie, sur laquelle j'ai une erreur 91, prend la date du document quotidien et recherche la dite date dans le fichier d'agrégation.

Sub Intraday_Agg()
    Dim str_Date As String
    Dim rng_GTE, rng_GTS, rng_GCR As Range

    str_Date = Workbooks(2).Sheets("Recap Futures").Range("A1").Value 'récupère la date du fichier trading intraday

    Workbooks(1).Sheets("suivi quotidien").Activate
    rng_GTE = Columns(1).Find(What:=str_Date).Offset(0, 2) 'recherche la date dans le tableau d’agrégation,  renvoie object variable not set
     rng_GTS = Columns(1).Find(What:=str_Date).Offset(0, 3)
    rng_GCR = Columns(1).Find(What:=str_Date).Offset(0, 4)

Les trois dernières lignes renvoient une erreur 91 "object variable not set" alors que les variables en question sont déclarées. J'ai essayé d'ajouter ' Set ' devant ' rng_GTE' mais ça me renvoie la même erreur.

C'est la partie ' .Find(What:=str_Date) ' qui a l'air de poser problème.

Merci de votre aide et de vos suggestion.

Bonjour,

il faut vérifier ce que renvoie la méthode Find, il suffit juste d'appliquer l'exemple de l'aide VBA …

En utilisant la syntaxe du macro recorder j'arrive toujours a une erreur "type mismatch", même en remplaçant mon string str_Date par "16/04/2015". Comme s'il ne voyait pas que rng_GTE était un range, ou si la fonction find renvoyait autre chose qu'un range.

CapitalRisk a écrit :

En utilisant la syntaxe du macro recorder j'arrive toujours a une erreur "type mismatch", même en remplaçant mon string str_Date par "16/04/2015". Comme s'il ne voyait pas que rng_GTE était un range, ou si la fonction find renvoyait autre chose qu'un range.

la propriété offset s'applique à un objet range. dans ce cas-ci, la date n'est pas trouvée, donc l'objet range n'est pas défini et tu reçois l'erreur 91.

l'instruction "find" sur des dates est délicate à utiliser bien vérifier que le format du search est compatible avec le format de la date dans la colonne recherchée. (la date est-elle au format texte ou au format date, si format date contient-elle également l'heure, ...)

de plus si tu définis dim xxx as range, tu dois utiliser l'instruction set.

En changeant les dates en valeur (42110 pour le 16/03/2015) et en faisant une recherche sur le string en question (.Find(What:="42110")) j'ai toujours la même erreur, type mismatch...

Il ne devrait pas y avoir d'erreur, et je ne vois pas d'autre moyen pour cette manip...

re-bonjour,

essaie ceci

Sub Intraday_Agg()
    Dim str_Date As String
    Dim rng_GTE, rng_GTS, rng_GCR As Range

    str_Date = Workbooks(2).Sheets("Recap Futures").Range("A1").Value 'récupère la date du fichier trading intraday

    Workbooks(1).Sheets("suivi quotidien").Activate
    set rng_GTE = Columns(1).Find(datevalue(str_Date)).Offset(0, 2) 'recherche la date dans le tableau d’agrégation
    set rng_GTS = Columns(1).Find((datevalue(str_Date)).Offset(0, 3)
    set rng_GCR = Columns(1).Find((datevalue(str_Date)).Offset(0, 4)

La méthode Find fonctionnant selon l'affichage, il faut donc une égalité dans la présentation de la cellule source et

de la plage de recherche et évidemment mieux vaut utiliser la propriété Text au lieu de Value

Un grand merci à toi h2so4, j'ai utilisé ton code et ça marche parfaitement!

Merci aussi Marc, je ne connaissais pas cette propriété, clairement plus pertinente ici.

Merci pour votre aide.

Je clos le thread, résolu.

Rechercher des sujets similaires à "type mismatch"