Position de application.inputbox

  • 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 voudrait que Application.InputBox s'ouvre approximativement au niveau du bouton donc je passe en paramètre des coordonnées avec le code suivant.
VB:
Private Sub MonBouton_Click()
(...)
PosHautIB = Me.Top + Me.MonBouton.Top 'Me est le userform
PosGaucheIB = Me.Left
Set CellChoisie = Application.InputBox("Sélection de cellules", "Choisissez une cellule", , PosGaucheIB, PosHautIB, , , 8)
(...)
end sub

Ça ne fonctionne pas, Application.InputBox s'ouvre toujours à la dernière position où je l'ai déplacé manuellement.

Il semble que cela ne concerne que Excel 2007.

Avez-vous rencontré le même problème ?

Auriez-vous un contournement ? (N'y aurait-il que le USF avec un refedit mimant Application.InputBox ?)

Par avance, je vous remercie de vos réponses.
Guy
 
Dernière édition:
Re : Poistion de application.inputbox

bonjour,

essai comme ceci: (perso sous 2007 c'est ok sur la position de l'userform)

PosHautIB = Me.Top / 0.75 * 15
PosGaucheIB = Me.Left / 0.75 * 15
CellChoisie = InputBox("Sélection de cellules", "Choisissez une cellule", , PosGaucheIB, PosHautIB)
 
Dernière édition:
Re : Poistion de application.inputbox

Bonjour.

Mettez déjà la propriété ShowModal du Userform à False pour qu'il soit toujours affiché non modal, ce qui permet les actions Excel pendant qu'il est affiché.
Celle ci peuvent être interceptées directement dans l'userform par des procédures évènements. Déclarez en tête un Dim WithEvents Excel As Application. Pour qu'il devienne opérationnel en permettant la prise en charge des évènements, vous devez mettre dans l'Userform_Initialize: Set Excel = Application. Il ne reste qu'à utiliser les listes déroulantes qui surmontent la fenêtre de code pour installer les modèles de procédures qu'il vous faut.
 
Re : Poistion de application.inputbox

Merci Roland_M pour ta proposition

J'ai fait un test, mais j'ai besoin de "Application.InputBox" pour récupérer une cellule choisie par l'utilisateur ce que ne permet pas InputBox.

Le positionnement de Inputbox fonctionne franchement mieux en utilisant "/ 0.75 * 15". Pourquoi ?

Salutations
Guy
 
Re : Poistion de application.inputbox

Merci Dranreb pour ta proposition

J'ai rendu le UserForm non modal (c'est génial pour la mise au point, plus besoin d'arrêter le formulaire pour modifier des portions de code)

J'ai ajouté "Dim WithEvents Excel As Application" après "Option Explicit" et "Set Excel = Application" dans "Userform_Initialize".

Malheureusement, rien de cela n'a eu un impact sur le positionnement de "Application.InputBox" qui s'ouvre systématiquement à sa dernière position. 🙁

Salutations
Guy
 
Re : Position de application.inputbox

bonjour,

à ta question:
Le positionnement de Inputbox fonctionne franchement mieux en utilisant "/ 0.75 * 15". Pourquoi ?

réponse:
'Me.Postion est en point donc /.75(=en pixel) *15(twips par pixel) car ypos et xpos d'inputbox est en twips

EDIT: quand à application.inputbox, il ne se positionne pas !
 
Dernière édition:
Re : Position de application.inputbox

Merci Roland_M

Pour le positionnement, cela aurait été trop simple d'utiliser les mêmes unités de mesure.

P.... de "Application.InputBox" mais alors à quoi servent les 2 paramètres de positionnement ? (il n'y a que Bill qui pourrait avoir la réponse).
 
Re : Position de application.inputbox

J'ai ajouté "Dim WithEvents Excel As Application" après "Option Explicit" et "Set Excel = Application" dans "Userform_Initialize".

Malheureusement, rien de cela n'a eu un impact sur le positionnement de "Application.InputBox" qui s'ouvre systématiquement à sa dernière position.
Évidemment non ! Le but de la manoeuvre est de supprimez ces InputBox (vraiment stupides dans un Userform qui est déjà fait pour saisir des choses) et de les remplacer par quelque chose de plus intelligent, tel qu'une Private Sub Excel_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 
Re : Position de application.inputbox

Je peux difficilement utiliser "Excel_SheetSelectionChange" puisque l'utilisateur peut utiliser le contenu (ou l'adresse) de plusieurs cellules dans des champs différents du formulaire.


Salutations
Guy
 
Re : Position de application.inputbox

Bonjour.

Difficilement peut être mais sûrement pas impossiblement. J'ai un Userform pouvant servir à préparer n'importe quel type de travail nécessitant plusieurs plages diverses à préciser, avec un grand Label décrivant, à chaque étape, le rôle que doit y jouer la plage à sélectionner et des boutons pour les repasser en revue avant de valider le tout pour exécution.
Mais évidemment, faute de classeur joint je ne peux pas voir ce que vous voulez faire.
 
Re : Position de application.inputbox

Bonjour,

Je prépare un assistant au remplissage d'une feuille de calcul. Mon formulaire ressemble dans les principes à ce que vous décrivez sauf que je souhaite que l'utilisateur soit toujours libre de la séquence des actions qu'il enchainera : je transforme une procédure linéaire (donc très directive) et désagréable à utiliser en un formulaire.

A la réflexion, je pourrais utiliser "Excel_SheetSelectionChange" avec un formulaire contenant un bouton "Arrêter de l'assistant" et un grand label décrivant ce qu'il faut faire avec la cellule dans laquelle l'utilisateur à cliqué.

Je suis aussi le quasi unique utilisateur de ce que je programme, cela fait-il une différence avec programmer pour d'autres ?

Merci pour tous ces éléments.

Salutations
Guy
 
Re : Position de application.inputbox

Pas sûr d'avoir compris. Si oui, faites sélectionner la ou les plages nécessaires avant de cliquer sur un des boutons qui effectue une tâche spécialisée dessus. Rangez les Target rendus par la Excel_SheetSelectionChange dans un TRg() As Range global. S'il n'y a pas le compte de postes nécessaires dedans au moment du clic sur un bouton, signalez le dans un Label. Ou mieux, dans la Excel_SheetSelectionChange mettez Enabled = False les boutons qui n'ont pas le compte de plages nécessaires pour être exécutés. S'il y à tout, faites un Erase TRg après exécution.
 
Re : Position de application.inputbox

Bonjour,

Cette approche est intéressante, d'autant plus que j'utilise "ActiveCell" pour mettre une valeur par défaut dans "Application.InputBox". Dans mon idée, l'avantage de "Application.InputBox" réside dans le fais que l'on puisse commencer par afficher la feuille dans laquelle l'utilisateur doit cliquer ("Excel_SheetSelectionChange" -enable de boutons- ou un contrôle lors du clic, et un bouton "Afficher la feuille" devraient permettre de gérer ça) et que l'utilisateur puisse annuler (ne suis pas trop prévenant ?).

Avec un UserForm non modal, si j’abandonne "Application.InputBox" ne devrais-je pas aussi le faire avec "Application.FileDialog" (on travaille uniquement sur les classeurs ouverts, si l'utilisateur a besoin d'un autre classeur, il peut l'ouvrir lui même).

Mon formulaire travaille avec plusieurs feuilles de plusieurs classeurs. L'utilisateur étant libre de l'enchainement de ses actions, les données sont rangées dans des champs du formulaire au fur et à mesure de ses sélections (en plus j'évite les variables globales, mais mon approche est peut être trop rigide quand il s'agit de données partagées dans le cadre exclusif d'un formulaire).

Merci beaucoup pour ces pistes de réflexion.

Salutations
Guy
 
Re : Position de application.inputbox

Merci beaucoup Dranreb,

J'ai fait évoluer ma programmation du USF en généralisant à toutes les variables globales comme "Private WithEvents Classeur As Workbook" et "Private Sub Classeur_BeforeClose(Cancel As Boolean)"

A bientôt
Guy
 
- 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
Retour