mise en forme conditionnelle

  • Initiateur de la discussion Initiateur de la discussion lectave
  • Date de début Date de début

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 !

L

lectave

Guest
Bonjour,
j'ai une base de données (excel 2003) contenant une dizaine de colonnes. La premières colonne contient le nom de la personne les autres colonnes des données diverses. Toute les semaines cette base s'enrichit, quelques fois de noms déjà existants quelques fois de nouveaux noms. Le tableau est trié par ordre alphabétique. Je voudrais griser un nom sur 2 (alternance gris - blanc) pour rendre le tableau plus lisible. Il faut griser toute la ligne (10 colonnes) sachant que le nombre de ligne pour chaque nom est variable.
Pour être plus explicite voici un exemple (n = nom):
n1 : gris
n1 : gris
n1 : gris
n2 : blanc
n2 : blanc
n3 : gris
n3 : gris
n4 : blanc
n5 : gris
n5 : gris
n5 : gris
n6 : blanc
etc ...
J'ai réflechi à pas mal de solutions, mais je n'ai pas trouvé pour le moment ...
Merci d'avance.
 
Bonjour lectave,

comme tu l'indique dans ton message tu veux pour abtenir une meilleure lisibilité, que les ligne s soient grisée à concurence de 1 sue 2
sauf que ton exemple défini les N1,N3... en gris et d'autres en blanc, le VBA peut aider:

Sub gris()
Range('1:1,3:3,5:5,7:7,9:9,11:11,13:13,15:15').Select
With Selection.Interior
.ColorIndex = 15
End with
Range('A1').select
End sub

la sélection de la macro ci-dessus sélectionne la ligne 1 à 15, une sur deux, à modifier

@+
Nanard
 
effectivement, lors de la prochaine mise à jour de la base de données on peut très bien avoir :
n1 : gris
n1 : gris
n1 : gris
n1 : gris
n2 : blanc
n2 : blanc
n3 : gris
n3 : gris
n4 : blanc
n4 : blanc
n4 : blanc
n5 : gris
n5 : gris
n5 : gris
n6 : blanc
n6 : blanc
à la place de l'exemple du premier post
Le code ne doit donc pas être figé mais évolutif ...
 
Salut,

Par le truchement d'une colonne supplémentaire, il n'y a aucun problème, mais j'essaie (déjà depuis un moment) à le faire sans cette colonne !

En attendant, je te donne cette version, mais qui sera améliorée, je' e'spère bien .

Â+



[file name=MFC_lectave_V1.zip size=2332]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/MFC_lectave_V1.zip[/file]
 
Bonjour Lectave, nanard, André,

J'ai trouvé une formule en MFC qui a l'air de bien marcher:

=MOD(ARRONDI(SOMME(1/NB.SI($A$1:$A1;$A$1:$A1));0);2)=0

La formule va compter le nombre de valeurs différentes jusqu'à la ligne en cours ( la plage s'agrandit au fur et à mesure des n°s de lignes) et prendre le modulo 2.

Cela ne fonctionne correctement que si toutes les lignes d'un même nom se trouvent à la suite les unes des autres.

Voir fichier joint.

@+

Gael [file name=Affichage_20050829185332.zip size=1777]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Affichage_20050829185332.zip[/file]
 

Pièces jointes

Salut Gael,

J'avais trouvé la formule de MFC suivante, sur base d'une formule de Monique :

=MOD(SOMMEPROD(1/NB.SI(A$2:A2;A$2:A2));2)=0

Elle ressemble étrangement à ta tienne, mais j'attendais une réaction de lectave avant de la publier.

L'avantage de cette formule, c'est qu'elle ne nécessite pas de colonne supplémentaire.
Son désavantage, c'est qu'elle ne fonctionne que si la liste est triée.

Â+
 
Rebonjour André,

J'ai du rajouter la fonction Arrondi pour que ça marche dans tous les cas, sinon, j'obtenais quelques aberrations mais je n'ai pas compris pourquoi. J'ai essayé en utilisant Sommeprod et c'est la même chose, le résultat à la ligne 19 sans Arrondi est:

-0,0000000000000008881784 et non pas 0.

Si la formule doit fonctionner sur plusieurs colonnes, le $A est nécessaire.

Pour la liste, il n'est pas nécessaire qu'elle soit triée mais seulement que les lignes concernant un même nom soient contigües.

@+

Gael
 
Salut,

moi j'ai pondu ceci qui devrait aller :

Option Explicit
Sub UnesurX()
On Error Resume Next
Dim i As Long, n As Long
Dim Rngdelete2, Rng2, Valeurs
Sheets(1).Select
n = Cells(65536, 1).End(xlUp).Row
Range('A1:J' & n + 2).ClearFormats
For i = 2 To n
If (Cells(i, 1) = Cells(i + 1, 1)) Then
Range(Cells(i, 1), Cells(i, 10)).Interior.ColorIndex = 15
Else
Range(Cells(i, 1), Cells(i, 10)).Interior.ColorIndex = 15
Valeurs = Cells(i + 1, 1)
While Cells(i + 1, 1) = Valeurs
i = i + 1
Wend
Range(Cells(i + 1, 1), Cells(i + 1, 10)).Interior.ColorIndex = 15
End If
suivant:
Next
End Sub

Patrick
 
Boujour à tous,
j'ai essayé les différentes méthodes que vous m'avez proposées.
J'ai retenu au final :

'=MOD(ARRONDI(SOMMEPROD(1/NB.SI($B$3:$B3;$B$3:$B3));0);2)=0'
Selection.FormatConditions(1).Interior.ColorIndex = 15

dans une petite macro de mef, ça à l'air de fonctionner pour le moment.
Merci pour vos conseils en tous cas.
@+
Lectave
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
227
M
Réponses
2
Affichages
763
MaëvaW_
M
E
Réponses
1
Affichages
1 K
A
Réponses
2
Affichages
1 K
S
  • Question Question
Réponses
9
Affichages
1 K
G
Réponses
9
Affichages
1 K
G
G
Réponses
13
Affichages
1 K
Retour