format personnalisé

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 !

eutrophisation

XLDnaute Occasionnel
Bonsoir,

Pourriez vous m'aider à définir 5 couleurs en utilisant le format personnalisé et la mise en forme conditionnelle pour différencier des valeurs entiers et décimales. Le problème se pose d'avantage dans les valeurs décimales. Certaines de mes cellules contiennent des valeurs avec 1 chiffre après la virgule d'autres avec 2 chiffres après la virgule ainsi que 3 chiffres après la virgule. Voudriez vous m'indiquer les formules appropriées pour les nombres décimaux.
Merci de votre attention.
Existe t il des formules dans format personnalisé pour le remplissage des cellules (motif) en dehors de celles proposées par la mise en forme conditionnelle.
Merci pour attention.
 
Re : format personnalisé

Bonjour le fil, le forum,

1) Pour que les limites des classes prennent leur couleur, ajouter ou retrancher une petite valeur :

Code:
'Sub Ajout()
'à n'exécuter qu'une fois
'Dim r As Range
'For Each r In [R9:U35]
'  If r <> "" Then _
'  r = r + IIf(Left(Cells(r.Row, "V"), 1) = ">", 1, -1) * "1E-9"
'Next
'End Sub
Voyez les valeurs dans la barre de formule pour la plage R9:U35.

2) Pour que la couleur d'une cellule s'adapte quand sa valeur est modifiée j'ai paramétré la macro :

Code:
Sub CouleurClasse(r As Range)
Dim sens As Integer, n As Variant
For Each r In r
  If r = "" Then
    r.Interior.ColorIndex = xlNone 'RAZ
  Else
    sens = IIf(Left(Cells(r.Row, "V"), 1) = ">", 1, -1)
    n = Application.Match(r, Cells(r.Row, "R").Resize(, 4), sens)
    If IsError(n) Then n = 0
    r.Interior.Color = Cells(r.Row, "R").Offset(, n).Interior.Color
  End If
Next
End Sub
Elle est appelée par ces 2 macros dans le code de la feuille :

Code:
Private Sub CommandButton1_Click()
CouleurClasse [D9:O35]
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [D9:O35])
If Not Target Is Nothing Then CouleurClasse Target
End Sub
Fichier (2).

A+
 

Pièces jointes

Dernière édition:
Re : format personnalisé

Re,

Si vous ne voulez pas de bouton voici 2 macros à lancer par les touches Ctrl+A ou Ctrl+E :

Code:
Sub AppliquerCouleur()
'se lance par Ctrl+A
CouleurClasse [D9:O35]
End Sub

Sub EffacerCouleur()
'se lance par Ctrl+E
[D9:O35].Interior.ColorIndex = xlNone
End Sub
Et bien sûr les couleurs s'adaptent toujours aux modifications des cellules.

Fichiers (3) et (3 bis).

A+
 

Pièces jointes

Re : format personnalisé

Re,

La modification des limites des classes sur la plage R9:U35 ne me plaisait pas trop...

Et en effet il suffit de se décaler quand une valeur est égale à une limite :

Code:
If Application.CountIf(Cells(r.Row, "R").Resize(, 4), r) Then n = n - 1
La macro modifiée :

Code:
Sub CouleurClasse(r As Range)
Dim sens As Integer, n As Variant
For Each r In r
  If r = "" Then
    r.Interior.ColorIndex = xlNone 'RAZ
  Else
    sens = IIf(Left(Cells(r.Row, "V"), 1) = ">", 1, -1)
    n = Application.Match(r, Cells(r.Row, "R").Resize(, 4), sens)
    If IsError(n) Then n = 0
    If Application.CountIf(Cells(r.Row, "R").Resize(, 4), r) Then n = n - 1
    r.Interior.Color = Cells(r.Row, "R").Offset(, n).Interior.Color
  End If
Next
End Sub
Elle est juste un tout petit peu moins rapide...

Fichiers (4) et (4 bis).

A+
 

Pièces jointes

Dernière édition:
Re : format personnalisé

Re,

Eh bien on voit que vous aimez VBA vous 🙂

Il y a des macros dans tous les sens, mais rien pour les macros du post #35 🙄

Du coup je me demande si vous avez compris ce que je vous ai proposé...

Quoi qu'il en soit voici ce que j'ai fait pour la feuille QUALITE :

1) J'ai d'abord renseigné la plage BM9:BM63 avec des > et des < (vous ne l'avez pas fait).

2) J'ai mis dans le code de la feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [D9:AR63])
If Not Target Is Nothing Then CouleurClasse Target
End Sub
3) J'ai mis dans Module8 :

Code:
Sub AppliquerCouleur()
'se lance par Ctrl+A
CouleurClasse [D9:AR63]
End Sub

Sub EffacerCouleur()
'se lance par Ctrl+E
[D9:AR63].Interior.ColorIndex = xlNone
End Sub

Sub CouleurClasse(r As Range)
Dim sens As Integer, n As Variant
r.Interior.ColorIndex = xlNone 'RAZ
For Each r In r
  If r <> "" Then
    sens = IIf(Left(Cells(r.Row, "BM"), 1) = ">", 1, -1)
    n = Application.Match(r, Cells(r.Row, "BI").Resize(, 4), sens)
    If IsError(n) Then n = 0
    If Application.CountIf(Cells(r.Row, "BI").Resize(, 4), r) Then n = n - 1
    r.Interior.Color = Cells(r.Row, "BI").Offset(, n).Interior.Color
  End If
Next
End Sub
4) J'ai affecté les racourcis clavier Ctrl+A et Ctrl+E aux macros concernées.

Le lien pour le fichier http://cjoint.com/?CBksT26hokk

A+
 
Re : format personnalisé

Re,

Ah je n'avais pas fait attention, les cellules des plages à colorer sont calculées par des formules.

Telle quelle, la macro Worksheet_Change que j'ai mise dans la feuille ne servira à rien.

Le plus simple sera de mettre à jour par Ctrl+A. Toutes les cellules étant traitées, ce sera un peu long si toutes les cellules sont renseignées.

On pourrait construire d'autres macros Worksheet_Change pour les plages pilotant les formules, mais là je commence à en avoir plein le dos.

A+
 
Re : format personnalisé

Re,

Toutes les formules dépendent en fait des autres feuilles, donc utiliser une macro Worksheet_Activate.

Mettre uniquement dans le code de la feuille QUALITE :

Code:
Private Sub Worksheet_Activate()
Dim r As Range, sens As Integer, n As Variant
[D9:W63,AU9:AW63].Interior.ColorIndex = xlNone 'RAZ
For Each r In [D9:W63,AU9:AW63]
  If r <> "" Then
    sens = IIf(Left(Cells(r.Row, "BM"), 1) = ">", 1, -1)
    n = Application.Match(r, Cells(r.Row, "BI").Resize(, 4), sens)
    If IsError(n) Then n = 0
    If Application.CountIf(Cells(r.Row, "BI").Resize(, 4), r) Then n = n - 1
    r.Interior.Color = Cells(r.Row, "BI").Offset(, n).Interior.Color
  End If
Next
End Sub

Sub EffacerCouleur()
'se lance par Ctrl+E
[D9:W63,AU9:AW63].Interior.ColorIndex = xlNone
End Sub
Je maintiens la macro EffacerCouleur, ce peut être utile.

Le lien vers le fichier http://cjoint.com/?CBkxkjpklJk

A+
 
- 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

Réponses
14
Affichages
884
  • Question Question
Réponses
18
Affichages
2 K
Retour