IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche de date dans une liste [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut
    Bonjour,

    J'ai un problème avec la méthode Find.
    Lorsque je l'utilise pour rechercher une chaîne de caractères dans une liste, elle fonctionne très bien.
    Toutefois, il semble qu'elle regimbe lorsque la valeur recherchée est une date.
    Elle refuse de trouver la valeur cherchée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.Goto Reference:="Dte_Obs"
    Set O_Cell = Selection.Find(Dte)
    La variable Dte contient bien une date. La liste nommée Dte_Obs contient bien des dates. J'ai vérifié, en affichant les valeurs en format standard ou nombre, qu'elles ne comportaient pas de chiffre après la virgule correspondant aux heures non affichées dans un format date.
    J'ai aussi essayé en servant tous les paramètres de la méthode Find.
    Rien n'y fait, ma variable objet O_Cell reste désespérément "Nothing".

    Merci d'avance des lumières que vous pourriez m'apporter.

    En continuant ma recherche pour comprendre pourquoi cela ne marche pas, j'ai entré manuellement des dates dans ma liste. La méthode a fonctionné.
    Dès lors que j'y ai remis des formules comme
    =AS1+1
    , la méthode n'a plus fonctionné, même si je la libelle comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set O_Cell = Selection.Find(Dte, , xlValues)
    .
    .
    J'ai voulu réessayer avec des dates saisies à la main. Ca ne marche encore une fois plus ?????
    J'y perds mon VBA !

  2. #2
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut
    Bonjour,

    ta date est dans quel format ? Rentrée manuellement du style 10/01/2001 ou bien en format excel c'est à dire un chiffre tel que 40567.4419258101 pour la date d'aujourd'hui qui à l'écran apparait "24/01/11" par exemple.

    Vérifier cela constitue deja un premier élément de réponse car si tu lui demande de chercher "24/01/11" et que la vrai valeur de ta cellule est "40567.44" il ne va forcement pas la trouver. D'autre part tu peux renseigner des criteres de recherche concernant la fonction .Find afin d'affiner cette dernière. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Find(What:="xxxx", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False)
    Tout n'est pas utile, mais à mon avis précise dejà le Lookin:=XlValues ou bien XlFormulas suivant le type de donnée que tu cherches.

    En espérant t'avoir aider un petit peu,

    Bonne journée.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai déposé un classeur exemple disponible ici
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut
    Merci à vous pour votre aide.

    En fait, j'ai renoncé, dans ce programme, à me servir de la méthode Find et ai utilisé une bête boucle Do Until ... Loop.

    Ce qui me désespère, c'est que ce programme défectueux fonctionne très bien dans un autre classeur. C'est exactement le même programme (copier-coller). Dans l'un ça fonctionne, dans l'autre non.
    Frustrant, déstabilisant.

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Ce sont des traitement sensibles, attention aux points suivants :

    • la méthode Find mémorise les paramètres de la précédente utilisation, il faut en tenir compte à tous niveaux.
    • Pour les recherches, les tris, Excel utilise les Numéros de série sous-jacents aux dates, c'est signalé par Microsoft et sommes toutes logique quand on voit comment ça fonctionne...


    voir aussi : Comprendre et gérer les dates sous Excel et en VBA

    l'intérêt final est que Find si OK sera bien plus rapide qu'une boucle.

    cordialement,

    Didier

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut
    Bonjour,

    La rapidité d'exécution est en effet tout l'intérêt de cette méthode Find.
    Toutefois son fonctionnement me paraît assez erratique.

    En effet, il arrive parfois que, pour une raison qui m'échappe complètement, elle ne fonctionne pas. La zone de recherche est bien définie, et la valeur à chercher n'est pas trouvée.

    Le sommum dans cette affaire est que j'ai un projet Excel qui utilise cette méthode pour rechercher dans une sélection de cellules une date. Elle fonctionne à merveille.
    On m'a demandé la construction d'un autre projet qui ressemble assez au premier. J'ai tout naturellemnt repris la structure du premier (feuilles, zones de cellules...) et surtout un copier/coller de la routine de recherche de la date. Ca ne marche plus.
    J'utilise la méthode Find avec comme seul paramètre le "What".
    Que peut-elle mémoriser qui l'empêche de fonctionner ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche d'une date dans une liste
    Par TigerCX dans le forum Excel
    Réponses: 5
    Dernier message: 27/09/2013, 20h45
  2. Réponses: 3
    Dernier message: 03/11/2008, 11h09
  3. recherche par attribut dans une liste d'objet
    Par Jacobian dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 28/05/2008, 22h11
  4. recherche de valeur dans une liste lag lead
    Par fatsora dans le forum Oracle
    Réponses: 1
    Dernier message: 31/01/2008, 09h28
  5. Réponses: 2
    Dernier message: 25/09/2007, 21h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo