Autant pour moi.
Le Top des cellules dépend de la feuille de calculs et commence à 0 pour la ligne 1
Le Top de l'userform dépend de l'application. Selon le nombre de barres d'outils affichées, la hauteur de la 1ère ligne de la feuille de calculs est donc variable.
Pour connaître le top application de la ligne 1, tu dois connaître la hauteur de la première ligne sur l'écran. J'ai "bricolé" quelque chose qui fonctionne pour mon écran. Consiste à connaître le Top de la barre d'outils affichée la plus basse.
Nécessite un clic sur l'userform pour le positionner.
Je ne comprends toujours pas pourquoi ce top ne s'initialise pas dans Userform_initialize. Ça a fonctionné une fois mais plus jamais par la suite (???)
Pour que ça fonctionne, utilise la déclaration Public de TopUsf dans un module standard
Public TopUsf As Single ' en tête d'un module standard
Dans le clic de ton bouton :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Private Sub CommandButton6_Click()
Dim BarreTop, LaBarre
Dim adresse As Range
For Each LaBarre In Application.CommandBars
If LaBarre.Visible = True Then
If LaBarre.Top > BarreTop Then 'And LaBarre.Top < 400 Then
BarreTop = LaBarre.Top
End If
End If
Next
BarreTop = BarreTop + 47 ' empirique -> Hauteur d'une barre + ?
Set adresse = Application.InputBox("Sélectionner une cellule / une ligne", "Titre", Type:=8)
Set Ad = Range(adresse.Address)
TopUsf = Ad.Top + BarreTop
Load UserForm1
UserForm1.Show
End Sub |
Enfin, dans le click de l'userform
1 2 3
| Private Sub UserForm_Click()
Me.Top = TopUsf
End Sub |
Pour le moment je n'ai pas mieux à t'offrir
(jamais eu ce pb, avec VBA 97, pourtant
)
Partager