OVH Cloud OVH Cloud

Application.Inputbox problème de traitement du bouton annuler

18 réponses
Avatar
Brunos
Bonjour,

Quand j'utilise la méthode Application.InputBox pour choisir une plage de
cellules, je n'arrive pas à résoudre le cas où l'utilisateur clique sur
annuler.

Un exemple (tiré de
http://boisgontierjacques.free.fr/pages_site/inpubox.htm)
Sub saisie_adresse()
Set monchamp = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
For Each i In monchamp
i.Value = UCase(i.Value)
Next i
End Sub

Quand on clique sur le bouton Annuler on a une erreur 13 incompatibilité de
type.
C'est logique puisque la valeur renvoyée est False, alors que le type est
Range.
Connaissez-vous un façon de faire ? Je voudrais éviter d'avoir à traiter
l'erreur.

Merci de vos éclairages
Brunos

8 réponses

1 2
Avatar
isabelle
bonjour Bruno,

Sub saisie_adresse()
debut:
Saisie = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
Select Case TypeName(Saisie)
Case "Boolean"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Variant()"
For Each i In Saisie
i.Value = UCase(i.Value)
Next i
End Select
End Sub


isabelle

Bonjour,

Quand j'utilise la méthode Application.InputBox pour choisir une plage de
cellules, je n'arrive pas à résoudre le cas où l'utilisateur clique sur
annuler.

Un exemple (tiré de
http://boisgontierjacques.free.fr/pages_site/inpubox.htm)
Sub saisie_adresse()
Set monchamp = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
For Each i In monchamp
i.Value = UCase(i.Value)
Next i
End Sub

Quand on clique sur le bouton Annuler on a une erreur 13 incompatibilité de
type.
C'est logique puisque la valeur renvoyée est False, alors que le type est
Range.
Connaissez-vous un façon de faire ? Je voudrais éviter d'avoir à traiter
l'erreur.

Merci de vos éclairages
Brunos




Avatar
isabelle
correction pour traiter les objet range,


Sub saisie_adresse()
On Error Resume Next
debut:
Set Saisie = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
If Err > 0 Then On Error GoTo 0
x = TypeName(Saisie)
Select Case x
Case "Empty"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Range"
For Each i In Saisie
i.Value = UCase(i.Value)
Next i
End Select
End Sub


isabelle

bonjour Bruno,

Sub saisie_adresse()
debut:
Saisie = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
Select Case TypeName(Saisie)
Case "Boolean"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Variant()"
For Each i In Saisie
i.Value = UCase(i.Value)
Next i
End Select
End Sub


isabelle

Bonjour,

Quand j'utilise la méthode Application.InputBox pour choisir une plage
de cellules, je n'arrive pas à résoudre le cas où l'utilisateur clique
sur annuler.

Un exemple (tiré de
http://boisgontierjacques.free.fr/pages_site/inpubox.htm)
Sub saisie_adresse()
Set monchamp = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
For Each i In monchamp
i.Value = UCase(i.Value)
Next i
End Sub

Quand on clique sur le bouton Annuler on a une erreur 13
incompatibilité de type.
C'est logique puisque la valeur renvoyée est False, alors que le type
est Range.
Connaissez-vous un façon de faire ? Je voudrais éviter d'avoir à
traiter l'erreur.

Merci de vos éclairages
Brunos





Avatar
Brunos
Bonsoir Isabelle
Ton code marche pour le cas ou on clique sur annuler, mais le reste ne
fonctionne pas.
Saisie n'est pas considéré comme une plage.
Mais merci pour l'idée 'Select Case TypeName' il y a surement qqchose à
creuser là.
Bruno

"isabelle" a écrit dans le message de news:

bonjour Bruno,

Sub saisie_adresse()
debut:
Saisie = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
Select Case TypeName(Saisie)
Case "Boolean"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Variant()"
For Each i In Saisie
i.Value = UCase(i.Value)
Next i
End Select
End Sub


isabelle

Bonjour,

Quand j'utilise la méthode Application.InputBox pour choisir une plage de
cellules, je n'arrive pas à résoudre le cas où l'utilisateur clique sur
annuler.

Un exemple (tiré de
http://boisgontierjacques.free.fr/pages_site/inpubox.htm)
Sub saisie_adresse()
Set monchamp = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
For Each i In monchamp
i.Value = UCase(i.Value)
Next i
End Sub

Quand on clique sur le bouton Annuler on a une erreur 13 incompatibilité
de type.
C'est logique puisque la valeur renvoyée est False, alors que le type est
Range.
Connaissez-vous un façon de faire ? Je voudrais éviter d'avoir à traiter
l'erreur.

Merci de vos éclairages
Brunos




Avatar
isabelle
Bonsoir Isabelle
Ton code marche pour le cas ou on clique sur annuler, mais le reste ne
fonctionne pas.
Saisie n'est pas considéré comme une plage.
Mais merci pour l'idée 'Select Case TypeName' il y a surement qqchose à
creuser là.


oui, mais difficile de traiter les objets range avec "Set" sans "On Error",

Sub saisie_adresse()
On Error Resume Next
debut:
Set Saisie = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
If Err > 0 Then: Err.Clear: On Error GoTo 0 'claire et annule On Error
x = TypeName(Saisie)
Select Case x
Case "Empty"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Range"
For Each i In Saisie
MsgBox i.Address & " = " & i
Next i
End Select
End Sub

isabelle

Avatar
Brunos
Joli, l'idée est bien creusée !
Brunos

"isabelle" a écrit dans le message de news:


Bonsoir Isabelle
Ton code marche pour le cas ou on clique sur annuler, mais le reste ne
fonctionne pas.
Saisie n'est pas considéré comme une plage.
Mais merci pour l'idée 'Select Case TypeName' il y a surement qqchose à
creuser là.


oui, mais difficile de traiter les objets range avec "Set" sans "On
Error",

Sub saisie_adresse()
On Error Resume Next
debut:
Set Saisie = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
If Err > 0 Then: Err.Clear: On Error GoTo 0 'claire et annule On Error
x = TypeName(Saisie)
Select Case x
Case "Empty"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Range"
For Each i In Saisie
MsgBox i.Address & " = " & i
Next i
End Select
End Sub

isabelle



Avatar
papou
Bonjour

Finalement tu vas arriver avec une syntaxe plus longue et fastidieuse qu'une
simple gestion d'erreur claire et efficace.
Ca ne te fait pas réfléchir ?

Cordialement
Pascal

"Brunos" a écrit dans le message de news:

Joli, l'idée est bien creusée !
Brunos

"isabelle" a écrit dans le message de news:


Bonsoir Isabelle
Ton code marche pour le cas ou on clique sur annuler, mais le reste ne
fonctionne pas.
Saisie n'est pas considéré comme une plage.
Mais merci pour l'idée 'Select Case TypeName' il y a surement qqchose à
creuser là.


oui, mais difficile de traiter les objets range avec "Set" sans "On
Error",

Sub saisie_adresse()
On Error Resume Next
debut:
Set Saisie = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
If Err > 0 Then: Err.Clear: On Error GoTo 0 'claire et annule On Error
x = TypeName(Saisie)
Select Case x
Case "Empty"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Range"
For Each i In Saisie
MsgBox i.Address & " = " & i
Next i
End Select
End Sub

isabelle







Avatar
FFO
Rebonjours Brunos

Ta remarque suite à ma propsition ma suggéré cette parade :

On Error Resume Next
Set monchamp = Application.InputBox(prompt:="Choisissez un champ", Type:=8)
If monchamp <> "" Then
For Each i In monchamp
i.Value = UCase(i.Value)
Next i
MsgBox "test"
End If

Et là "test" n'apparait que si on a saisie une cellule et que celle-ci n'est
pas vide

Je pense que c'est un bon compromis

Qu'en penses tu ????



Merci de vous décarcasser.

Papou : merci pour ton exemple de gestion de l'erreur, mais j'aurais voulu
éviter d'en arriver là.

FFO : On Error Resume Next marche parceque la suite du traitement s'appuie
sur monchamp qui est vide, mais si je rajoute autre chose à la suite, ça
s'exécute. Exemple :
On Error Resume Next
Set monchamp = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
For Each i In monchamp
i.Value = UCase(i.Value)
Next i
MsgBox "test"
"test" s'affiche quand on clique sur Annuler.

Il doit bien y avoir une solution !?

Brunos


"FFO" a écrit dans le message de news:

Rebonjour Brunos

Ma proposition si elle résoud ta difficulté ne permet pas de fonctionner
pour une saisie normale

Mille excuses

Essaies plutôt :

On Error Resume Next
Set monchamp = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
For Each i In monchamp
i.Value = UCase(i.Value)
Next i

J'espère que la !!!!!


Bonjour,

Quand j'utilise la méthode Application.InputBox pour choisir une plage de
cellules, je n'arrive pas à résoudre le cas où l'utilisateur clique sur
annuler.

Un exemple (tiré de
http://boisgontierjacques.free.fr/pages_site/inpubox.htm)
Sub saisie_adresse()
Set monchamp = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
For Each i In monchamp
i.Value = UCase(i.Value)
Next i
End Sub

Quand on clique sur le bouton Annuler on a une erreur 13 incompatibilité
de
type.
C'est logique puisque la valeur renvoyée est False, alors que le type est
Range.
Connaissez-vous un façon de faire ? Je voudrais éviter d'avoir à traiter
l'erreur.

Merci de vos éclairages
Brunos












Avatar
Brunos
Ben oui, j'arrête pas de réfléchir justement ! ;-)
Je cherchais une façon de traiter le problème sans gestion d'erreur, je ne
l'ai pas trouvé. FFO a fait des propositions mais aucune ne marche
complétement.
Les autres réponses utilisent la gestion d'erreur, il y a pas mal de choses
intéressantes :
- la façon de Papou qui est très claire
- la façon de JB très concise
- la solution d'Isabelle (Select Case TypeName) me plaisait car je pensais
qu'on pouvait ajouter d'autres cas, mais finalement je ne vois que deux
retours différents possibles donc je n'utiliserai probablement pas select
case.
Merci à tous
Brunos


"papou" a écrit dans le message
de news:
Bonjour

Finalement tu vas arriver avec une syntaxe plus longue et fastidieuse
qu'une simple gestion d'erreur claire et efficace.
Ca ne te fait pas réfléchir ?

Cordialement
Pascal

"Brunos" a écrit dans le message de news:

Joli, l'idée est bien creusée !
Brunos

"isabelle" a écrit dans le message de news:


Bonsoir Isabelle
Ton code marche pour le cas ou on clique sur annuler, mais le reste ne
fonctionne pas.
Saisie n'est pas considéré comme une plage.
Mais merci pour l'idée 'Select Case TypeName' il y a surement qqchose à
creuser là.


oui, mais difficile de traiter les objets range avec "Set" sans "On
Error",

Sub saisie_adresse()
On Error Resume Next
debut:
Set Saisie = Application.InputBox(prompt:="Choisissez un champ",
Type:=8)
If Err > 0 Then: Err.Clear: On Error GoTo 0 'claire et annule On Error
x = TypeName(Saisie)
Select Case x
Case "Empty"
MsgBox "Vous devez sélectionner une plage"
GoTo debut
Case "Range"
For Each i In Saisie
MsgBox i.Address & " = " & i
Next i
End Select
End Sub

isabelle











1 2