Crevba
Messages postés3Date d'inscriptionmercredi 8 décembre 2010StatutMembreDernière intervention 9 mars 2011
-
8 mars 2011 à 15:21
Crevba
Messages postés3Date d'inscriptionmercredi 8 décembre 2010StatutMembreDerniè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
Crevba
Messages postés3Date d'inscriptionmercredi 8 décembre 2010StatutMembreDerniè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.