Excel - image suive la barre de défilement

Fermé
tom - 20 avril 2010 à 11:37
 tom - 23 avril 2010 à 20:32
Bonjour,
Je m'explique, je suis en train de faire un programme à l'aide de vba.
Dans une feuille excel j'ai inséré des images et je leur ai affecté une macro chacune.
Je souhaite donc que l'utilisateur lance les macros à l'aide de ces images servant de bouton dans la feuille de calcul.
Cependant, problème, Si l'utilisateur fait défiler sa feuille excel (en allant à droite ou en bas par exemple), les images restent fixes sur la feuille de calcul, c'est à dire qu'elles bougent aux yeux de l'utilisateur. Or je souhaiterais qu'elles soient fixes au niveau de l'écran de l'ordi, c'est à dire qu'elles ne bougent pas aux yeux de l'utilisateur.

Merci à ceux qui comprendront mon problème !
A voir également:

4 réponses

commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
20 avril 2010 à 15:23
Je pourrais sinon te conseiller la macro suivante :

_Sub resizePic()
____Dim rngCanSee As Range
____Set ecran = ActiveWindow.VisibleRange
____With ActiveSheet.Pictures(1)
_______' Ici tu peux définir la position voulue.
_______' Tu peux utiliser ecran.VisibleRange.Left et ecran.VisibleRange.Top
_______.Left = ecran.Left + 20
_______.Top = ecran.Top + 20
____End With
_End Sub


Cette macro replace l'image à l'endroit voulu chaque fois qu'une nouvelle fenêtre est sélectionnée si tu l'appelle dans cet évènement :

_Private Sub Worksheet_SelectionChange(ByVal Target As Range)
____Call resizePic
_End Sub


Par contre, elle n'est pas repositionnée si les scrolls sont déplacés à l'aide de la sourie qu'après avoir cliqué sur l'écran.

Yassine,
1
Alors j'ai testé ton resizePic, ca marche bien. Merci c'est déjà ça !
Par contre le private sub je ne vois pas trop à quoi il sert ...
Il en faudrait un qui lance resizePic dès que l'utilisateur fait défiler sa feuille excel (dès qu'il descend plus bas dans la feuille par exemple)
0
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
20 avril 2010 à 17:35
Le "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" est l'événement qui exécute resizePic. C'est l'événement associé au changement de la sélection d'une nouvelle case.
- on peut mettre la macro resizePic dans un module (Module1 par exemple)
- le "private sub" par contre se crée automatiquement quand on va sur le code de la feuille 1 ("Feuil1") et on bascule la valeur du ComboBox (en haut à gauche) de "Général" vers "Worksheet"
0
Ah oui je suis débile, je l'avais mis avec mes module le private sub.
Ca fonctionne bien ! Bien joué faut connaitre la syntaxe !!
Par contre en effet, si on bouge les scrolls via la souris, ca marche plus.
Mais c'est déjà bien sympa là ! Merci.
0
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
23 avril 2010 à 18:47
Bonjour,

On a la possibilité de nous positionner par rapport au bas de la page et de prendre en compte le redimensionnement. Il suffit de savoir comment doivent se repositionner les commandes quand on change de dimension.

Ce qui suit est un exemple qui permet de positionner une forme à 20p du bas et au milieu de l'écran :

.... Sub resizePic()
........ Set ecran = ActiveWindow.VisibleRange
........ With ActiveSheet.Shapes(1)
............ .Left = ecran.Left + ecran.Width / 2 - .Width / 2
............ .Top = ecran.Top + ecran.Height - .Height - 20
........ End With
..... End Sub


Je ne vais pas commenter la macro, je pense qu'elle est assez claire.
En général, on positionne les boutons en bas à gauche. Alors même si l'écran est réduit on peut toujours caser les images à gauches.

Sinon, des macros pour redimensionner les fenêtres peuvent être utilisées. En voici un exemple :

Sub resizeWin()
.... Set ecran = ActiveWindow.VisibleRange
.... With ActiveSheet.Shapes(1)
........ If ActiveWindow.WindowState = xlNormal Then
............ If ecran.Width < .Width Then ActiveWindow.Width = ActiveWindow.Width - ecran.Width + .Width
............ If ecran.Height < .Width Then ActiveWindow.Height = ActiveWindow.Height - ecran.Height + .Height
........ End If
.... End With
End Sub


Que tu met dans l'événement :

Private Sub Workbook_WindowResize(ByVal Wn As Window)
.... resizeWin
End Sub


Je pense que tu peux quand même rendre l'exercice à ton prof ;-)
1
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
23 avril 2010 à 18:50
Fait attention, il y a worksheet et workbook. Ne fais pas d'erreur de lecture.
Les codes restent à adapter pour bien positionner les éléments.
Remarque. Cette fois j'ai mis une forme automatique au lieu d'une image. Si tu utilise une image, remplace shape par picture comme l'exemple précédent.
0
Merci ca marche nickel !!
bien joué pour le ecran.Height - .Height
Ca me sauve ^^
Bon week end !
0
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
20 avril 2010 à 12:00
Bonjour,

Essaye de fractionner la fenêtre. Cela va la diviser en plusieurs fenêtres dont une est amovible (là où les photos boutons vont être placées). Puis appui sur le bouton figer.

C'est une manière de faire qui, personnellement, ne me satisfait pas car elle limite l'affichage. Mais ça peut aider pour cette affaire.

Bonne continuation,
Yassine
0
J'ai déjà essayé ça ... c'est moyen ... ca bouffe une bonne partie de l'affichage !
Merci quand même !
0
Bonsoir,
Après moultes tests, j'en viens à un constat :
Je souhaite mettre mes images via la macro au bottom de la page.
Problème, selon la dimension de l'écran de l'ordinateur ou du zoom sur excel, la macro précédente ne mettra pas toujours les images en bas.
Sur mon pc elles sont en bas, sur un autre on ne les voient meme plus tellement elles sont basses ...
pas pratique pour rendre le projet à mon prof ... je ne vais pas lui demander la taille de son écran !

ActiveWindow.VisibleRange.Bottom ne marche pas ! Que dois-je faire alors ?
0