Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Changer de "Toile de Fond"

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Rebonsoir,

J'aime bien que le fond de ma feuille soit en couleur (d'une part on ne voit plus les lignes, mais surtout cela fatigue moins la vue).

Il y aurait-il un moyen (avec une macro par exemple) pour modifier uniquement ce fond sans altérer pour autant les couleurs des cellules où se trouvent les données ?
 
Re : Changer de "Toile de Fond"

Bonjour Softmama, le forum.

J'ai essayé ta proposition et curieusement il y a une zone qui ne se colorie pas. Je n'ai pas vraiment compris pourquoi.
M'inspirant de ta routine, j'ai tenté autre chose.
Ça marche, mais le problème est que la feuille passe de quelques Ko à près de 50 Mo !
 

Pièces jointes

Re : Changer de "Toile de Fond"

Bonjour Magic Doctor, salut Softmama,

Ton fichier en retour avec la macro complétée :

Code:
Sub MiseEnFormeFond()
'job75
Dim cel As Range, plage As Range

Sheets(NomOnglet([Zone])).Select

'---colore la zone---
For Each cel In [Zone]
  If IsEmpty(cel) And cel.Borders.Value = xlNone Then _
    Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
Next
If Not plage Is Nothing Then plage.Interior.Color = [CouleurFond].Interior.Color

'---colore le reste de la feuille---
Application.ScreenUpdating = False
Set plage = [Zone]
Set cel = [CouleurFond]
Workbooks.Add
plage.Copy Range(plage.Address)
With ThisWorkbook.ActiveSheet
  .Rows("2:" & .Rows.Count).Interior.Color = cel.Interior.Color
End With
Range(plage.Address).Copy plage
ActiveWorkbook.Close False

End Sub
Tu as de l'imagination, Doctor, bravo.

Nota : le poids du fichier ne change pas 🙂

Edit : mets Application.ScreenUpdating = False au début, avant l'activation de la feuille, c'est mieux...

A+
 

Pièces jointes

Dernière édition:
Re : Changer de "Toile de Fond"

Buenas tardes job75,

De retour des embouteillages de Montevideo, globalisation oblige et c'est bien dommage (il y a seulement 15 ans, il était rare de faire un créneau pour se garer ! Et il y a 30 ans, on voyait encore des tacots dans un état épouvantable -des vrais, comme dans les films- circuler !)...

Bref, je suis toujours surpris par tes solutions lapidaires. J'en avais trouvée une, mais très brut de décoffrage, qui dépareillais avec l'élégance de ta solution de la 1ère partie du problème. En désespoir de cause je l'aurais adoptée, mais avec cette cerise sur le gâteau, je pense que le forum dispose d'une perle qui en satisfera plus d'un. Car quel non daltonien ne voudrait pas en un tournemain changer le look de sa feuille ?

Encore une fois muchas gracias !

PS : quant à l'imagination, mettons-la sur le compte du mate !
 
Re : Changer de "Toile de Fond"

Ah oui, j'en profite pour te poser 2 questions.
Dans "'---colore le reste de la feuille---" tu commences par Application.ScreenUpdating = False ; je pense, comme dans ma solution, pour éviter ce que j'appellerais des scintillements de l'écran lors du déroulement de la macro.
En revanche, pourquoi, en fin de macro, n'écris-tu pas Application.ScreenUpdating = True ? ... c'est mon côté scolaire...
Et à quoi sert cet énigmatique (pour moi) ActiveWorkbook.Close False ?
 
Re : Changer de "Toile de Fond"

Re Doctor,

Comme dit dans mon Edit, mets Application.ScreenUpdating = False en début de macro.

Application.ScreenUpdating = True en fin de macro n'est généralement pas nécessaire, car normalement l'écran se met à jour après le End Sub.

Attention, il arrive que parfois ce soit nécessaire de le mettre...

Quant au ActiveWorkbook.Close il est indispensable puisque j'ai créé un document auxiliaire (pour stocker Zone) avec Workbooks.Add...

Bonne fin de soirée.

Edit : j'oubliais de parler du False après ActiveWorkbook.Close.

