Si vous sentez que cela devrait être vraiment facile mais je ne le fais pas fonctionner sans récupérer la valeur de la cellule à nouveau.
Pour commencer, j'ai 2 cellules de date:
Dim agreedDate As Date
Dim completedDate As Date
CECI FONCTIONNE .. (mais semble en désordre)
agreedDate = Worksheets("Data").Cells(Counter, 7).Value
completedDate = Worksheets("Data").Cells(Counter, 9).Value
If (IsEmpty(Worksheets("Data").Cells(Counter, 7).Value) = True) Or (IsEmpty(Worksheets("Data").Cells(Counter, 9).Value) = True) Then
[.. do stuff]
End If
CELA NE FONCTIONNE PAS - POURQUOI PAS?!
agreedDate = Worksheets("Data").Cells(Counter, 7).Value
completedDate = Worksheets("Data").Cells(Counter, 9).Value
If (IsEmpty(agreedDate) = True) Or IsEmpty(completedDate) = True) Then
[.. do stuff]
End If
Y a-t-il un moyen d'écrire l'énoncé if d'une manière claire et simple?
Etant donné que seules les variables de type Variant peuvent être vides, vous avez besoin d'un test différent pour les types Date.
Vérifier pour zéro:
If agreedDate = 0 Or completedDate = 0 Then
Mais un chemin plus sûr consisterait à modifier les variables en type Variant, puis à effectuer le test suivant:
If IsDate(agreedDate) = False Or IsDate(completedDate) = False Then
La fonction IsEmpty détermine indiqué si une variable a été initialisée . Si une cellule est vraiment vide, elle est considérée comme non initialisée du point de vue IsEmpty . Cependant, déclarer une variable dans VBA lui donne une valeur par défaut. Dans ce cas, les variables de type de date sont essentiellement 0 ou 30-Dec-1899 00:00:00 , comme le montre l'extrait court suivant.
Sub date_var_test()
Dim dt As Date
Debug.Print Format(dt, "dd-mmm-yyyy hh:mm:ss")
End Sub
Si vous souhaitez «ranger» votre code, vous pouvez également autoriser le retour booléen réel de la fonction IsEmpty pour résoudre la condition booléenne plutôt que de la comparer à True .
If IsEmpty(Worksheets("Data").Cells(Counter, 7)) Or IsEmpty(Worksheets("Data").Cells(Counter, 9)) Then
[.. do stuff]
End If
Étant donné que False est (à toutes fins pratiques) zéro, cela fonctionnera pour vos variables de type de date.
If Not (agreedDate or completedDate) Then
[.. do stuff]
End If
Comme l'a souligné Excel Hero, une variable de date ne peut pas être vide. En fait, une variable de date est un nombre, vous devriez donc pouvoir faire quelque chose comme ça. Notez également que le code ci-dessous utilise "Value2".
Sub test()
Dim d As Date
d = Range("A1").Value2
If d = 0 Then
MsgBox "ok"
Else
MsgBox "not ok"
End If
End Sub