Excel VBA - Naviguer dans un très grand userform

Résolu/Fermé
TonyLucky - 25 juin 2021 à 11:16
 TonyLucky - 26 juin 2021 à 13:55
Bonjour à tous,

Je travaille sur un jeu de course de voitures. J'ai "dessiné" un circuit sur un USF qui est plus grand que mon écran.
Ce que je souhaite, c'est à faire en sorte que mon USF "se déplace" en fonction de la position de la voiture, afin que celle-ci soit toujours visible. J'ai mis des scrollbars, et j'arrive à générer deux déplacements d'écran. Puis, rien ne se passe.
Hauteur du USF : 1500. Largeur : 2000
Voilà le code que j'utilise pour me positionner dans l'USF, en fonction de la position de la voiture (définie par la variable i, du label qui sert de case route - oui, je sais, un case select serait mieux dans ce cas, et c'est ce que je ferai quand j'aurai, grâce à vous, résolu le présent problème !) :

If i = 5 Then
    Me.ScrollTop = 0
    Me.ScrollLeft = 2000
    ElseIf i = 9 Then
    Me.ScrollTop = 2000
    Me.ScrollLeft = 2000
    ElseIf i = 12 Then
    ScrollLeft = 5000
    Me.ScrollTop = 2000
    ElseIf i = 15 Then
    ScrollLeft = 5000
    Me.ScrollTop = 5000
    End If



J'ai essayé avec différentes valeurs gauche et haute, sans succès. D'après ce que je comprends, les valeurs x et y sont les positions par rapport à l'écran, ce qui expliquerait peut-être pourquoi il ne se passe rien au delà de ces valeurs. Comment faire, alors ?
J'avoue n'avoir rien trouvé sur le net.
Je joins mon fichier ; il est pour l'instant très simple et très léger.
https://www.cjoint.com/c/KFzjl6qoola


PS : je suis en 64bits


Merci par avance de vos suggestions
Jean

Configuration: Windows / Firefox 89.0
A voir également:

5 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 juin 2021 à 11:37
Bonjour,

voir ceci:

https://www.commentcamarche.net/faq/48339-deplacer-avec-la-souris-un-userform-sans-barre-de-fenetre

1
Bonjour,
Merci d'avoir pris le temps de me lire.
J'ai testé le code que vous me proposiez sur mon USF. Cela fonctionne avec la souris, mais incomplètement, même avec l'exemple donné, puisqu'on ne peut pas "sortir" de l'écran par le haut.
De plus, il faut que le déplacement de l'USF se fasse automatiquement, en fonction de la position de la voiture.
Je vais essayé d'adapter ce code pour l'automatiser, mais je ne suis pas sûr que cette approche soit la bonne.
Pour info, j'ai dans d'autres applis des USF très hauts dans lesquels je peux monter et descendre sans problème avec la souris ou le curseur du scroll bar. Je suppose donc que c'est possible.
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 Ambassadeur 1 557
25 juin 2021 à 14:05
bonjour,
Tu n'as pas essayé avec de bonnes valeurs gauche et haute. Essaie avec des valeurs beaucoup plus petites.
As-tu affiché, à chaque étape, les valeurs de Me.ScrollTop & Me.ScrollLeft, par exemple via msgbox?
Cela t'éclairera.
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557
25 juin 2021 à 15:41
suggestion, pour tester:
Private Sub CommandButton1_Click() 'lancer la voiture

Debug.Print "scroll " & Me.ScrollHeight & " " & Me.ScrollWidth
Debug.Print "Me " & Me.Height & " " & Me.Width; ""
If Application.Width < Me.Width Then    'Test si la fenètre Horizontale < le formulaire
      Me.ScrollWidth = Me.Width            'Taille du scrollbar horizontal
      Me.Width = Application.Width
End If
If Application.Height < Me.Height Then  'Test si la fenètre Verticale < le formulaire
      Me.ScrollHeight = Me.Height          'Taille du scrollbar horizontal
      Me.Height = Application.Height
End If
Debug.Print "scroll " & Me.ScrollHeight & " " & Me.ScrollWidth
Debug.Print "Me " & Me.Height & " " & Me.Width
Dim oldtop As Single, oldleft As Single
Me.ScrollLeft = 0
Me.ScrollTop = 0
Do
    oldtop = Me.ScrollTop
    Me.ScrollTop = Me.ScrollTop + 1
    oldleft = Me.ScrollLeft
    Me.ScrollLeft = Me.ScrollLeft + 1
    DoEvents
Loop Until oldtop = Me.ScrollTop And oldleft = Me.ScrollLeft
Debug.Print oldtop
Debug.Print oldleft
End Sub
0
Merci de cette réponse et de cette piste. J'ai essayé des tas de valeurs différentes, grandes ou petites, mais je bloque toujours sur le même point. En fait, il semblerait que le formulaire ne remonte pas au-delà d'une certaine valeur, pareil pour le déplacement vers la droite. La position maxi indiquée par le msgbox est 216, pour le haut, comme pour le côté.
J'ai essayé avec toutes les positions de l'userform (manuel, center,...).
Je me demande si le problème ne viendrait pas de la déclaration des scrollbars du formulaire, pourtant cela ressemble à ce que j'ai fait dans d'autres applis, sauf que là, j'ai les deux barres (horizontales et verticales).
Me.Height = 1300: Me.Width = 2000
Me.ScrollHeight = Me.Height + 100: Me.ScrollWidth = Me.Width + 100

Une idée ?
0

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

Posez votre question
Bonjour,
En fait, comme toujours, il faut rechercher la simplicité... surtout en informatique !
J'ai trouvé la solution en me passant des scrollbars et en positionnant simplement le USF avec me.top et me.left. Cela marche parfaitement.
Merci à tous les deux pour vos suggestions ; elles m'ont aidées dans mon cheminement.
Bon week-end
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557
26 juin 2021 à 10:59
peux-tu alors marquer la discussion comme résolue?
0
TonyLucky > yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024
26 juin 2021 à 13:55
En tant que visiteur libre, je n'ai pas accès à la fonction résolue.
Sans vouloir abuser, pouvez-vous avoir la gentillesse de le faire si vous pouvez.
Merci et bon week-end
0