Excel VBA - Naviguer dans un très grand userform
Résolu
TonyLucky
-
TonyLucky -
TonyLucky -
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 !) :
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.
PS : je suis en 64bits
Merci par avance de vos suggestions
Jean
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:
- Excel VBA - Naviguer dans un très grand userform
- Liste déroulante excel - Guide
- Trier du plus petit au plus grand excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
5 réponses
Bonjour,
voir ceci:
https://www.commentcamarche.net/faq/48339-deplacer-avec-la-souris-un-userform-sans-barre-de-fenetre
voir ceci:
https://www.commentcamarche.net/faq/48339-deplacer-avec-la-souris-un-userform-sans-barre-de-fenetre
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.
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.
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.
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.
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
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).
Une idée ?
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 ?
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
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