teste de position userform

patricktoulon

XLDnaute Barbatruc
Bonjour a tous j'aurais besoins de vos retours sur la postion du userform
ces retours doivent s'accompagner de la version excel utilisé et la version de window
exemple chez moi emplacement B3 correcte , W7 , excel 2007
je vous remercie par avance pour le temps que vous prendrez pour ma petite experience
voici le code a tester
'--------------------------------------------------------------------------
Sub test20()
Dim pppx#, plus#, z#
With ActiveWindow.ActivePane
pppx = (.PointsToScreenPixelsX(ActiveSheet.[A1].Width) - .PointsToScreenPixelsX(0)) / ActiveSheet.[A1].Width
L1 = (.PointsToScreenPixelsX([A1].Left) / pppx)
R1 = (.PointsToScreenPixelsY([A1].Top) / pppx)
End With
z = (ActiveWindow.Zoom / 100)
With UserForm1
.Show 0
plus = .Width - .InsideWidth
.Left = (L1 + [B3].Left + (plus / z)) * z
.Top = (R1 + [B3].Top + ((plus / 2) / z)) * z
End With
End Sub
'---------------------------------------------------------------------------
 

Jacky67

XLDnaute Barbatruc
Hello
W10.....Xl 2007
upload_2017-5-25_22-9-33.png
 

patricktoulon

XLDnaute Barbatruc
re
merci Messieurs
pierrejean donc W10 excel 2010 c'est bon
jacky67 ok il faut donc que trouve pourquoi j'ai ce petit ecart essaie en supprimant + ((plus / 2) / z))
car en effet les dimention cadre sont enregistré avec pour 2007 pour 2010 et plus c'est le shell qui s'en charge et comme c'est W10 tu n'a donc pas le cadre autour du userform ,ce qui explique cet ecart
esperant ton retour merci d'avance
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
re
merci Messieurs
pierrejean donc W10 excel 2010 c'est bon
jacky67 ok il faut donc que trouve pourquoi j'ai ce petit ecart essaie en supprimant + ((plus / 2) / z))
car en effet les dimention cadre sont enregistré avec pour 2007 pour 2010 et plus c'est le shell qui s'en charge et comme c'est W10 tu n'a donc pas le cadre autour du userform ,ce qui explique cet ecart
esperant ton retour merci d'avance
Avec
.Left = (L1 + [B3].Left) * z
.Top = (R1 + [B3].Top) * z

upload_2017-5-25_23-12-48.png


Bonne nuit
 

MJ13

XLDnaute Barbatruc
Bonjour à tous


Merci beaucoup Patrick pour ce code que je recherche depuis longtemps. cela fonctionne bien sur Win 7 et Excel 2010, il se positionne en B3.

Sinon, je l'ai adapté pour qu'il se positionne à droite de la cellule, ce qui m'intéresse ici. :)

Sub Test_USF_Aligne_Sur_Cellule()
Dim pppx#, plus#, z#
With ActiveWindow.ActivePane
pppx = (.PointsToScreenPixelsX(ActiveSheet.Range(ActiveCell.Address).Width) - .PointsToScreenPixelsX(0)) / ActiveSheet.Range(ActiveCell.Address).Width
L1 = (.PointsToScreenPixelsX(Range(ActiveCell.Address).Left) / pppx)
R1 = (.PointsToScreenPixelsY(Range(ActiveCell.Address).Top) / pppx)
End With
z = (ActiveWindow.Zoom / 100)
With UserForm1
.Show 0
plus = .Width - .InsideWidth
.Left = (L1 + [B2].Left + (plus - 10 / z)) * z + 20
.Top = (R1 + [A1].Top + ((plus - 150 / 2) / z)) * z
End With
End Sub
 

Patrice33740

XLDnaute Impliqué
Bonjour,

J'utilise ce code pour placer l'usf à droite de la cellule active :
VB:
Private Sub UserForm_Initialize()
Dim wsh As Worksheet  'Feuille
Dim cel As Range  'Cellule
Dim Tif As Single  'Top interieur fenêre
Dim Lif As Single  'Left interieur fenêre
Dim fzF As Single  'Facteur de zoom fenêtre
Dim dTs As Single  'Décalage Top du au scroll
Dim dLs As Single  'Décalage Left du au scroll
  ' Déterminer la position top et left du haut droit des volets de la fenêtre
  Set wsh = ActiveSheet
  ' - zoom et décalage dû au scroll
  With ActiveWindow
  fzF = .zoom / 100
  dTs = wsh.Rows(.SplitRow + 1).Top - wsh.Rows(.ScrollRow).Top
  dLs = wsh.Columns(.SplitColumn + 1).Left - wsh.Columns(.ScrollColumn).Left
  End With
  ' - prise en compte des options d'affichage
  With Application
  Tif = .Top + 25.5 + 18  '+ barre de titre + menus
  If .CommandBars.Item("Ribbon").Height > 100 Then Tif = Tif + 68.25  '+ ruban (non masqué)
  If .DisplayFormulaBar = True Then Tif = Tif + 20.25  '+ barre de formule
  If ActiveWindow.DisplayHeadings = True Then Tif = Tif + 15 * fzF  '+ titres colonnes
  Lif = .Left - 1.5
  If ActiveWindow.DisplayHeadings = True Then Lif = Lif + 22 * fzF  '+ titres lignes
  End With
  ' Positionner le formulaire
  Set cel = ActiveCell
  Me.StartUpPosition = 0
  Me.Top = Tif + (dTs + cel.Top) * fzF
  Me.Left = Lif + (dLs + cel.Offset(0, 1).Left) * fzF + 12
End Sub
 

patricktoulon

XLDnaute Barbatruc
bonjoir MJ13 drole d'adaptation
pour le mettre a droite d'une ccllule il te suffisait de prendre la cellule cible .offset(0,1).left
et les +10 et compagnie ça ne marchera que sur ton pc essaie le sur un autre pc tu verra
merci pour le retour
mon but est justement de trouver le moyen de ne pas mettre de numérique en dur dans le code a fin que cela sot universel
 

Patrice33740

XLDnaute Impliqué
Bonjour,

« et les +10 et compagnie ça ne marchera que sur ton pc »
C'est pas si simple que ça ! Tout dépend de ce qu'on veut faire.
Par exemple ...- 10 / z)) * z + 20 c'est pareil que ...)+30 et là, ça ne tient pas compte du facteur de zoom
Idem pour ...- 150 / 2) / z)) * z qui donne ...) - 75

Par contre; par exemple dans mon code,
Tif = .Top + 25.5 + 18
25,5 est la taille de la barre de titre et 18 celle de la barre des menus, dans les 2 cas avec un facteur de 100%, elles ne varient pas d'un ordinateur à l'autre (tout au moins proportionnellement).
Par contre elles varient avec le facteur de zoom
 

MJ13

XLDnaute Barbatruc
Bonjour à tous

@Patrick: En fait ton code que j'ai adapté, je l'ai fait un peu par hasard, en changeant les paramètres et cela a l'air de fonctionner quelque soit le zoom. Après il faut adapter les paramètres en fonction de la position recherchée.

Mais jusqu'ici, j'avais trouvé un code de Frédéric Sigonneau mais qui n'était pas adapté au zoom dans la feuille.

@Patrice: Merci aussi pour ton code qui a l'air de fonctionner.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 894
Messages
2 093 379
Membres
105 712
dernier inscrit
CARLO 82