Positionnement Userform Excel [Résolu]

- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 11 sept. 2012 à 19:37
Bonjour a tous !

J'ai un petit problème sur le positionnement de mon userform sous excel.
Je voudrais fixer mon userform sur ma feuille excel et non pas sur l'écran.
C'est a dire que mon userform soit figé sur une plage de cellule definie.

Merci pour vos lumières
A+
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Bonjour,
tu vas alors avoir beaucoup de chemin et de calculs à faire à faire !
des indications :
- une cellule a une propriété Left et une propriété Width. 0,0 correspond à la cellule 1,1
- l'objet application a également ces deux propriétés
- les coordonnées de l'angle supérieur gauche d'un Userform sont en échelle de pixels et sont définies par rapport à l'angle supérieur gauche de l'écran, pas de l'application Exel


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Pour te donner une idée meilleure de ce à quoi tu vas devoir t'affronter. === >>
Je t'ai dit plus haut que le userform était positionné en pixels par rapport au coin supérieur gauche de l'écran
Je t'ai dit qu'une cellule était positionnée par rapport au coin supérieur gauche de la feuille de calcul (ainsi, la cellule A1 a pour coordonnées 0,0
Or, pour faire ce que tu cherches à faire, il te faudrait pouvoir déterminer les coordonnées d'une cellule, non par rapport au coin supérieur gauche de la feuille de calcul, mais par rapport à celui de l'écran !
Que te permet d'extraire VBA ? ===>>
regarde

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox Application.Top & vbCrLf & Application.Height & vbCrLf & " pour " & Application.Caption
  MsgBox ActiveWindow.Top & vbCrLf & ActiveWindow.Height & vbCrLf & " pour " & ActiveWindow.Caption
  MsgBox Cells(2, 1).Top & vbCrLf & Cells(2, 1).Left
End Sub


Fais varier les choses (cache le ruban, bouge la fenêtre, etc ...)
Tu constateras que seule la fenêtre active ActiveWindows ne bouge pas (sa position), mais que cette position est : ni par rapport à l'écran, ni par rapport à l'objet application, mais par rapport à la feuille de calcul (son top, par exemple, est donc négatif)
Tu constateras par contre que le Top de l'objet application, lui, est modifié si on redimensionne la fenêtre ou qu'on la déplace.
Qu'à cela ne tienne, vas-tu dire !
utilisons les coordonnées de l'objet application. Oui mais ... te voilà sur la galère, car il te audrait alors considérer d'autres aspects, parmi lesqquels la hauteur du ruban, s'il est masqué ou non, si sont ou non masqués les titres, la barre de formule, etc ...
Je ne veux pas te dire que tout cela est impossible à réaliser (ce serait inexact), mai que le jeu n'en vaut pas la chandelle et qu'il faudrait passer non seulement par un grand nombre d'instructions VBA pour vérifier l'état de la fenêtre de l'application, mais en plus par des fonctions de l'Api de Windows.
Voilà voilà ...
______________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Reste que tu n'as pas exposé tous les tanants et aboutissants de ce que tu veux faire.
Or, il est possible (en fonction de ce que tu cherches à faire) que j'ai une solution simple.
Cela dépend ...
D'où l'intérêt de tout dire.



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
0
Merci
Salut !!!!

Merci beaucoup pour tes lumières !
Je pensais trouver une instruction bâtarde pour résoudre ce problème mais c'est raté.
Comme je suis un peu pressé je ne pense pas trop investiguer sur le positionnement pour l'instant(Quand le fichier sera entièrement valide je m'y attaquerai)
Étant simplement bricoleur sur excel,je vais soit éclater mon USF(contrôles fixent sur la feuille excel) ou lancer mon USF sur le survol d'une cellule(je conserverais ainsi l'aspect ouverture fermeture de l'USF).
C'est quand même dommage que l'on ne puisse pas faire ce positionnement tout con mais apparemment très rare au vu des différents forums existants.

Merci ucfoutu pour toutes tes idées!
je posterai si je réussi a positionner mon userform sur ma plage de cellule(joli challenge en vu !!)
Commenter la réponse de Yoyoblabla
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Ces précisions me donnent à penser que tu pourrais substituer à ce que tu cherches à faire un truc qui s'inspirerait de ceci :

Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim point As POINTAPI
  GetCursorPos point
  UserForm1.Show
  UserForm1.Top = point.Y / 1.332
  UserForm1.Left = point.X / 1.332
End Sub


Qui n'est pas extrêmement précis puisque dépend de l'endroit où, dans la cellule, le click est fait par l'utilisateur. Le positionnement est parfait si click fait exactement en haut et à gauche de la cellule.
Note le /1.332, qui est ici pour simplifier un peu la compréhension.
Tu trouveras dan,s mes sources de quoi procéder plus finement que par cette approximation (SCALEX et ScaleY)
Bonne chance
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
5622
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 décembre 2018
0
Merci
Bonjour,
Si cela peut t'aider mimizanzan à fait cela:


http://www.vbfrance.com/codes/AJUSTEMENT-USERFORM-VBA-CELLULE-FEUILLE-EXCEL_52575.aspx

C'est prêt à l'emploi @

+Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour, Yoyoblabla

Si tu es encore intéressé par la chose, dis-le ...
Je me suis un peu amusé et suis parvenu àç du "relativement" simple.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Pour être plus précis en ce qui concerne l'aspect "plus simple".
La seule fonction de l'API de Windows que j'utilise est GetSystemMetrics.
Tout le reste est à l'aide du seul VBA.
GetSystemMetrics n'est utilisée que pour résoudre les problèmes de paramètres locaux et être beaucoup plus précis quant au positionnement, que les "titres" soient ou non cachés.
Si d'autres sont intéressés et/ou preneurs : qu'ils se manifestent.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.