Atténuer la visibilité d'une feuille d'Excel
Bonjour à tous,
Je crois que je m'amuse un peu en essayant de trouver un moyen d'atténuer la visibilité d'une feuille afin de mettre plus en valeur le Formulaire qu'elle peut contenir
Voici à peu près ce que je désire obtenir
Il est évident que j'ai triché pour obtenir ce résultat qui de plus ne me convient pas tout à fait, j'aurais aimé une atténuation du fond de feuille plus discrète
Pour obtenir ce résultat j'ai utlisé PhotoShop, je voudrais, sans savoir si c'est possible, directement avec Excel ????
Ne serais-je pas un peu trop exigeant ? (lol)
Bonne soirée à tous
Bonsoir,
une proposition avec un "grand shape" sur la feuille concernée :
On clic sur le bouton, on lance ce code :
Sub LRD()
' on recherche l'adreese de la première cellule visible de la feuille en haut à gauche
adr = ActiveWindow.VisibleRange.Address
' avec le shape Fond
With ActiveSheet.Shapes("Fond")
' on place le shape aux coordonnées de cette cellule afin d'être sur qu'il recouvre la feuille
' en X
.Left = Range(adr).Left
' en Y
.Top = Range(adr).Top
' on applique une transparence de 75% au shape
.Fill.Transparency = 0.5
' on ouvre le USF
UserForm1.Show
' on masque le shape à la sortie du USF
.Visible = False
End With
End Subà l'initialisation du USF, on rend le shape visible :
Private Sub UserForm_Initialize()
' à l'initialisation du USF on affiche le shape "Fond"
ActiveSheet.Shapes("Fond").Visible = True
End SubNote : la recherche de la première cellule correspond à la cellule en haut à gauche de la feuille si les volets ne sont pas figés, sinon cela correspond à la cellule visible juste après le figeage des volets.
@ bientôt
LouReeD
Bonjour LouReed,
Bien sûr ce que tu me proposes fonctionne très bien. De mon côté j'avais trouvé une solution "manuelle" : click droit sur le petit triangle noir situé en haut à droite, au dessus du 1 (numéro de la première ligne), afin de sélectionner toutes les lignes et colonnes de la feuille, et ensuite choisir la couleur de remplissage.
Mais comme je l'ai dit dans mon post, je m'amuse, certainement bêtement, car j'essais d'atténuer la couleur non seulement de la feuille mais de toute la page, c'est à dire de tout l'écran (feuille + menu et barre des tâches) comme tu peux le constater sur mon image.
Certes comme je l'ai précisé, ma recherche est un peu loufoque, maiis étant quelque peu inactif en ce moment je m'amuse à essayer de créer des choses plus que particuliières.
Comme toujours je te remercie du fait que tu te sois penché sur cette question très particulière.
Bonne journée et au plaisir de te croiser de nouveau sur le Forum
Jacky
LouReed, un petiit plus
En reprenant ta proposition, nous constatons que si on a figé les volets la "Shape" ne couvre que la partie de la feuille située après le figeage
Voici ce que je propose pour que toute la feuille soit concernée sans "Shape", qu'il y ait ou non un figeage
Cells.Select
With Selection.Interior
.Color = 65535
End WithQu'en penses tu ?
PS : de plus en plus je crois que ma recherche est ridicule, maiis ..... sait on jamais
En colorisant en "dur" les cellule vous supprimez la mise en forme de la feuille !
Et au sujet des volets figés je vous avais "averti" dans mon message
C'est pourquoi j'utilise un Shape qui ne touche à rien.
Pour mettre tour l'écran en transparence" alors il faut jouer avec les API Windows et faire un filtre transparent sur l'écran sans touche au USF...
Toutes les demandes ne sont pas ridicules ! Cela permet de se gratter la tête et de rester éveillé (vu que de mon côté je ne travaille pas le PQ et les nouvelles fonctions...) Faut bien que je travail autre chose...
@ bientôt
LouReeD
En colorisant en "dur" les cellule vous supprimez la mise en forme de la feuille !
Je ne comprends pas, que veux tu dire
Merci
PS un "tu" plutot qu'un "vous" envers moi serait le bien venu
Excusez moi du vous, mais c'est ainsi
Voilà ce que je veux dire :
si vous mettez en couleur "en dur" les cellules sélectionnées, alors la présentation de la feuille va être détruite...
A moins de jouer avec une MFC qui test par exemple la cellule AZ1000 :
=AZ1000="transparent" alors couleur 65535 et s'applique à : =A1:ZZ3000
la macro ira inscrire la donnée en AZ1000, et mettre en place la MFC correspondante...
le shape est de loin le plus simple
Ou bien tout simplement ouvrir le USF sur la totalité de l'écran, encore mieux : un USF sur l'ensemble de l'écran qui ne sert qu'à masquer ce dernier, et par dessus le USF utilitaire...
@ bientôt
LouReeD
Voici le résultat de l'idée "un USF sur l'ensemble de l'écran qui ne sert qu'à masquer ce dernier, et par dessus le USF utilitaire..." :
@ bientôt
LouReeD
Encore merci pour ces renseignements
Tu ajoutes :
Ou bien tout simplement ouvrir le USF sur la totalité de l'écran, encore mieux : un USF sur l'ensemble de l'écran qui ne sert qu'à masquer ce dernier, et par dessus le USF utilitaire...c'est ce que je fais en particulier quand je veux utiliser un Menu à l'ouverture du fichier.
j'ai pensé à autre chose : si on mettait la feuille Ecel en plein écran, nous aurions quelquechose de très proche de mon idée. mais j'ai un autre problème qui se greffe : je suis sous Wndows 11 et je ne sais pas comment mettre une feuille Excel en plein écran. J'ai essayé F11, j'ai essayé Ctrl + Maj+F1, ça ne marche pas, la seule façon qui m'a permis de réussir c'est le VBA
Application.DisplayFullScreen = Falseet manuellement, comment faut-il faire ?
Pardon, je n'avais pas vu ta dernière proposition qui répond bien à ma demande
J'ai survolé le code que j'ai trouvé complexe .... à étudier sérieusement
Bonjour Jacky
Tout d'abord, je n'ai pas regardé les autres solutions proposées. Ceci dit, voici ma p'tiote version v1b plus simple :
Sub MasquerFond(Optional ByVal Etat As Boolean = True)
Static exFeuille As Worksheet ' la feuille courante avant d'afficher la feuille "FondNoir"
Dim FN As Worksheet ' la feuille "FondNoir"
Dim i&
Application.ScreenUpdating = False
If Etat = True Then ' basculage sur l'affichage "FondNoir"
Set exFeuille = IIf(ActiveSheet.Name = "FondNoir", Worksheets(1), ActiveSheet) ' la feuille active
' création si nécessaire de la feuille "FondNoir"
On Error Resume Next: Set FN = Worksheets("FondNoir") ' affectation de la feuille"FondNoir"
On Error GoTo 0
' la feuille "FondNoir" n'existe pas -> on va la créer et nommer
If FN Is Nothing Then Set FN = Worksheets.Add: FN.Name = "FondNoir"
' afficher FN
FN.Visible = Etat ' Affichage feuille "FondNoir"
FN.[aaa1].Activate ' pour ne pas voir la cellule active
FN.Cells.Interior.Color = RGB(75, 75, 75) ' couleur de fond
FN.Select
Application.DisplayFullScreen = Etat ' on passe en plein écran
ActiveWindow.DisplayHeadings = Not Etat ' masquage en-tête de lignes et colonnes
ActiveWindow.DisplayWorkbookTabs = Not Etat ' masquage des onglets
ActiveWindow.DisplayHorizontalScrollBar = Not Etat ' masquage de l'ascenseur horizontal
ActiveWindow.DisplayVerticalScrollBar = Not Etat ' masquage de l'ascenseur vetical
FN.Range("aaa1").Activate
Else
On Error Resume Next: Application.DisplayAlerts = False
Worksheets("FondNoir").Delete: Application.DisplayAlerts = True ' suppression feuille "FondNoir"
exFeuille.Select: On Error GoTo 0 ' sélection ancienne feuille active
Application.DisplayFullScreen = Etat ' on sort du plein écran
ActiveWindow.DisplayHeadings = Not Etat ' affichage en-tête de lignes et colonnes
ActiveWindow.DisplayWorkbookTabs = Not Etat ' affichage des onglets
ActiveWindow.DisplayHorizontalScrollBar = Not Etat ' affichage de l'ascenseur horizontal
ActiveWindow.DisplayVerticalScrollBar = Not Etat ' affichage de l'ascenseur vetical
End If
Application.ScreenUpdating = True
End Sub...
Le code est "complexe" du fait de deux choses :
- trouver le "handel" du USF pour appliquer la transparence, ce qui implique d'utiliser des API Windows pour trouver "cette fenêtre", une fois trouvée on lui applique la transparence
- supprimer les barre de fenêtre du USF afin de ne garder que le cadre, ce qui fait que c'est plus propre visuellement car on n'a plus la barre de titre avec la croix.
Pour la couleur il suffit de choisir la couleur de fond voulue du USF 1 et de jouer sur la valeur de transparence.
Voilà, pour moi la question est résolue, non ?
D'autres idées saugrenues ?
@ bientôt
LouReeD
mafraise, bonjour,
oui pourquoi pas mais la demande était de mettre l'ensemble de l'application en "transparence" et là on la masque en mettant en avant une feuille noire en plein écran, non ?
Autant mettre Application.Visible = False
Votre proposition a l'avantage d'être simple !
@ bientôt
LouReeD
Bonjour MaFraise,
Et oui dans ta proposition nous obtenons une feuille noire en plein écran
Ce n'est pas ce que je recherche, mais je désire conserver ma feuille tout e atténuant sa visibilité
Mais, je me répète, c'est une idée loufoque à laquelle je me suis attaqué pour "m'amuser"
Au plaisir
Maintenant que nous avons bien travaillé, je vais mettre tout cela de côté pour une autre fois !
Merci @ tous !
@ bientôt
LouReeD
ici une réponse de GPT :
là il y a vraiment transparence de l'application vu que l'on voit ce qu'il y a derrière !
@ bientôt
LouReeD
En effet c'est une super transparence !!
Mais trop c'est trop
merci à vous tous
Re,
Comme j'avais mal lu la question,
voici la version qui devrait réponde à la demande. Pas d'appel à des choses spécifiques aux PC, ça devrait fonctionner sur Mac aussi. De surcroit, le code est plus simple que la v1.
nota : c'est avec les deux constantes CouleurFondRGB et Transparence qu'on modifie la couleur du fond d'atténuation.
Sub Attenuer(Optional ByVal Etat As Boolean = True)
Const CouleurFondRGB = "110,100,100" ' couleur du fond (en RGB) de la forme
Const Transparence = 0.25 ' transparence du fond de la forme
Dim shp As Shape, arr ' shp est la forme de nom "rectFond"
Application.ScreenUpdating = False
If Etat = True Then ' basculage sur l'affichage atténué
On Error Resume Next: ActiveSheet.Shapes("rectFond").Delete ' effacement de la forme
On Error GoTo 0
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 5000, 2000) ' création de la forme
shp.Name = "rectFond" ' nom de la forme
arr = Split(CouleurFondRGB, ",") ' array des couleurs RGB
shp.Fill.ForeColor.RGB = RGB(CInt(arr(0)), CInt(arr(1)), CInt(arr(2))) ' mettre la couleur de fond
shp.Fill.Transparency = Transparence ' transparence du fond
' modifier les attributs de la fenêtre
Application.DisplayFullScreen = Etat ' on passe en plein écran
ActiveWindow.DisplayHeadings = Not Etat ' pas d'en-tête de lignes ni de colonnes
ActiveWindow.DisplayWorkbookTabs = Not Etat ' pas de barre d'onglets
ActiveWindow.DisplayHorizontalScrollBar = Not Etat ' pas d'ascenseur horizontal
ActiveWindow.DisplayVerticalScrollBar = Not Etat ' pas d'ascenseur vertical
Else
On Error Resume Next: ActiveSheet.Shapes("rectFond").Delete 'effacement de la forme
On Error GoTo 0
Application.DisplayFullScreen = Etat ' pas de plein écran
ActiveWindow.DisplayHeadings = Not Etat ' avec les en-tête de lignes et colonnes
ActiveWindow.DisplayWorkbookTabs = Not Etat ' avec la barre d'onglets
ActiveWindow.DisplayHorizontalScrollBar = Not Etat ' avec l'ascenseur horizontal
ActiveWindow.DisplayVerticalScrollBar = Not Etat ' avec l'ascenseur vertical
End If
Application.ScreenUpdating = True
End Sub...

