Autres Positionnement d'un UserForm

  • Initiateur de la discussion Initiateur de la discussion Salmander
  • 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 !

Salmander

XLDnaute Occasionnel
Bonjour,
Je m'arrache les cheveux avec le positionnement d'un UserForm.
Je souhaiterais m'en servir comme panneau de commande pour une feuille mais sa position n'importe où en fonction de l'utilisateur me gène.

Quelqu'un saurait-il comment placer le coin en haut à gauche de l'UserForm sur la cellule A1 ?

Merci par avance.
 
Oui, on peut effectivement placer à telle ou telle position.
Mon souci vient des écrans multiples et variation de hauteur des barres de menu.
Pour le moment j'ai ça qui résout le problème des écrans mais ça ne vise toujours pas A1...


VB:
Private Sub UserForm_Initialize()
    Me.startupPosition = 0
    Application.Goto Range("A1"), True
    Me.Left = Application.Left + 40
    Me.Top = Application.Top + 160
End Sub
 
Dernière édition:
et ben dis donc
la sub peut être dans un module ou directe dans le userform
bien entendu réutilisable puisque la cellule de ref est injectée en argument
je n'ai pas mis la gestion de freezepane(qui fausse tout) , mais si besoins me le dire
VB:
Private Sub UserForm_Initialize()
    ufposition [a1], Me
End Sub

Sub ufposition(cel As Range, uf As Object)
   'Patricktoulon
   Dim PpX#, zoo#, adroite#
   'adroite = cel.Width 'debloque si tu le veux a droite de la cellule
   uf.startupPosition = 0
    With ActiveWindow.ActivePane
        zoo = .Parent.Zoom / 100 'coeff zoom
        PpX = 1 / ((.PointsToScreenPixelsX(7200 / zoo) - (.PointsToScreenPixelsX(0) / zoo)) / 7200) 'coeff pixel avec zoom
        uf.Move .PointsToScreenPixelsX(adroite + cel.Left * zoo) * PpX, .PointsToScreenPixelsY(cel.Top * zoo) * PpX 'placement
    End With
End Sub
voila pas besoin de s’arracher les cheveux
Patrick
 
Bonjour
paque!!!! jy zui emruuuber
unnamed.gif
 
sinon dans sa version la plus simple on gère aussi le freezepane
VB:
Private Sub UserForm_Initialize()
    ufposition [d19], Me
End Sub

Sub ufposition(cel As Range, uf As Object)
    'Patricktoulon
    Dim PpX#, zoo#, adroite#, p As Pane, i&
    adroite = cel.Width 'debloque si tu le veux a droite de la cellule
    uf.startupPosition = 0
    With ActiveWindow
        Set p = .ActivePane
        If Intersect(cel, p.VisibleRange) Is Nothing Then
            For i = 1 To .Panes.Count
                If Not Intersect(cel, .Panes(i).VisibleRange) Is Nothing Then Set p = .Panes(i): Exit For
             Next
        End If
        zoo = .Zoom / 100 'coeff zoom
        PpX = 1 / ((.Panes(1).PointsToScreenPixelsX(7200 / zoo) - (.Panes(1).PointsToScreenPixelsX(0) / zoo)) / 7200) 'coeff pixel avec zoom
        uf.Move p.PointsToScreenPixelsX((adroite ) + cel.Left) * PpX, p.PointsToScreenPixelsY(cel.Top) * PpX 'placement
    End With
End Sub
explication:
si ligne et/ou colonne figée activepane donnera toujours la pane(panes.count)même si la cellule sélectée est dans un figé
en même temps cela est évident sinon on parlerait pas de (figer les volet)
conclusion ,en bouclant sur les panes on teste le intersect du visiblerange de chaque panes avec la cellule visée pour chopper la bonne panes
le coeffpixel avec la ligne poinstopixelsx par contre on prendra toujours la panes(1)
car dans les parenthèses on utilise une donnée numérique en dur et donc on applique le zoom
explication sur ce point du zoom
imaginons une cellule par exemple C1
en zoom 100 supposons que pointstoscreenpixelsx([C1].left donne 150
en zoom different elle donnera toujours le point ecran donc différent
par contre si je fait .panes(x). pointstoscreenpixelsx(150) en zoom <> de 100 le point que j'obtiens ne sera pas celui qu'on pourrait attendre voila pourquoi avec pointstoscreenpixelsx ou y utilisé avec une valeur numérique on appliquera le zoom tandis qu'avec le cells(x,y).left on ne l'utilisera pas

voila j'espère avoir été le plus clair possible


Patrick
 
Dernière édition:
et ben dis donc
la sub peut être dans un module ou directe dans le userform
bien entendu réutilisable puisque la cellule de ref est injectée en argument
je n'ai pas mis la gestion de freezepane(qui fausse tout) , mais si besoins me le dire
VB:
Private Sub UserForm_Initialize()
    ufposition [a1], Me
End Sub

Sub ufposition(cel As Range, uf As Object)
   'Patricktoulon
   Dim PpX#, zoo#, adroite#
   'adroite = cel.Width 'debloque si tu le veux a droite de la cellule
   uf.startupPosition = 0
    With ActiveWindow.ActivePane
        zoo = .Parent.Zoom / 100 'coeff zoom
        PpX = 1 / ((.PointsToScreenPixelsX(7200 / zoo) - (.PointsToScreenPixelsX(0) / zoo)) / 7200) 'coeff pixel avec zoom
        uf.Move .PointsToScreenPixelsX(adroite + cel.Left * zoo) * PpX, .PointsToScreenPixelsY(cel.Top * zoo) * PpX 'placement
    End With
End Sub
voila pas besoin de s’arracher les cheveux
Patrick
Merci Beaucoup,
Ça marche plutôt bien.
Le placement est parfait quand le zoom de la feuille de calcul est à 98%.
Je cherche comment régler ce très léger détail et je reviens ici dès que j'ai trouvé la solution.
 
- 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

G
Réponses
2
Affichages
1 K
GeoLek
G
N
Réponses
2
Affichages
2 K
Novice38
N
N
Réponses
4
Affichages
2 K
Novice38
N
A
  • Question Question
Réponses
2
Affichages
761
Antonin de la Motte
A
N
Réponses
1
Affichages
1 K
niniylle
N
G
Réponses
9
Affichages
5 K
Guillaume33
G
R
Réponses
2
Affichages
3 K
rofou13
R
Retour