XL 2016 figer une image

halecs93

XLDnaute Impliqué
Bonjour à tout le monde,

Je souhaite figer une image (issue de l'appareil photo) d'Excel sur une feuille de façon à ce qu'elle reste toujours visible lorsque je la fais défiler de haut en bas en utilisant l'ascenseur.

Y aurait-il un moyen ?

Merci
 
Solution
Bonjour halecs93, vgendron, Bruno,

Voyez le fichier joint et ce code dans ThisWorkbook qui tourne en arrière-plan :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan" 'lance la macro
End Sub

Private Sub ArrierePlan()
Dim P As Range, col%, lig&, t#
Set P = [MaZone] 'plage nommée
col = 2 'colonne de destination, à adapter
Do
    lig = ActiveWindow.ScrollRow 'mémorise la ligne
    t = Timer + 0.2 'temporisation de 0.2 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    If ActiveWorkbook.Name = Me.Name Then If ActiveSheet.Name = P.Parent.Name Then _
        If ActiveWindow.ScrollRow <> lig Then P.Cut Cells(ActiveWindow.ScrollRow + 3, col) 'couper-coller
Loop
End Sub
Actionnez la barre de...

vgendron

XLDnaute Barbatruc
Bonjour

une piste..
tu figes la partie haute de ta feuille (avec le fractionnement et volets) et tu places l'image dans cette partie
ou en VBA, j'imagine que cette image peut etre accédée via "object, ou shape ou ...) et il y a sans doute une propriété .top
 

halecs93

XLDnaute Impliqué
Bonjour

une piste..
tu figes la partie haute de ta feuille (avec le fractionnement et volets) et tu places l'image dans cette partie
ou en VBA, j'imagine que cette image peut etre accédée via "object, ou shape ou ...) et il y a sans doute une propriété .top

Merci pour cette réponse.

Malheureusement, la forme de l'image ne me permet pas d'utiliser ni le fractionnement, ni de figer les volets...

Peut-être en effet en VBA... mais je ne vois pas du tout l'approche.

1690890133164.png
 
C

Compte Supprimé 979

Guest
Bonjour,

Il est vrai qu'il est tellement compliqué de transposer son image 🤔
1690891235664.png


Et de la mettre en entête de feuille 🤭

PS : il n'existe pas d'évènement pour le déplacement d'un ascenseur
sinon il faut y aller à grand renfort d'API... et j'espère que vous connaissez

A+
 

vgendron

XLDnaute Barbatruc
hello Bruno


pour l'accès à l'image
With ActiveSheet.Shapes(1)
.Select
.Top = 50
End With
à toi de chercher maintenant comment et par quoi remplacer le 50 pour que ca corresponde à la ligne affichée en haut de l'écran..
perso. je ne sais pas travailler sur des images....
 

vgendron

XLDnaute Barbatruc
rien de bien complexe.. suffit de chercher un peu et faire des tests avec l'enregistreur de macro..

pour positionner l'image au meme niveau que la première ligne affichée à l'écran
VB:
Sub Macro1()
With ActiveSheet.Shapes(1) 'à supposer qu'il n'y a qu'une seule shape ou que la shape n°1 correspond à ton image
    .Top = Rows(ActiveWindow.ScrollRow).Top
End With
End Sub

maintenant.. il reste juste à trouver commencer déclencher cette macro lorsqu'un scrolldown est appliqué sur la feuille..
 
C

Compte Supprimé 979

Guest
Salut vgendron,
C'est bien ce que je disais, il n'existe pas d'évènements avec l'ascenseur ;)

Ceci dit, ça existe sur le changement de cellule "SelectionChange"

Alors, peut-être que 🤔
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With ActiveSheet.Shapes(1) 'à supposer qu'il n'y a qu'une seule shape ou que la shape n°1 correspond à ton image
    .Top = Rows(ActiveWindow.ScrollRow).Top
  End With
End Sub

A+
 

job75

XLDnaute Barbatruc
Bonjour halecs93, vgendron, Bruno,

Voyez le fichier joint et ce code dans ThisWorkbook qui tourne en arrière-plan :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan" 'lance la macro
End Sub

Private Sub ArrierePlan()
Dim P As Range, col%, lig&, t#
Set P = [MaZone] 'plage nommée
col = 2 'colonne de destination, à adapter
Do
    lig = ActiveWindow.ScrollRow 'mémorise la ligne
    t = Timer + 0.2 'temporisation de 0.2 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    If ActiveWorkbook.Name = Me.Name Then If ActiveSheet.Name = P.Parent.Name Then _
        If ActiveWindow.ScrollRow <> lig Then P.Cut Cells(ActiveWindow.ScrollRow + 3, col) 'couper-coller
Loop
End Sub
Actionnez la barre de défilement verticale.

A+
 

Pièces jointes

  • Arrière-plan(1).xlsm
    38.8 KB · Affichages: 11

vgendron

XLDnaute Barbatruc
Salut vgendron,
C'est bien ce que je disais, il n'existe pas d'évènements avec l'ascenseur ;)

Ceci dit, ça existe sur le changement de cellule "SelectionChange"

Alors, peut-être que 🤔
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With ActiveSheet.Shapes(1) 'à supposer qu'il n'y a qu'une seule shape ou que la shape n°1 correspond à ton image
    .Top = Rows(ActiveWindow.ScrollRow).Top
  End With
End Sub

A+
C'est effectivement ce que j'allais proposer en insistant sur le fait que si l'utilisateur ne fait QUE du scroll, l'image ne suivra pas..
elle sera repositionnée uniquement si l'utilisateur clique sur une des cellules à l'écran.. est ce vraiment gênant?
 

job75

XLDnaute Barbatruc
Hello @job75
quand tu précises "Arrière Plan", est ce que cela veut dire que le code ne ralentit pas toute autre macro qui serait exécutée?
Plusieurs remarques :

- la macro ne tourne pas quand une autre macro s'exécute, elle redémarre quand celle-ci se termine

- elle prend très peu de ressources

- sur Excel il y a bien d'autres programmes qui tournent en arrière plan.
 

halecs93

XLDnaute Impliqué
Bonjour halecs93, vgendron, Bruno,

Voyez le fichier joint et ce code dans ThisWorkbook qui tourne en arrière-plan :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan" 'lance la macro
End Sub

Private Sub ArrierePlan()
Dim P As Range, col%, lig&, t#
Set P = [MaZone] 'plage nommée
col = 2 'colonne de destination, à adapter
Do
    lig = ActiveWindow.ScrollRow 'mémorise la ligne
    t = Timer + 0.2 'temporisation de 0.2 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    If ActiveWorkbook.Name = Me.Name Then If ActiveSheet.Name = P.Parent.Name Then _
        If ActiveWindow.ScrollRow <> lig Then P.Cut Cells(ActiveWindow.ScrollRow + 3, col) 'couper-coller
Loop
End Sub
Actionnez la barre de défilement verticale.

A+
Cette solution est bien sympa. Merci
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 141
Membres
112 669
dernier inscrit
Guigui2502