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
Partager