web-dev-qa-db-fra.com

Comment vérifier si une cellule de date dans Excel est vide?

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?

7
Malin

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
7
Excel Hero

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
3
user4039065

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
1
u8it