Problème recherche dichotomique d'une date

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

3 réponses

Crevba Messages postés 3 Date d'inscription mercredi 8 décembre 2010 Statut Membre Dernière intervention 9 mars 2011
9 mars 2011 à 15:06
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.
3
marion8316 Messages postés 75 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 septembre 2011 1
8 mars 2011 à 18:06
Bonsoir,

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

Feuille_Portefeuille.Cells(i, 11).Value

Didier
0
Crevba Messages postés 3 Date d'inscription mercredi 8 décembre 2010 Statut Membre Dernière intervention 9 mars 2011
9 mars 2011 à 08:57
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.
0
Rejoignez-nous