🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA InputBox dans Excel — les deux InputBox & quand utiliser chacune

|

VBA InputBox dans Excel — les deux InputBox & quand utiliser chacune

Testé sur : Excel 365 v2509 · Excel 2021 · Excel 2019 · dernière vérification le 06/06/2026

En bref — Excel propose deux fonctions nommées InputBox. La simple renvoie du texte ; celle d'Excel peut exiger un nombre, une date, ou même laisser l'utilisateur sélectionner une plage à la souris :

' 1. InputBox de VBA — renvoie toujours une chaîne (String)
Dim nom As String
nom = InputBox("Votre nom ?", "Configuration")

' 2. Application.InputBox — Type:=1 force un nombre, Type:=8 récupère une plage
Dim quantite As Variant
quantite = Application.InputBox("Combien ?", "Quantité", Type:=1)

Dim plage As Range
On Error Resume Next
Set plage = Application.InputBox("Sélectionnez les données :", "Plage", Type:=8)
On Error GoTo 0

Choisir la mauvaise, c'est la raison pour laquelle tant de macros InputBox traînent une boucle de validation écrite à la main dont elles n'ont pas besoin. Voici comment choisir.

Le modèle mental : même nom, deux outils différents

Tapez InputBox dans l'éditeur et VBA la propose deux fois — ce n'est pas un bug. Il y en a vraiment deux :

  • InputBox(...) — la fonction du langage VBA. Très simple, fonctionne dans toute application Office, et renvoie toujours une chaîne. Quoi que tape l'utilisateur, vous obtenez du texte.
  • Application.InputBox(...) — une méthode propre à Excel avec un atout en plus : un argument Type. Elle peut imposer un nombre, une date, un booléen ou une plage de cellules, et renvoie cette valeur typée — pas une chaîne à convertir ensuite.

Si MsgBox est l'interphone qui ne fait que diffuser, InputBox est le seul endroit où une macro rapide peut recevoir une valeur tapée sans bâtir tout un UserForm. Prenez la simple pour du texte libre ; prenez Application.InputBox dès que la réponse doit être un nombre, une date ou une plage.

Choisir selon la réponse attendue

' Texte libre → la simple InputBox est la plus courte
Dim note As String
note = InputBox("Ajouter un commentaire :")

' Un nombre à calculer → Application.InputBox Type:=1
Dim taux As Variant
taux = Application.InputBox("Taux d'intérêt % :", Type:=1)

