Positionnement Userform Excel

Résolu
Yoyoblabla - 29 août 2012 à 18:54
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur 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+

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 août 2012 à 08:00
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 août 2012 à 08:55
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 août 2012 à 21:49
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
1
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 !!)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 août 2012 à 10:33
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
30 août 2012 à 11:04
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 sept. 2012 à 16:39
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 sept. 2012 à 19:37
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
0
Rejoignez-nous