Il évite la demande d'enregistrement, puisque le document a été modifié.

A+
 
Dernière édition:
Re : Changer de "Toile de Fond"

Bonjour Magic Doctor, le forum,

Si la cellule [CouleurFond] est bien dans une autre feuille, on peut stocker [Zone] dans cette feuille :

Code:
Sub MiseEnFormeFond()
'job75
Dim cel As Range, plage As Range

Application.ScreenUpdating = False
[Zone].Parent.Activate

'---colore la zone---
For Each cel In [Zone]
  If IsEmpty(cel) And cel.Borders.Value = xlNone Then _
    Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
Next
If Not plage Is Nothing Then plage.Interior.Color = [CouleurFond].Interior.Color

'---colore le reste de la feuille---
With [CouleurFond].Parent
  [Zone].Copy .Range([Zone].Offset(99).Address)
  Rows("2:" & Rows.Count).Interior.Color = [CouleurFond].Interior.Color
  .Range([Zone].Offset(99).Address).Copy [Zone]
  .Rows("100:" & Rows.Count).Delete
End With
End Sub
A+
 

Pièces jointes

Re : Changer de "Toile de Fond"

Re,

L'idée de colorer les 4 plages qui entourent [Zone] est excellente.

Seulement il ne faut pas se planter en écrivant le code :

Code:
Sub MiseEnFormeFond()
'job75
Dim coul, cel As Range, plage As Range

Application.ScreenUpdating = False
[Zone].Parent.Activate
coul = [CouleurFond].Interior.Color

'---colore la zone---
For Each cel In [Zone]
  If IsEmpty(cel) And cel.Borders.Value = xlNone Then _
    Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
Next
If Not plage Is Nothing Then plage.Interior.Color = coul

'---colore le reste de la feuille (4 plages entourant Zone)---
On Error Resume Next
With [Zone]
  .Offset(, 1 - .Column).Resize(, .Column - 1).Interior.Color = coul
  .Offset(, .Columns.Count).Resize(, Columns.Count - .Column - .Columns.Count + 1).Interior.Color = coul
  .EntireRow.Offset(2 - .Row).Resize(.Row - 2).Interior.Color = coul
  .EntireRow.Offset(.Rows.Count).Resize(Rows.Count - .Row - .Rows.Count + 1).Interior.Color = coul
End With
End Sub
A+
 

Pièces jointes

Re : Changer de "Toile de Fond"

Bonsoir job75, le forum,

Je viens d'essayer ta nouvelle routine.
Pour que ce soit plus réaliste, j'ai modifié le classeur en y insérant plusieurs feuilles dont on peut modifier la couleur de fond à partir toujours de la feuille "Relookage".
Pour ceux qui seraient intéressés par cette macro, l'utiliser est fort simple ; il suffit de définir dans chaque feuille la zone, disons, stratégique de celle-ci, c'est-à-dire la zone où quelque chose se passe (le reste étant vierge) : Feuille1 --> Zone1 / Feuille2 --> Zone2...
Pour ce faire, il suffit de sélectionner la plage "stratégique" de la feuille puis de la nommer.
Et voilà, il n'y a rien d'autre à faire, la macro est alors opérationnelle et le résultat, ma foi, des plus attractifs !

Dans le module il y a les 2 dernières versions que tu as concoctées. Je les ai à peine modifiées pour des raisons de boutons "Controles ActiveX" qui appellent la macro.
L'avant dernière version marche parfaitement bien pour ce classeur, mais pas forcément pour celui sur lequel je travaille (problème avec des colonnes nommées). Mais j'en reparlerai sur un autre post.
La dernière, curieusement, a un problème uniquement quand on veut modifier la couleur de fond de la feuille "Relookage".
Enfin, tentant de comprendre la syntaxe de la dernière mouture, j'avoue ne pas bien saisir ".Parent" ; L'aide d'Excel étant des plus minimaliste...

Encore merci pour ton efficacité.
 

Pièces jointes

Re : Changer de "Toile de Fond"

Bonsoir Fo_rum