' Une plage que l'utilisateur désigne à la souris → Type:=8 (l'atout maître)
Dim cible As Range
On Error Resume Next
Set cible = Application.InputBox("Choisir les cellules à additionner :", Type:=8)
On Error GoTo 0

Ce sélecteur de plage Type:=8 est la seule chose qu'aucun autre dialogue léger ne sait faire — l'utilisateur fait glisser sa souris sur la feuille et vous récupérez un véritable objet Range. Construire un UserForm avec un contrôle RefEdit juste pour saisir une plage, c'est démesuré quand ceci existe.

Les valeurs de Type à connaître

Type Accepte Renvoie
1 Un nombre le nombre (Double)
2 Du texte une chaîne (String)
4 Un booléen True / False
8 Une référence de cellule une Range (avec Set)
0 Une formule la formule en texte

On peut les additionner pour « l'un ou l'autre » — Type:=1 + 2 accepte un nombre ou du texte. L'intérêt de Type, c'est qu'Excel valide la saisie à votre place : tapez des lettres dans un champ Type:=1 et Excel les refuse avant même que votre code ne s'exécute. La boucle de validation que vous alliez écrire — déjà intégrée.

Le piège qui casse les deux : détecter l'annulation

C'est là que vivent la plupart des bugs d'InputBox, et c'est différent pour chaque version.

La simple InputBox renvoie une chaîne vide "" quand l'utilisateur clique sur Annuler — et aussi quand il laisse le champ vide et clique sur OK. Impossible de distinguer les deux :

Dim s As String
s = InputBox("Saisir un code :")
If s = "" Then Exit Sub      ' traite Annuler et « OK vide » pareil — souvent acceptable

Application.InputBox renvoie le booléen False à l'annulation. Le piège : il faut l'intercepter avant de l'affecter à une variable typée, donc stockez-le d'abord dans une Variant :

Dim v As Variant
v = Application.InputBox("Combien de lignes ?", Type:=1)
If VarType(v) = vbBoolean Then Exit Sub    ' l'utilisateur a annulé
' maintenant utilisable comme nombre en toute sécurité
Range("B1").Value = v

⚠️ N'écrivez pas If v = False Then Exit Sub ici. Si l'utilisateur saisit légitimement 0, alors v = False est aussi vrai (VBA traite 0 comme False), et votre macro s'arrête sur une saisie valide. Tester VarType(v) = vbBoolean est la seule vérification fiable — un vrai nombre revient en vbDouble, jamais en vbBoolean. Pour une plage (Type:=8), utilisez plutôt le motif Is Nothing du bloc En bref.

Arrêtez d'écrire des boucles de validation à la main

Comme Application.InputBox impose déjà le type, la classique boucle « redemander jusqu'à un nombre valide » est surtout du code gaspillé :

' ❌ La boucle qu'on écrit avec la simple InputBox
Dim s As String
Do
    s = InputBox("Saisir un nombre :")
Loop Until IsNumeric(s) And s <> ""

' ✅ Laisser Excel l'imposer
Dim n As Variant
n = Application.InputBox("Saisir un nombre :", Type:=1)
If VarType(n) = vbBoolean Then Exit Sub

Règle générale : si vous validez le type de la valeur, vous avez choisi la mauvaise InputBox — passez à Application.InputBox avec le bon Type. La validation du sens (dans la plage ? déjà existant ?) reste à votre charge.

Quand InputBox cesse d'être le bon outil

Une valeur, deux à la rigueur — les chaînes d'InputBox conviennent. Au-delà, elles s'effondrent : demandez cinq choses à la suite et l'utilisateur qui se trompe à la question deux n'a aucun retour en arrière, aucune vue d'ensemble, aucun « tout annuler ». C'est le signal de passer à un UserForm, où tous les champs sont visibles à la fois et modifiables jusqu'au clic OK. N'y recourez pas plus tôt que nécessaire — trois champs texte simples sans validation vivent très bien en trois InputBox.

Erreurs fréquentes avec InputBox (et la correction)

Symptôme Cause Correction
La macro s'arrête sur un 0 valide If v = False après Type:=1 (0 = False) Tester VarType(v) = vbBoolean à la place
« Incompatibilité de type » à la sélection de plage Dim r As Range recevant un Annuler (False) On Error Resume Next + If r Is Nothing
Le nombre revient en texte Simple InputBox utilisée (toujours String) Application.InputBox avec Type:=1
Le sélecteur de plage n'apparaît pas InputBox(...) au lieu d'Application.InputBox(...) Seule la version Application. a Type:=8
Annuler indistinguable d'un champ vide La simple InputBox renvoie "" pour les deux Passer à Application.InputBox (renvoie False à l'annulation)
Le texte par défaut ne s'affiche pas Placé dans le mauvais argument InputBox(prompt, titre, défaut) — le défaut est le 3e

Une invite est facile — la logique qui suit ne l'est pas

Récupérer un nombre ou une plage avec InputBox, c'est la partie simple. Le travail, c'est ce qui vient après — « pour la plage choisie, additionne chaque colonne, ignore les vides et signale tout ce qui dépasse la moyenne. » ExcelMaster Agent vous laisse décrire toute cette opération en français courant et écrit la macro — invite, gestion de la plage, et le reste. Essayer gratuitement →

Autres guides

FAQ

Qu'est-ce qu'une InputBox en VBA ? Une InputBox est une boîte de dialogue qui invite l'utilisateur à taper une valeur et la renvoie à votre macro. VBA en a en réalité deux : la simple fonction InputBox (renvoie toujours une chaîne) et Application.InputBox (propre à Excel, avec un argument Type capable de renvoyer un nombre, une date ou une plage).

Quelle est la différence entre InputBox et Application.InputBox ? InputBox renvoie toujours du texte, fonctionne dans toute application Office et est l'option la plus courte. Application.InputBox n'existe que dans Excel et ajoute un argument Type : elle peut imposer et renvoyer un nombre (Type:=1), une plage sélectionnée à la souris (Type:=8), et plus. Elle renvoie False à l'annulation.

Comment obtenir un nombre depuis une InputBox VBA ? Utilisez Application.InputBox("Invite", Type:=1) et stockez le résultat dans une Variant. Excel rejette automatiquement les saisies non numériques. Vérifiez l'annulation avec If VarType(v) = vbBoolean Then Exit Sub avant d'utiliser le nombre.

Comment détecter l'annulation dans une InputBox VBA ? La simple InputBox renvoie une chaîne vide "" à l'annulation (indistinguable d'un OK vide). Application.InputBox renvoie False ; stockez-le dans une Variant et testez VarType(v) = vbBoolean. Pour une plage (Type:=8), entourez l'appel de On Error Resume Next et testez If plage Is Nothing.

Comment laisser l'utilisateur sélectionner une plage avec InputBox ? Utilisez Application.InputBox("Choisir des cellules :", Type:=8) et affectez avec Set. Entourez l'appel de On Error Resume Next … On Error GoTo 0 pour qu'une annulation ne déclenche pas d'erreur de type, puis testez If plage Is Nothing Then Exit Sub.