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 :

Problème recherche dichotomique d'une date [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut Problème recherche dichotomique d'une date
    Bonjour, je travaille sur une petite macro qui doit mettre à jour des données en fonction de date.

    Je dispose pour cela de la date recherchée et biensur la liste de dates permettant de ressortir les valeurs souhaitées.
    Ma liste de date correspond à la liste des heures au cours de l'année 2009 (soit 8760 heures, listées en ligne)

    Pour accélérer la recherche en sachant que j'ai plusieurs dates à rechercher j'ai construit une petite recherche dichotomique. Hélas elle coince... ou plutôt non, elle ne coince pas et tourne en boucle ad vitam eternam.

    La recherche se déroule sans problème jusqu'à ce qu'il tombe sur la date recherché, mais il continue ensuite de bouclé en ne considérant pas la date trouvé comme égale à la date recherchée.
    J'ai précédemment essayé d'effecter le même mode de recherche mais en utilisant directement des Range en Pt1,Pt2 et Pt3 au lieu de simple Integer. Hélas le résultat est identique.

    Les valeurs d'encadrement finales sont :
    31/01/2009 23:00
    01/02/2009 0:00
    01/02/2009 1:00
    La date recherchée est "01/02/2009 0:00", et malheureusement Pt3 correspond bien à la valeur de cette ligne, en colonne 1.


    Code Code Visual Basic : 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
    Private Sub Recherche_Date()
     
    'Recherche dicotomique de la cellule de début de la date d'application
    Dim Pt1 As Integer, Pt2 As Integer, Pt3 As Integer
    Pt1 = 2
    Pt2 = 8761
     
    Do
     
    Pt3 = Pt1 + Round((Pt2 - Pt1) / 2)
        If Feuille_Calcul.Cells(Pt3, 1).Value < Feuille_Portefeuille.Cells(i, 11).Value Then
            Pt1 = Pt3
        ElseIf Feuille_Calcul.Cells(Pt3, 1).Value > Feuille_Portefeuille.Cells(i, 11).Value Then
            Pt2 = Pt3
        End If    
    Loop Until Feuille_Calcul.Cells(Pt3, 1).Value = Feuille_Portefeuille.Cells(i, 11).Value
     
    LigneExtournement = Pt3
     
    End Sub

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut,jeter un oeil sur http://fr.wikipedia.org/wiki/Dichotomie

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut
    Le problème est que ma recherche trouve le bon résultat, mais qu'elle ne le considère pas comme tel.

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Utilise plutôt la méthode Find qui te donnera le résultat escompté (à chercher les paramètres à mettre)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut
    J'avais comme but d'utiliser la recherche dichotomique à la palce de la fonction find pour améliorer les délais de la macro, un peu dommage que ça ne fonctionne pas.

  6. #6
    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 idée de processus de recherche est intéressante, mais correspond je pense plus à un souci de tri que de recherche, surtout sous Excel où des fonctions natives (donc très rapides) sont faites pour..

    Il est plus efficace de s'orienter donc vers Find comme te l'a indiqué Mercatog, ou la méthode WorksheetFunction.Match pour des valeurs uniques aussi.

    Sinon ton souci (qui persistera avec les autres méthodes si format = pas bon ) doit-être un souci classique de format entre les contrôles qui gèrent des chaînes et les feuilles formatées en dates, vois ceci au besoin :

    Comprendre et gérer les dates sous Excel et en VBA

    cordialement,

    Didier

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut
    Ma liste de date n'était pas exact au millième de seconde près... Hélas VBA m'arrondissait tout dans ces affichages mais pas dans la comparaisson effective.
    J'ai corrigé ma liste, la recherche marche.

    Merci de vos réponses.

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

Discussions similaires

  1. Recherche SQL sur une date
    Par LoicH dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/08/2010, 16h20
  2. Problème de requête avec une date
    Par ghnawfal dans le forum SQL
    Réponses: 6
    Dernier message: 18/09/2008, 14h23
  3. Problème de flitre sur une date pour la création d'un recordset
    Par psykodumarteau dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/09/2008, 08h11
  4. Recherche dichotomique d'une ligne dans un fichier
    Par yarf dans le forum Général Java
    Réponses: 5
    Dernier message: 31/03/2008, 15h37
  5. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 11h19

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