[EXCEL VBA] - Cellule de date Vide

Résolu/Fermé
freto Messages postés 1542 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 8 avril 2016 - 9 sept. 2008 à 15:30
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 10 sept. 2008 à 11:21
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...

5 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
10 sept. 2008 à 09:11
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
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
9 sept. 2008 à 17:27
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
freto Messages postés 1542 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 8 avril 2016 161
10 sept. 2008 à 08:58
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
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
10 sept. 2008 à 11:19
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
freto Messages postés 1542 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 8 avril 2016 161
10 sept. 2008 à 11:12
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
10 sept. 2008 à 11:21
Oui exact, c'est une erreur lors de la recopie, mais tu as corrigé :o)

Bonne continuation

;o)
0