J'ai essayé ta suggestion et n'ai absolument rien compris.
Supprimant la feuille "Relookage" (pourquoi pas...), comment peut-on changer de couleurs de fonds ???

That is the question!
 
Re : Changer de "Toile de Fond"

Bonsoir,

comme il est écrit sur chaque feuille,
Cliquer sur [A1] pour choisir le fond
la palette des couleurs, pour remplir la cellule A1, apparaît et il suffit, après avoir choisi, de valider. Maintenant, on peut avoir une légère attente la première fois.
La macro est dans ThisWorkbook pour être opérationnelle sur toutes les feuilles.
L'idée est de copier la zone (format compris) dans une autre feuille, de changer le fond la feuille puis de reprendre la zone avant de la traiter. La zone est définie de façon large pour recouvrir les différents onglets.
 
Re : Changer de "Toile de Fond"

Ok, bravo !

J'avoue que je n'avais pas correctement lu l'explication sur la feuille. Et pourtant c'était écrit en GROS !

Faire apparaître la palette sans passer par les menus, voilà une excellente idée, surtout si nous envisageons que nous sommes en mode "Plein Écran".
Je cherchais depuis un moment la possibilité de faire apparaître la palette des couleurs au moyen des API, mais étais resté bredouille.
Ton idée de cliquer sur la cellule "A1" pour la faire apparaître est une option. Personnellement je préfère la solution de la feuille "Relookage" car on peut y mettre d'autres choses comme, par exemple, modifier la couleur des lignes du ou des tableaux se trouvant sur une feuille donnée.
Si je conserve la feuille "Relookage", comment, en cliquant juste sur un des fonds que je veux modifier, puis-je faire apparaître cette palette, puis, si la couleur me convient, cliquer sur "GO!" pour que le fond change ?

Quoi qu'il en soit, ton intervention aura fait avancer d'un gros cran cette mise en forme.

Bonne soirée.
 
Re : Changer de "Toile de Fond"

Bonjour Magic Doctor, le forum,

Pour travailler sur plusieurs feuilles, il suffit de paramétrer la macro :

Code:
Sub MiseEnFormeFond(CouleurFond As Range, Zone As Range, deb)
'job75
'paramètre deb : 1ère ligne à colorer dans la feuille
Dim coul, cel As Range, plage As Range

CouleurFond.Select
coul = Application.Dialogs(xlDialogPatterns).Show
If coul = False Then Exit Sub
coul = CouleurFond.Interior.Color
Application.ScreenUpdating = False
Zone.Parent.Activate

'---colore la zone---
For Each cel In Zone
  If IsEmpty(cel) And cel.Borders.Value = xlNone Then _
    Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
Next
If Not plage Is Nothing Then plage.Interior.Color = coul

'---colore le reste de la feuille (4 plages entourant Zone)---
On Error Resume Next
With Zone
  .Offset(, 1 - .Column).Resize(, .Column - 1).Interior.Color = coul
  .Offset(, .Columns.Count).Resize(, Columns.Count - .Column - .Columns.Count + 1).Interior.Color = coul
  .EntireRow.Offset(deb - .Row).Resize(.Row - deb).Interior.Color = coul
  .EntireRow.Offset(.Rows.Count).Resize(Rows.Count - .Row - .Rows.Count + 1).Interior.Color = coul
End With
End Sub
J'ai juste adapté la macro du post #23.

J'ai un faible pour elle car elle ne nécessite pas de document ou feuille auxiliaire.

A+
 

Pièces jointes

Re : Changer de "Toile de Fond"

Re,

Juste pour prendre le café.

On peut aussi utiliser le raccourci clavier Ctrl+A qui lance cette macro :

Code:
Sub Lance()
Dim nom As Name, Zone As Range
For Each nom In ThisWorkbook.Names
  If nom.Name Like "Zone*" Then
    Set Zone = Evaluate(nom.Name)
    If Zone.Parent.Name = ActiveSheet.Name Then _
      MiseEnFormeFond [A2], Zone, 2: Exit Sub
  End If
Next
End Sub
La cellule A2 est toujours en dehors de la zone nommée.

Et la ligne 1 n'est jamais colorée.

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…