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 :

Confusion de résultats dans recherche des occurrences d'une valeur avec Find sur des dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut Confusion de résultats dans recherche des occurrences d'une valeur avec Find sur des dates
    Bonjour,

    Voici le problème qui m'amenne ici :

    Je veux trouver dans une colonne la première et la dernière occurence d'une date.
    Concrètement, il s'agit de l'historique de cotation du cac40 depuis le 1er janvier 2011 minute par minute.
    Je veux donc trouver pour jour 1 : ligne 1 à 200, jour 2: ligne 201 à 350 etc...
    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Sub toto()
        Dim BORNE_P As Range, BORNE_N As Range, BORNE_9H As Range
        Dim i As Double, j As Double
     
        Dim DL As Double
        DL = 0
     
        Set WS_SOURCE = Sheets("Travail")
        Dim CharDate As Date
     
        With WS_SOURCE
            DL = .Columns(1).End(xlDown).Row ' Trouve la derniere ligne de la colonne
            Debug.Print "Derniere ligne : " & DL
            For i = 2 To DL
     
                CharDate = CDate(.Cells(i, 1).Value) ' Valeur recherchée
                Set BORNE_P = .Columns(1).Find(CharDate) ' 1ere occurence
                Set BORNE_N = .Columns(1).Find(CharDate, SearchDirection:=xlPrevious) ' Dernière occurence
     
                Debug.Print BORNE_P.Row & " : " & BORNE_N.Row
     
                i = BORNE_N.Row + 1 ' Passe à la journée suivante
                Set BORNE_P = Nothing
                Set BORNE_N = Nothing
     
                Next i
        End With
     
    End Sub
    Il marche très bien... dans certains cas. Je m'explique, le 1er jour de recherche est le 03/01/2011.
    Si je lance le code j'obtient : http://imageshack.us/f/526/66798249.png/
    Je n'arrive pas à comprendre pourquoi, le programme butte sur la date 03/11/2011 et me l'indique comme étant le 03/01/2011.

    En effet du moment que je supprime toutes les valeurs pour le 03/11/2011 :
    http://imageshack.us/f/339/10914709.png/
    Tout marche comme sur des roulettes...

    J'avoue être un peu perdu sur le sens des choses...

    Je me suis permis de le mettre sur RS, car il est trop lourd pour le mettre en PJ (8mo) et est au format xlsm.

    Merci d'avance pour votre aide !

  2. #2
    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,

    Ton fichier ne serais pas trop gros si tu faisais l'effort de supprimer les milliers de lignes non significatives pour reproduire le problème
    A la limite 4 lignes pour chaque dates significatives dont les 2 qui se télescopent, bref 40 lignes serait déjà plus que suffisant...
    Ton contexte étant par ailleurs bien décris.

    En faisant un minimum d'effort de recherche tu te serais aperçu qu'un fil quelques lignes avant ton message traitait du même problème
    http://www.developpez.net/forums/d11...omprehensible/

    Donc déjà voir l'importance pour Find de préciser tous les paramètres pour ne pas toi même te piéger suite à d'autres manips sur une l'instance en cours.

    Ensuite tu peux tester avec le paramètre "LookAt:=xlWhole" pour voir si ça marche et nous tenir au courant bien que je pense de plus en plus que ce ne soit qu'une pirouette en non le fond du problème ( qui vient des interprétations US / autres langues).

    En dernier pour ton cas précis, voici comment je procéderais, ce qui devrait te donner une solution béton. Je fais ainsi sur les bases de données clients et pas de souci.

    Vu que ta feuille est une feuille de données et pas une présentation (et qu'en colonne B elle comporte les dates lisibles sous un format autre) , je ferais ceci :

    - 1 Un clic sur la A de la colonne A et mettre Standard pour le format de cellules => tu te retrouves avec des numéros du coup ce qui est tout à fait normal (numéros de série).

    - 2 tu transformes ton code comme ci-après (sauf qu'encore une fois, il faudrait que tu spécifies les paramètres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set BORNE_P = .Columns(1).Find(CLng(CharDate))  ' 1ere occurence
    Set BORNE_N = .Columns(1).Find(CLng(CharDate), SearchDirection:=xlPrevious) ' Dernière occurence
    PS : attention OK pour des dates, pas pour des dates-heures !

    Vu que tu travailles sur le codage des dates natif d'Excel, et qu'un numéro de série est unique, tu seras OK sans souci.
    Ceci bien sûr pour une base de données correcte ou la colonne date ne comporte que des dates , si on s'amuse à y mettre d'autres valeurs dont des nombres qui peuvent égaler un numéro de série, il est évident que ...

    cordialement,

    Didier

Discussions similaires

  1. Une fonction recherchant l'occurrence d'une chaîne dans un fichier texte
    Par l_autodidacte dans le forum Vos Contributions VBScript
    Réponses: 5
    Dernier message: 11/05/2012, 14h30
  2. Réponses: 3
    Dernier message: 06/06/2011, 12h56
  3. Problème résultat dans recherche multicritères
    Par MAMANHOU dans le forum IHM
    Réponses: 36
    Dernier message: 12/06/2010, 19h14
  4. Réponses: 11
    Dernier message: 26/09/2009, 11h33
  5. ajouter des occurrences a une variable dans une table
    Par sssssssam dans le forum SAS Base
    Réponses: 2
    Dernier message: 01/04/2009, 14h53

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