InputBox Un problème de taille

Il est impossible de déterminer avec une InputBox si l'on a choisi le bouton "Annuler" ou le bouton "Ok" sans rien saisir.

Dans les deux cas, la valeur retournée est une chaine vierge ("").

Dim Reponse As String
Reponse = InputBox("Valeur ?")
If (Reponse = "") Then MsgBox "Chaine vide !" ' Annulation par l'utilisateur ou erreur de saisie ?

Hors dans un programme, il est essentiel de faire la distinction.

Avec le bouton "Annuler", c'est une interruption du programme voulue par l'utilisateur.

Avec le bouton "Ok" et une saisie inexistante, c'est une erreur de l'utilisateur.

StrPtr

StrPtr est une fonction non documentée de Visual Basic, vous l'utilisez donc à vos risques et périls (mais à ce jour, je n'ai constaté aucun soucis).

Elle contient l'adresse mémoire d'une variable de type chaine (String). C'est une variable de type pointeur sur une chaine de caractères UNICODE.

Cette fonction retourne une adresse, elle sera de type Long sur les versions 32 bits et LongPtr sur les versions 64 bits.

Cette fonction est utilisable sur toutes les versions de Visual Basic et V.B.A..

Dim StrAddress As Long

Elle retourne la valeur zéro (0) si l'opérateur choisi le bouton "Annuler". Avec le bouton "Ok", elle contient l'adresse mémoire de la valeur saisie dans l'InputBox, même si cette valeur est une chaine vide.

Exemple détaillé

Commençons par déclarer nos deux variables, le résultat de l'InputBox et l'adresse.

Dim StrAddress As Long, Response As String

J'affiche l'InputBox de manière classique.

Response = InputBox("Valeur ?")

Usage de StrPtr()

Récupérer l'adresse de la variable

C'est ici qu'intervient la fonction StrPtr().

StrAddress = StrPtr(Response) ' Adresse de la variable Response.

Tester l'adresse

Je regarde maintenant si l'adresse est égale à zéro (0), si c'est la cas, c'est le bouton "Annuler" qui a été choisi.

If (StrAddress = 0) Then
  MsgBox "Bouton Annuler"

Il me reste à tester quand la variable StrAddress est différente de zéro (0), si la variable Response est vide.

Else
  If (Response = "") Then
    MsgBox "Erreur !"
  Else
    MsgBox Response

Grâce à StrPtr, InputBox est utilisable dans vos programmes.

Précision

Sur Microsoft Excel, il existe une InputBox plus complète que la fonction standard.

Elle fait partie de l'objet Application et comporte un paramètre supplémentaire (Type) qui indique le type de contenu attendu.

Application.InputBox = (Prompt := "Valeur ?", Type := ...)

Consultez l'aide de Visual Basic pour plus d'nformations.

Code source

Classeur Microsoft Excel (version 2010).

Fichier .BAS.


Achetez mon ouvrage !

Mon PDF « Créer un planning perpétuel sur Microsoft Excel sans macro » est disponible à la vente.

Pour plus d’informations, rendez-vous sur la page dédiée.