[EXCEL VBA] - Cellule de date Vide

Résolu
Bonjour tout le monde.
Voici un bout de code de ma composition:
While (Sheet2.Cells(indLigne, "E").Value <> "" Or (result = False))
        If (param = dateCourante) Then
            result = True
        End If
        dateCourante = CDate(Sheet2.Cells(indLigne, "E").Value)
        indLigne = indLigne + 1
    Wend

Tout cela pour faire en sorte de parcourir une liste de valeurs dans une colonne contenant des dates.
L'arrêt se fait lorsque l'on tombe sur une cellule vide.
Le problème est que mon algo ne s'arrete jamais, et boucle jusqu'à l'overflow de l'integer qui représente le numéro de la ligne.
Quelqu'un aurait une idée du pourquoi du comment de cette chose svp?
Merci d'avance...

--
What's tiny, and yellow and very very dangerous?????
A canary with the super-user password.
Mouhahahaha
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. Bonjour,

    Dsl de m'incruster.

    Le but de cette fonction est de vérifier si une date passée en paramètre est bien contenue dans une liste de date.

    Si c'est le cas voilà comment je le ferai :

    Function Ferie(param As Date) As Boolean
     Dim indLigne As Integer
       
        indLigne = 2
        While (Sheet2.Cells(indLigne, "E").Value <> "" 
            If (Sheet2.Cells(indLigne, "E").Value = dateCourante) Then
                Ferie= True
                Exit Function
            End If
            indLigne = indLigne + 1
        Wend
        Ferie = False
        
    End Function


    ;o)
    1
    1. Contributeur
      Bonjour,

      Je suppose qu'a l'entrée du While result est False et param initialisé avec une date valide.

      Ces hypothèses faites, comme il y a un OR dans la condition du While cela signifie que la boucle s'arrête lorsque les deux conditions inverses sont réunies c'est à dire quand la cellule est vide ET que result = True.

      Si je comprends bien donc pour que celà s'arrête il faut une cellule vide Et qu'une cellule d'une ligne précédente soit égale à la valeur de la variable param...(pour que result passe à True)

      Si ces deux conditions ne sont pas réunies la boucle ne s'arrête pas...

      Me préciser si je comprends bien..

      A+
      0
      1. Effectivement, result est a False et param est bien initialisé.
        Ci dessous le code complet de ma fonction.
        Function Ferie(param As Date) As Boolean
            
            Dim result As Boolean
            Dim indLigne As Integer
            Dim dateCourante As Date
            result = False
            
            indLigne = 2
            dateCourante = CDate(Sheet2.Cells(indLigne, "E").Value)
            While (Sheet2.Cells(indLigne, "E").Value <> "" Or (result = False))
                If (param = dateCourante) Then
                    result = True
                End If
                dateCourante = CDate(Sheet2.Cells(indLigne, "E").Value)
                indLigne = indLigne + 1
            Wend
            Ferie = result
            
        End Function

        Précision sur la condition avec le Or: si l'un des deux élément est faux, alors elle devient fausse. (enfin il me semble)
        0
        1. Freto,

          Précision sur la condition avec le Or: si au mois l'un des deux éléments est vrai, alors l'ensemble est vrai.

          Tu confonds avec le And ...
          0
      2. Okey je teste et je te redis si sa fonctionne pour moi
        Okey sa fonctionne, mis a part une petite erreur
        Function Ferie(param As Date) As Boolean
         Dim indLigne As Integer
           
            indLigne = 2
            While (Sheet2.Cells(indLigne, "E").Value <> "" 
                If (Sheet2.Cells(indLigne, "E").Value = dateCourante) Then
                    Ferie= True
                    Exit Function
                End If
                indLigne = indLigne + 1
            Wend
            Ferie = False
            
        End Function

        C'est pas dateCourante mais param qu'il fallait mettre.
        En tout cas merci beaucoup sa fonctionne maintenant
        0
        1. Oui exact, c'est une erreur lors de la recopie, mais tu as corrigé :o)

          Bonne continuation

          ;o)
          0