capturer la couleur d'une cellule et l'appliquer à la ligne

kevinL2

XLDnaute Nouveau
Bonjour

Pour passer directement à la requête, passez au point 2 ;)

1. Contexte
j'utilise un fichier partagé (sous excel 2010) en réseau et j'ai observé récemment que ce fichier devenait rapidement très volumineux. Ce fichier étant sur un réseau pas très rapide... les nerfs flanchent.

Bref, c'est un simple fichier contenant une quinzaine de colonnes avec des données diverses, le tout sur un seul onglet. Aucune fioriture, aucune macro, aucun MFC : du texte, quelques dates et... des lignes coloriées

Le problème ce sont ces lignes coloriées... si si...

Je me suis aperçu que si une ligne avait quelques cellules d'une couleur, puis d'autres cellules de cette même ligne d'autres couleurs, la taille du fichier augmentait de manière, disons, TRES exagérée...
(j'ai réduit la taille d'un fichier de ce type de 33Mo à 6Mo rien qu'en ré-homogénéisant la couleur des lignes)

Or, si il y a une différence de couleur au sein d'une même ligne ce n'est pas volontaire, mais les utilisateurs ne sont pas forcément habitués à Excel...

Bref, je souhaite créer une macro auto-corrective sur cet aspect, car les utilisateurs de ce fichier sont nombreux.

2. la requête

A la fermeture du fichier, je souhaite que la macro "capture" la couleur de la cellule en A1, applique cette couleur à toute la ligne, puis fasse de même sur la ligne suivante (attention la couleur en B1 peut être différente) et ainsi de suite jusqu'à la "n"ième ligne et enfin sauvegarde avant de se fermer, sans toucher aux autres formats de texte éventuellement présents.
Mon problème est surtout que je ne trouve pas comment "capturer" la couleur d'une cellule.

3. l'alternative

Si vous avez une explication à cette hausse exponentielle de taille de fichier juste à cause des couleurs qui pourrait solutionner mon problème autrement, je suis aussi preneur. utilisateur d'Excel depuis longtemps, ce n'est que depuis que j'utilise Excel 2010 que je vois ça..



Si la question a déjà été posée, je m'en excuse, j'ai fait choux blanc jusqu'à présent. Si vous avez la solution, sortez moi de là :D !

D'avance merci
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : capturer la couleur d'une cellule et l'appliquer à la ligne

Bonsoir Kelvin, bonsoir le forum,

Peut-ête comme ça :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1" (à adapter)
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
    Set pl = .Range("A1:A" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Feuil1"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    cel.EntireRow.Interior.ColorIndex = cel.Interior.ColorIndex 'affecte à la ligne de la cellule la couleur de la cellule
Next cel 'prochaine cellule de la boucle
ActiveWorkbook.Save 'sauve le classeur
End Sub
 

kevinL2

XLDnaute Nouveau
Re : capturer la couleur d'une cellule et l'appliquer à la ligne

Bonjour

Merci pour cette réponse rapide, c'est la classe.

je viens de tester, cela marche en effet, mais certaines couleurs ne correspondent plus. un "rose saumon" devient "gris" Cela a peut-être un rapport avec les couleurs "classiques" et les couleurs de thème ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : capturer la couleur d'une cellule et l'appliquer à la ligne

Bonsoir Kelvin, bonsoir le forum,

Je n'ai ici que la version 2003 d'Excel où il n'y a pas les couleurs de thèmes... Je pourrais tester demain au boulot sur Excel 2010 et, peut-être, de proposer une aute solution... Pourrais-tu mettre un petit fichier exemple en pièce jointe ?
 

kevinL2

XLDnaute Nouveau
Re : capturer la couleur d'une cellule et l'appliquer à la ligne

Bien sûr, voici le fichier en pièce jointe

j'y ai inséré une copie d’écran du fichier pour bien voir la comparaison de couleurs avant-après

encore merci et bonne soirée
 

Pièces jointes

  • test_couleur.xlsm
    27.2 KB · Affichages: 45

Robert

XLDnaute Barbatruc
Repose en paix
Re : capturer la couleur d'une cellule et l'appliquer à la ligne

Bonjour Kelvin, bonjour le forum,

Désolé pour le retard... Ce code semble fonctionner correctement :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1" (à adapter)
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
    Set pl = .Range("A1:A" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Feuil1"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    cel.EntireRow.Interior.Color = cel.Interior.Color 'affecte à la ligne de la cellule la couleur de la cellule
Next cel 'prochaine cellule de la boucle
ActiveWorkbook.Save 'sauve le classeur
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 324
Membres
103 178
dernier inscrit
BERSEB50