Problème recherche dichotomique d'une date [Résolu]

Crevba 3 Messages postés mercredi 8 décembre 2010Date d'inscription 9 mars 2011 Dernière intervention - 8 mars 2011 à 15:21 - Dernière réponse : Crevba 3 Messages postés mercredi 8 décembre 2010Date d'inscription 9 mars 2011 Dernière intervention
- 9 mars 2011 à 15:06
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.

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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Crevba 3 Messages postés mercredi 8 décembre 2010Date d'inscription 9 mars 2011 Dernière intervention - 9 mars 2011 à 15:06
3
Merci
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.

Merci Crevba 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Crevba
marion8316 75 Messages postés mercredi 17 août 2011Date d'inscription 27 septembre 2011 Dernière intervention - 8 mars 2011 à 18:06
0
Merci
Bonsoir,

La valeur de 'i' est déterminé a quel moment dans la ligne ci-dessous

Feuille_Portefeuille.Cells(i, 11).Value

Didier
Commenter la réponse de marion8316
Crevba 3 Messages postés mercredi 8 décembre 2010Date d'inscription 9 mars 2011 Dernière intervention - 9 mars 2011 à 08:57
0
Merci
Elle est déterminé dans la sub principale qui appelle la sub de recherche. La valeur i est déclarée en public et est donc conservée lors du call.
Commenter la réponse de Crevba

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.