Une image qui reste visible malgré une ligne figée
Bonjour,
Auriez-vous, svp, une solution pour qu'une image ne soit pas écrasée lorsque je fais défiler le tableau :
Sur la feuille "Absences", j'ai figé la ligne 3 et malgré les propriétés de l'image ci-dessous, elle est coupée lorsque je descends plus bas dans le tableau.
Merci beaucoup pour l'intérêt porté à ce sujet
à bientôt
Bonne soirée
Bonsoir,
une solution simple, si l'image doit être visible à l'ouverture de la feuille excel :
mettre un code VBA sur l'activation de la feuille, ce dernier ouvre un USF non modal qui contiendra l'image souhaitée.
un code à la désactivation qui fermera le USF.
Un USF non modal permet de continuer de "jouer" avec le classeur normalement et le USF reste visible même si l'on joue avec les ascenseurs.
Voir fichier exemple à l'activation de la feuille 2 :
@ bientôt
LouReeD
Une version amélioré qui va créer l'image voulue avant de la mettre dans le USF et d'adapter la taille de celui-ci à cette dernière et le positionne en haut à droite d ela fenêtre de l'application Excel :
@ bientôt
LouReeD
Bonjour vodoraix, LouReed, le forum,
Une autre proposition dans le classeur joint.
Clic sur K1 (Démarrage), l'image suit le scroll de la feuille. Clic sur K2 (Arrêt), le défilement est arrêté.
C'est perfectible, mais cela fonctionne.
@LouReed, pas mal l'idée de l'UF, alors +1
Cordialement.
AL 22
Bonsoir LouReeD & AL 22 ==> Merci beaucoup à vous 2
AL 22, c'est une super idée mais l'image tressaute quand on scrolle et certains utilisateurs risquent d'être perturbés au bout d'un moment. Mais ça marche, c'est vrai
LouReeD, c'est absolument parfait cette fenêtre. En plus je la déplace comme je veux en fonction des besoins. Je n'aurais pas pu espérer mieux.
Et l'exemple choisi avec des chiffres aléatoires montre bien que ta solution récupère le tableau de la fenêtre (7 MDS) dont les valeurs évolues et quand je lis la fenêtre "Absences", le Userform1 est mise à jour à chaque fois. Ton exemple est royal et démonstratif, au top du top !!!!!!
Merci beaucoup. Je ne suis pas certain de pouvoir l'adapter correctement à mon classeur. Penses-tu que je peux abuser encore de toi pour essayer de modifier le code VBA de BsAlv. D'ailleurs, il faudrait à ce moment là, supprimer la solution de BsAlv qui ne remplit pas complètement toutes les contraintes
Pour pouvoir assurer la maintenance du tableau de la feuille "7 MDS", il faudrait juste que je sache quels paramètres il faudrait que je change dans ton code ? MAis je crois qu'il est 100% compatible à toutes situations, si je ne me trompe pas
Par exemple, tu as 2 noms dans ton code VBA ==> "Tableau" et "Choix" mais je n'arrive pas à savoir à quoi ça correspond... Vui, je suis débutant, débutant
J'imagine que "Tableau", c'est le nom du tableau sur la Feuil1 mais on fait comment pour voir son nom, stp ?
Et un grand merci à vous 2 en tout cas...
Bonne soirée
Merci AL 22 !
En effet, Tableau correspond aux "alea", pour voir son nom il suffit "d'ouvrir" le champ texte se trouvant à gauche de la fenêtre d'Excel au niveau de la barre de calcul, il y a un petit triangle dirigé vers le bas. Ici se trouve la liste de tous les "noms" créés sous le classeur.
Dans votre fichier les données sont dans un tableau structuré, c'est plus simple il suffit de donner ce nom pour récupérer l'ensemble du tableau, le hic dans votre fichier ce sont les lignes avec les dates des périodes qui elles ne font pas partie du tableau.
Choix, c'est le nom d'un shape temporaire qui est créé afin qu'on y colle l'image créée lors de la copie du tableau source, une fois l'image collée, on l'enregistre sur le disque dur afin de pouvoir l'UpLoader dans l'objet image du USF, une fois cette dernière téléchargée, on peut supprimer celle du disque "Kill" puis on peut supprimer le shape "Choix"
Le code du USF dans votre cas :
Option Explicit
Private Sub UserForm_Initialize()
With ActiveSheet
' on déprotège
.Unprotect
Dim S, Plage As Range
' on veut définir la position "à la main"
UserForm1.StartUpPosition = 0
' à 10 de haut
Me.Top = 10
' on part de la largeur de la fenêtre d'application à laquelle on retir la largeur du USF et on retire une marge de 20
Me.Left = Application.Width - Me.Width - 20
' on efface le shape temporaire Choix
On Error Resume Next
.Shapes("Choix").Delete
On Error GoTo 0
' on récupère la plage du tableau
Set Plage = Range("Tabel8")
' on décale cette plage de 3 lignes pour intégrer les deux lignes de période : en effet 3 car 2 lignes de périodes + 1 ligne de titre du tableau
' on redimenssionne cette plage du nombre de ligne du tableau + les 3 de décalage vers le haut et du nombre de colonne du tableau
Set Plage = Plage.Offset(-3).Resize(Plage.Rows.Count + 3, Plage.Columns.Count)
' on copie la plage
Plage.Copy
' on colle l'image dans le shape
.Pictures.Paste.Name = "Choix"
' on supprime la sélection de copie
Application.CutCopyMode = False
' on met ce shape dans une variable
Set S = .Shapes("Choix")
' on copie l'image du shape
S.CopyPicture xlScreen, xlBitmap
With S.Parent.ChartObjects.Add(0, 0, S.Width, S.Height).Chart
While .Shapes.Count = 0
DoEvents
.Paste
Wend
' on l'exporte vers un fichier JPG
.Export "Monimage.jpg", "Jpg"
.Parent.Delete
End With
' on sélectionne le sizemode sur l'objet image
Me.Image1.PictureSizeMode = 1
' on charge l'image
Me.Image1.Picture = LoadPicture("Monimage.jpg")
' on supprime le fichier JPG
Kill "Monimage.jpg"
' on supprime le shape tempéraire
On Error Resume Next
.Shapes("Choix").Delete
On Error GoTo 0
' on protège
.Protect
End With
' nom du USF affiché
Me.Caption = "Code fourni par LouReeD - Ceci est à remplacer par le nom de la fenêtre"
End SubPour le USF, choisissez sa taille, ensuite importer un objet image, donnez lui une taille équivalente au fond de votre USF.
Placer les code d'activation et de désactivation sur la feuille absence.
Le tour est joué !
@ bientôt
LouReeD
Merci beaucoup LouReed
1) Pour le nom du Tableau, c'est bon, j'ai bien vu, merci beaucoup.
2) Pour "Choix" ça sert pour coller l'image. En fait c'est comme une variable si j'ai bien compris. Merci !
3) Pour le UserForm, c'est fait. Je ne me suis pas embêté, j'ai copié le tien
4) Pour le VBA, je l'ai collé sur ma feuille non pas "Absences" mais sur la feuille "UserForm1" ==> G bon ou g bon ?
Set Plage = Range("Tabel8")
' on décale cette plage de 3 lignes pour intégrer les deux lignes de période : en effet 3 car 2 lignes de périodes + 1 ligne de titre du tableau
' on redimenssionne cette plage du nombre de ligne du tableau + les 3 de décalage vers le haut et du nombre de colonne du tableau
Merci pour les explications détaillées, à part les fonctions propres qui sont pas simples, on arrive à comprendre toutes les étapes, c'est top
Mais j'ai dû faire un truc "pas bon" ou alors il manque quelque chose car.... pas d'effet
En tout cas c'est vraiment super de suivre tes indications pas à pas car ça m'apprend un peu à bidouiller
Tu sais où j'ai planté l'affaire ?
En tout cas mille mercis pour ton aide LouReeD
à +
Bonne soirée
Il faut déclencher l'ouverture et la fermeture du USERFORM en copiant les codes se trouvant sur la feuille 2 de mon premier fichier, je le disait ici : "Placer les code d'activation et de désactivation sur la feuille absence." :
' lorsque la feuille "absences" est activée
Private Sub Worksheet_Activate()
' on demande d'affiche le USERFORM1 en mode non modal = 0 Comme cela la feuille reste utilisable
UserForm1.Show 0
End Sub
' lorsque l'on désactive la feuille "absences"
Private Sub Worksheet_Deactivate()
' on décharge, ferme le USERFORM1
Unload UserForm1
End SubCes codes sont à mettre sur la feuille Absences de votre fichier, c'est à cette endroit que se trouvent tous les code d'évènements de feuille, comme vous l'utilisez déjà pour les "selection_change" etc...
@ bientôt
LouReeD
bonjour tout le monde,
sans UF, avec la camera qui se déplace ...
Désolé LouReeD, je n'avais pas tout compris...
Bravo, car ça donne ça :
C'est absolument parfait...
Ca me plaît à fond !!! C'est propre et sans bavure !!!
Merci à LouReeD, à AL 22 & à BsAlv
Bonne soirée...
à bientôt
J'ai juste des erreurs d'ouverture de feuilles avec des protections qu'il faudrait enlever pour le Tabel4 dans le module 1 mais je ne sais pas trop où agir...
_________________________________________________
Ca peut venir de là ? ==>
re, salut LouReeD,
j'ai mis la protection (avec 6 options) sur toutes les feuilles pour le teste, peut-être plus tard on peut enlever cela pour certaines feuilles. Bon, maintenant, c'est attendre où on aura des problèmes ... .
Puis j'ai mis mon camera à côté de l'userform de LouReed. Mon camera se déplace seulement quand on change la sélection (event "change selection") et la première ligne du camera disparaît, donc si on fait un "scroll," je ne sais pas détecter cela, il faut choisir une autre cellule. Et, ... si on change par exemple D27 (là, Seb est en vacances pour la plupart de 2026 + 2027), alors mon camera se met à jour, mais l'userform ne le fait pas encore, c'est faisable ... si on ajoute quelque lignes à la macro "M_Comptage2"
Bonsoir Bart' & LouReeD
Désolé, je suis rentré à19h45 et je vois ton message à peine.
Merci beaucoup Bart' pour les feuilles bloquées qui provoquaient des erreurs sur quasi toutes les feuilles
Sur la feuille "Absences", j'ai eu plusieurs erreurs ==> Temps d'affichage qui dépassait parfois 30 secondes + un beug car la page se fige + une erreur avec message sur boîte de dialogue.
J'ai remis le code d'hier et tout remarche comme il faut
Merci encore Bart'
Tu m'as fait un travail aux petits oignons, comme d'habitude
à bientôt
Voici le classeur qui fonctionne bien pour le moment ==> J'ai fait plein plein de tests et il tient !!!
