Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

  • Initiateur de la discussion Initiateur de la discussion Guy_M
  • Date de début Date de début

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 !

Guy_M

XLDnaute Occasionnel
Bonjour,

Je souhaite que l'utilisateur puisse choisir une valeur soit en désignant une cellule soit en saisissant une valeur.

A priori, je devrais faire un msgbox demandant le mode de saisie (à la main ou via cellule) suivi de inputbox adapté à la réponse (avec type:=8 ou type:=2)

Est-il possible de faire ça avec un seul dialogue (clique une cellule récupère la valeur qui peut être modifiée avant de faire ok) ?

Par avance, je vous remercie de vos réponses
Guy
 
Dernière édition:
Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Bonsoir,

Malheureusement cela sera un petit plus compliqué à mettre en œuvre que je ne l'aurai souhaité. Merci pour ces 2 réponses.

Après un test rapide, la solution de MichD fonctionne comme je le souhaite. J'ai maintenant un petit travail d'intégration.

A bientôt
Guy
 
Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Bonjour,

J'ai réussi à faire fonctionner la solution proposée par MichD au niveau application (avec un DIM WithEvents). Le souci est qu'en modal, la procédure qui appelle le Userform continue à s'exécuter alors qu'elle doit recevoir une valeur de celui-ci (comme le fait un InputBox). Si le Userform n'est plus modal, il est impossible de changer de feuilles. J'ai tenté avec un RefEdit mais ce n'est pas mieux.

Auriez-vous une solution pour que ce Userform se comporte comme InputBox ?

Je pensais faire comme ça :
Code:
userform1.show
do
loop while userform1.visible
Mais j'ai peur d'avoir un problème au moment de l'exécution du do...loop

Par avance, je vous remercie de vos réponses.
Guy
 
Dernière édition:
Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Je ne comprends pas pourquoi tu dois insérer un module de classe...

Mais regarde ce fichier...

Si tu désires que l'usager ne puisse pas fermer la fenêtre en cliquant sur le bouton "Annuler" ou "OK" aussi longtemps qu'il n'aura pas saisi quelque chose dans le textbox, désactive la ligne de code "Me.TextBox1 = "Votre choix?"" en plaçant une apostrophe devant la ligne de code dans le formulaire. L'usager peut toujours fermer le formulaire par la croix de la barre de titre...

Tu peux te déplacer d'une feuille à l'autre même si le formulaire est ouvert!

'--------------------------
Private Sub UserForm_Activate()
Me.TextBox1 = "Votre choix?"
End Sub
'--------------------------
 

Pièces jointes

Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Bonjour,

Merci beaucoup pour cette réponse.

Utiliser un module de classe permet de récupérer des données dans n'importe quelle feuilles de n'importe quel classeur : "Worksheet_SelectionChange" dans Feuil1 limite la saisie à Feuil1 bien que l'on puisse se déplacer dans d'autres feuilles.

Je souhaite que les instructions après "UserForm1.Show 0" ne s'exécute qu'après que l'utilisateur ait fermé le formulaire (OK, Annuler ou la croix).

Je continue de chercher.
Guy
 
Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Bonjour Guy,

Comme Michel , je ne comprends pas pourquoi ce module de classe .

Travailler dans d'autre fichier et même dans d'autres instances peut se réaliser dans un module classique .

Mais encore une fois , tout est trop vague dans ton besoin .

A décrire plus clairement , et joindre un fichier béta reprennant les contrainte de ta vraie appli en ayant à l'essentiel.

Cordialement
 
Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Bonjour,

Sans le module de classe, il est impossible au userform de récupérer une donnée dans feuil2 ou dans un autre classeur. Il se peut que j'ai trouvé la solution la plus compliquée.

Ci-joint l'exemple, j'ai :
- utilisé le module de classe (voir thisworkbook)
- ajouté des MSGBOX avant et après "userform1.show modeless" pour expliquer ce que je souhaite faire.

J'ignore si cela sera beaucoup plus clair. Mes pérégrinations avec Google m'ont montré que je ne suis pas le seul avec cette problématique mais je n'y ai pas encore trouvé une solution.

Par avance, merci beaucoup pour vos réponses.
Guy
 

Pièces jointes

Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Merci MichD, je vois que j'ai encore beaucoup à apprendre à propos d'Excel VBA.

Maintenant que ça fonctionne comme je le souhaite, comment faire pour travailler dans la procédure appelant UserForm1 avec la valeur saisie par l'utilisateur (UserForm1.TextBox1).

Par avance, merci pour vos réponses.
Guy
 
Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Essaie ceci, l'usager peut saisir la valeur de son choix ou
sélectionner une cellule qui représente la valeur de son choix, et
ce dans la feuille du classeur de son choix.

Il y a quelque chose qui me dit que c'est beaucoup plus simple!

'---------------------------------------------------------
Sub test()
Dim X As Variant

'Le code du début de la procédure

'Et au besoin...
X = Application.InputBox("Choisir une cellule ou saisir la valeur manuellement", Type:=11)
If TypeName(X) = "Boolean" Then
'Si l'usager clique sur le bouton Annuler
X = Empty
Else
MsgBox X
End If
'Le reste de ta procédure
End Sub
'---------------------------------------------------------
 
Re : VBA : saisi à la main d'une valeur ou via la désignation d'une cellule

Exactement MichD, c'est pas aussi élégant que le UserForm mais ça fait le boulot ! Et c'est super pratique, puisque même si la référence s'affiche, inpubox retourne le contenu de la cellule, pas de test sur le type de la données retournée (sauf boolean).

Pourquoi n'ai-je pas vu dans l'aide qu'on pouvait demander plusieurs types : 11 = 1+2+8

Merci beaucoup MichD, j'ai une solution opérationnelle à mon problème.
 
Dernière édition:
Re : VBA : saisie à la main d'une valeur ou via la désignation d'une cellule

Merci Si... pour cette proposition.

Refedit et inputbox type:=11 on l'air de fonctionner pareil sauf que inputbox retourne toujours la valeur alors qu'avec Refedit il faut d'abord voir si c'est un range.address valide puis récupérer la valeur.

A bientôt et merci pour toutes vos propositions.

Guy
 
Dernière édition:
- 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

Discussions similaires

Réponses
4
Affichages
441
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…