Bonjour à tous,

Cette discussion est basée sur ma lecture de ce sujet.

Suite à la découverte (merci Jacques) des fonctions cachées (StrPtr entres autres), je m'interroge sur les "retours" de l'InputBox et sur l'existence de la valeur Null en VBA.

  1. Que renvoie une InputBox validée sans saisie?
  2. Que renvoie une InputBox annulée?


Selon ce test, on se rend bien compte qu'une annulation et une validation de saisie vide n'est pas la même chose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub test()
Dim c As String, entree As String, b1 As Boolean, b2 As Boolean, b3 As Boolean
'comparaison entre c (String vide) et InputBox annulée
entree = InputBox("Annulez SVP !!!")
b1 = (StrPtr(c) = StrPtr(entree))
b2 = (StrPtr(c) = 0)
b3 = StrPtr(entree) = 0
MsgBox "comparaison entre c (String vide) et InputBox annulée" & vbCrLf & _
    "StrPtr(c) = StrPtr(entree) : " & b1 & vbCrLf & _
    "StrPtr(c) = 0 : " & b2 & vbCrLf & _
    "StrPtr(entree) = 0 : " & b3
 
'comparaison entre c (String vide) et InputBox validée sans saisie
entree = InputBox("Validez sans saisie !!!")
b1 = (StrPtr(c) = StrPtr(entree))
b2 = (StrPtr(c) = 0)
b3 = StrPtr(entree) = 0
MsgBox "comparaison entre c (String vide) et InputBox validée sans saisie" & vbCrLf & _
    "StrPtr(c) = StrPtr(entree) : " & b1 & vbCrLf & _
    "StrPtr(c) = 0 : " & b2 & vbCrLf & _
    "StrPtr(entree) = 0 : " & b3
 
c = ""
'comparaison entre c = "" et InputBox annulée
entree = InputBox("Annulez SVP !!!")
b1 = (StrPtr(c) = StrPtr(entree))
b2 = (StrPtr(c) = 0)
b3 = StrPtr(entree) = 0
MsgBox "comparaison entre c = """" et InputBox annulée" & vbCrLf & _
    "StrPtr(c) = StrPtr(entree) : " & b1 & vbCrLf & _
    "StrPtr(c) = 0 : " & b2 & vbCrLf & _
    "StrPtr(entree) = 0 : " & b3
 
'comparaison entre c = "" et InputBox validée sans saisie
entree = InputBox("Validez sans saisie !!!")
b1 = (StrPtr(c) = StrPtr(entree))
b2 = (StrPtr(c) = 0)
b3 = StrPtr(entree) = 0
MsgBox "comparaison entre c = """" et InputBox validée sans saisie" & vbCrLf & _
    "StrPtr(c) = StrPtr(entree) : " & b1 & vbCrLf & _
    "StrPtr(c) = 0 : " & b2 & vbCrLf & _
    "StrPtr(entree) = 0 : " & b3
End Sub
Quid également de la valeur Null? Existe t'elle en VBA???
Oui, Non, pas vraiment...
Testons donc...

Test de comparaison entre la saisie vide (ou l'annulation) d'une inputbox et la constante VbNullString :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Sub essai()
Dim bon As Boolean, entree As String, L As Integer
  Do While Not bon
    entree = InputBox("veuillez entrer un nombre entier entre 1 et 20")
    Select Case entree
        Case vbNullString: Exit Do
        Case Else: Bon = True
    End Select
  Loop
  ' voyons ce que nous avons saisi
  MsgBox IIf(bon, "vous avez saisi " & entree, "vous avez annulé")
End Sub
Test de comparaison entre la saisie vide (ou l'annulation) d'une inputbox et un String non rempli :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Sub test2()
Dim bon As Boolean, entree As String, L As Integer, strTest As String
  Do While Not bon
    entree = InputBox("veuillez entrer un nombre entier entre 1 et 20")
    Select Case entree
        Case strTest: Exit Do
        Case Else: Bon = True
    End Select
  Loop
  ' voyons ce que nous avons saisi
  MsgBox IIf(bon, "vous avez saisi " & entree, "vous avez annulé")
End Sub