Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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.
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.
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
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.
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...
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é?
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
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).
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.
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.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.