Test VBA avec IsEmpty ?

kalgath

XLDnaute Nouveau
Bonjour à tous,

Je suis super débutant en VBA et j'essaye de faire un test tout bête : si ma cellule A1 est vide alors je veux que s'affiche le message "la cellule A1 est vide". Et si il y a quelque chose d'inscrit en A1, alors j'aimerais avoir le message "la cellule A1 est remplie".

Ma tentative :

Code:
Sub test()
    If IsEmpty(A1) = True Then
    MsgBox "la cellule A1 est vide"
    Else
    MsgBox "la cellule A1 est pleine"
    End If
End Sub

Le problème avec ce code c'est qu'il ne marche pas du tout. Qu'elle soit vide ou qu'elle soit pleine, le message "la cellule A1 est vide" s'affiche systématiquement.

Où ce trouve mon erreur ?

D'avance merci pour votre aide !!! :)

K.
 

tototiti2008

XLDnaute Barbatruc
Re : Test VBA avec IsEmpty ?

Bonjour kalgath,

IsEmpty permet de savoir si une variable a été initialisée, pas de tester si une cellule est vide

Code:
Sub test()
    If Range("A1) = "" Then
    MsgBox "la cellule A1 est vide"
    Else
    MsgBox "la cellule A1 est pleine"
    End If
End Sub
 

Cagouman

XLDnaute Nouveau
Re : Test VBA avec IsEmpty ?

Bonjour à tous,

Je suis super débutant en VBA et j'essaye de faire un test tout bête : si ma cellule A1 est vide alors je veux que s'affiche le message "la cellule A1 est vide". Et si il y a quelque chose d'inscrit en A1, alors j'aimerais avoir le message "la cellule A1 est remplie".

Ma tentative :

Code:
Sub test()
    If IsEmpty(A1) = True Then
    MsgBox "la cellule A1 est vide"
    Else
    MsgBox "la cellule A1 est pleine"
    End If
End Sub

Le problème avec ce code c'est qu'il ne marche pas du tout. Qu'elle soit vide ou qu'elle soit pleine, le message "la cellule A1 est vide" s'affiche systématiquement.

Où ce trouve mon erreur ?

D'avance merci pour votre aide !!! :)

K.

Bonjour (tardif)
Voici une solution avec IsEmpty
Sub test()
If IsEmpty(Range("A1")) = True Then
MsgBox "la cellule A1 est vide"
Else
MsgBox "la cellule A1 est pleine"
End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Test VBA avec IsEmpty ?

Bonjour.

En fait IsEmpty permet de savoir si une expression de type Variant, telle que la propriété Value d'un Range représentant une seule cellule, porte la valeur Empty, qui est aussi celle d'un Variant non initialisé, ou bien … réinitialisé à Empty !
Empty est à la fois une valeur et un sous type de donnée Variant.
 

Patrice33740

XLDnaute Impliqué
Re : Test VBA avec IsEmpty ?

Bonjour kalgath,

IsEmpty permet de savoir si une variable a été initialisée, pas de tester si une cellule est vide

Code:
Sub test()
    If Range("A1) = "" Then
    MsgBox "la cellule A1 est vide"
    Else
    MsgBox "la cellule A1 est pleine"
    End If
End Sub

Eh bien, non !

IsEmpty permet vraiment de tester si une cellule est vide, complètement vide !!! c'est à dire quand sa formule est ""

Alors que Range("A1") = "" est vrai quand une cellule contient une formule (donc n'est pas vide !) dont le résultat est ""
 

ROGER2327

XLDnaute Barbatruc
Re : Test VBA avec IsEmpty ?

Bonsoir à tous.


Un bon moyen pour savoir des choses est d'expérimenter. On peut avoir des surprises.​


Bonne nuit.


ℝOGER2327
#7985


Jeudi 26 Tatane 142 (Saint Glé, neurologue-aliéniste - fête Suprême Quarte)
21 Thermidor An CCXXIII, 9,3148h - carline
2015-W32-6T22:21:20Z
 

Pièces jointes

  • Vide.xlsm
    14.9 KB · Affichages: 189
  • Vide.xlsm
    14.9 KB · Affichages: 173

Dranreb

XLDnaute Barbatruc
Re : Test VBA avec IsEmpty ?

Bonsoir.
En ajoutant cette 4ième colonne à la fonction :
VB:
Function Vide(R As Range)
  Vide = Array(IsEmpty(R(1).Value), R(1).Value = "", R(1).HasFormula, TypeName(R(1).Value))
End Function
On y trouve "Empty" pour la 1ère ligne et "String" pour toutes les autres.
Je n'y ai éprouvé aucune surprise pour ma part.
 

ROGER2327

XLDnaute Barbatruc
Re : Test VBA avec IsEmpty ?

Re...


Bonsoir.
En ajoutant cette 4ième colonne à la fonction :
VB:
Function Vide(R As Range)
  Vide = Array(IsEmpty(R(1).Value), R(1).Value = "", R(1).HasFormula, TypeName(R(1).Value))
End Function
On y trouve "Empty" pour la 1ère ligne et "String" pour toutes les autres.
Je n'y ai éprouvé aucune surprise pour ma part.

  • J'attendais que IsEmpty(R.Value) renvoyât True lorsque R désigne une cellule vide.

  • J'attendais tout autant que R.Value="" renvoyât True lorsque R désigne une cellule contenant une chaîne de caractères de longueur nulle.

  • Que IsEmpty(R.Value) et R.Value="" puissent simultanément renvoyer True m'étonne :
    Je n'attendais pas qu'une cellule vide pût être non vide puisque contenant une chaîne de caractères (fût-elle de longueur nulle).

Comme vous le voyez, ma naïveté est désolante...


Bonne journée.


ℝOGER2327
#7986


Vendredi 27 Tatane 142 (Saint Pistolet à Merdre, jubilaire - fête Suprême Quarte)
22 Thermidor An CCXXIII, 3,3937h - caprier
2015-W32-7T08:08:41Z

Où allons-nous si les gens commencent à croire vraiment ce qu'on leur dit - et qui est fait pour n'être pas cru! Qui sait si, au lieu du mensonge, il ne faudra pas finir par leur dire un jour la vérité?
Vladimir Jankélévitch​
 

Dranreb

XLDnaute Barbatruc
Re : Test VBA avec IsEmpty ?

Chez moi les 2 1ers points sont respectés : IsEmpty(R.Value) renvoie True si TypeName(R.Value) vaut "Empty", et R.Value="" renvoie True pour une chaine nulle.
Après on peut regretter (ou non) qu'à la comparaison un Empty soit converti en une donnée qu'on pourrait qualifier d'élément neutre du type de l'autre terme, car Empty = 0 est aussi True.
Pour ce code :
VB:
Option Explicit

Function Vide(ByVal R As Range) As Variant()
Vide = Array(IsEmpty(R.Value), R.Value = "", R.HasFormula, DescrValRg(R))
End Function

Private Function DescrValRg(ByVal V) As String
Dim N°Err As Integer
DescrValRg = TypeName(V): If DescrValRg = "Range" Then V = V.Value: DescrValRg = TypeName(V)
Select Case VarType(V)
   Case Is >= vbArray:  DescrValRg = Replace(DescrValRg, ")", "1 to " & UBound(V, 1) & ", 1 to " & UBound(V, 2) & ")")
   Case vbDouble:       DescrValRg = DescrValRg & " =" & V
   Case vbCurrency:     DescrValRg = DescrValRg & " =" & Format(V, "0.0000")
   Case vbDate:         DescrValRg = DescrValRg & " =" & Format(V, "dd/mm/yyyy hh:mm:ss")
   Case vbString:       DescrValRg = DescrValRg & " =""" & Replace(V, """", """""") & """"
   Case vbBoolean:      DescrValRg = DescrValRg & " =" & IIf(V, "True", "False")
   Case vbError: N°Err = CInt(V): Select Case N°Err
      Case xlErrNull:   DescrValRg = DescrValRg & " =CvErr(xlErrNull)"
      Case xlErrDiv0:   DescrValRg = DescrValRg & " =CvErr(xlErrDiv0)"
      Case xlErrValue:  DescrValRg = DescrValRg & " =CvErr(xlErrValue)"
      Case xlErrRef:    DescrValRg = DescrValRg & " =CvErr(xlErrRef)"
      Case xlErrName:   DescrValRg = DescrValRg & " =CvErr(xlErrName)"
      Case xlErrNum:    DescrValRg = DescrValRg & " =CvErr(xlErrNum)"
      Case xlErrNA:     DescrValRg = DescrValRg & " =CvErr(xlErrNA)"
      Case Else:        DescrValRg = DescrValRg & " =CvErr(" & N°Err & ")"
      End Select: End Select
End Function
Les mêmes résultats que pour moi sont-ils affichés dans votre version d'Excel ? :
RIsEmpty(R.Value)R.Value=""R.HasFormulaDescrValRg(R)
VRAIVRAIFAUXEmpty
FAUXVRAIVRAIString =""
FAUXVRAIFAUXString =""
FAUXFAUXVRAIString =" "
FAUXFAUXFAUXString =" "
 

Dranreb

XLDnaute Barbatruc
Re : Test VBA avec IsEmpty ?

Bonsoir.
La leçon à en tirer c'est que si on veut dans une macro savoir exactement ce que contient la propriété Value d'une cellule, il faut commencer par déterminer son type de donnée avant de la comparer à quoi que ce soit.
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 494
Membres
103 234
dernier inscrit
matteo75654548