OVH Cloud OVH Cloud

Traiter des doublons, triplets, quadruplets (!)

7 réponses
Avatar
tictok
Bonjour a tous !
Je dois traiter une liste comportant des codes se repetant deux fois, voire
plus (pas plus de 10 quand meme :D).
La colonne A est au format texte, la colonne E contient des nombres au
format general.
J'ai utilise un code simple que j'ai commence a transforme :

Sub CodesMultiples()
Set MaCell1 = Worksheets(1).Range("A1")
Set MaCell2 = Worksheets(1).Range("E1")
' Classement par ordre croissant de la colonne A
Columns("A:E").Select
Range("E1").Activate ' Est ce utile ?
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Do While Not IsEmpty(MaCell1)
Set MaCell1Autre = MaCell1.Offset(1, 0)
If MaCell1Autre.Value = MaCell1.Value Then
MaCell1.Interior.ColorIndex = 3
End If
Set MaCell1 = MaCell1Autre
Loop
End Sub

Ce que je voudrais, c'est un peu plus complique, surtout que le code peut
apparaitre plus de 2 fois !
SI MaCell1Autre.Value = MaCell1.Value, ALORS
SI MaCell2.Value (ou MaCell2Autre!) <> 0, ALORS colorer la cellule
MaCell1 en vert.
SINON, colorer la cellule MaCell1 en rouge.~
Fin du Premier SI
Fin du second SI
SINON (code pas trouve plusieurs fois), colorer en gold (code 44).

Le probleme est que pour un code identique (Colonne A), plusieurs cellules
de la colonne E (les MaCell2 et consorts) peuvent etre <> 0 ou = 0.
Donc, pour un meme code, une ou plusieurs cellules en vert, une ou plusieurs
cellules en rouge.

Voici le code pour obtenir ce que je veux :
Sub CodesMultiples()
Set MaCell1 = Worksheets(1).Range("A1")
Set MaCell2 = Worksheets(1).Range("E1")
' Classement par ordre croissant de la colonne A
Columns("A:E").Select
Range("E1").Activate ' Est ce utile ?
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Do While Not IsEmpty(MaCell1)
Set MaCell1Autre = MaCell1.Offset(1, 0)
Set MaCell2Autre = MaCell2.Offset(1, 0)
If MaCell1Autre.Value = MaCell1.Value Then
If MaCell2.Value <> 0 Then
MaCell1.Interior.ColorIndex = 4
ElseIf MaCell2.Value = 0 Then
MaCell1.Interior.ColorIndex = 3
End If
If MaCell2Autre.Value <> 0 Then
MaCell1Autre.Interior.ColorIndex = 4
ElseIf MaCell2Autre.Value = 0 Then
MaCell1.Interior.ColorIndex = 3
End If
ElseIf MaCell1Autre.Value <> MaCell1.Value Then
MaCell1.Interior.ColorIndex = 44
End If
Set MaCell1 = MaCell1Autre
Set MaCell2 = MaCell2Autre
Loop
End Sub

Sauf que ca ne marche pas tres bien :
- je voudrais eviter d'ecrire les cas ElseIf car soit c'est <> 0 , soit ca
ne l'est pas. Mais comment faire ?
- un code qu'on retrouve 6 fois est en rouge alors que sa cellule E est <>
0, et une autre fois il est en jaune.
- la seule fois ou la coloration verte semble marcher est quand le code
n'est present que deux fois, un vrai doublon donc.

Quelqu'un saurait t'il m'aider ???
Merci a mon sauveur :)

7 réponses

Avatar
AV
Et si tu nous posais la question sous la forme : "Je voudrais colorer en
vert....si ....blabla.. et en rouge...si ...blablabla..." ça permettrait
(peut-être) d'utiliser une MFC

AV
Avatar
tictok
(Super bien, mon message de depart a disparu ... Passons)

Contenu de la colonne A : Code.
Colonne A : format texte.
Colonne E : nombres au format general

SI je trouve plusieurs fois le meme Code, ALORS
SI la cellule de la colonne E <> 0, ALORS colorer la cellule
du code en vert.
SINON, colorer la cellule du code en rouge.
Fin du Premier SI
Fin du second SI
SINON (Code pas trouve plusieurs fois), colorer la cellule du code en gold
(code 44).

Voila, c'est mieux comme ca ? ;)

MFC = ?

"AV" escreveu na mensagem
news:OzkZq9$
Et si tu nous posais la question sous la forme : "Je voudrais colorer en
vert....si ....blabla.. et en rouge...si ...blablabla..." ça permettrait
(peut-être) d'utiliser une MFC

AV




Avatar
tictok
Super bien, mon message de depart a disparu ... Passons)

Contenu de la colonne A : Code.
Colonne A : format texte.
Colonne E : nombres au format general

SI je trouve plusieurs fois le meme Code, ALORS
SI la cellule de la colonne E <> 0, ALORS colorer la cellule
du code en vert.
SINON, colorer la cellule du code en rouge.
Fin du Premier SI
Fin du second SI
SINON (Code pas trouve plusieurs fois), colorer la cellule du code en gold
(code 44).

Voila, c'est mieux comme ca ? ;)

MFC = ?




"AV" escreveu na mensagem
news:OzkZq9$
Et si tu nous posais la question sous la forme : "Je voudrais colorer en
vert....si ....blabla.. et en rouge...si ...blablabla..." ça permettrait
(peut-être) d'utiliser une MFC

AV




Avatar
AV
Voila, c'est mieux comme ca ? ;)


Nettement !

Solution par la MFC (Mise en Forme Conditionnelle)
Sélection A1:A20 (à adapter) --> Format --> MFC -->
Condition1 --> la formule est :
=(NB.SI($A$1:$A$20;A1)>1)*(E1<>0)
--> motif : Vert
Condition2 --> la formule est :
=NB.SI($A$1:$A$20;A1)=1
--> motif : Jaune

AV

Avatar
tictok
Eh en VBA :D ?

"AV" escreveu na mensagem
news:#
Voila, c'est mieux comme ca ? ;)


Nettement !

Solution par la MFC (Mise en Forme Conditionnelle)
Sélection A1:A20 (à adapter) --> Format --> MFC -->
Condition1 --> la formule est :
=(NB.SI($A$1:$A$20;A1)>1)*(E1<>0)
--> motif : Vert
Condition2 --> la formule est :
=NB.SI($A$1:$A$20;A1)=1
--> motif : Jaune

AV






Avatar
tictok
Desole AV, mon besoin a change entre temps mais c'est dans le meme genre.

Contenu de la colonne A : Code.
Contenu de la colonne E : CelluleE.
Colonne A : format texte.
Colonne E : nombres au format general

SI je trouve plusieurs fois le meme Code (colonneA), ALORS
- CAS 1 : Toutes les CelluleE sont = 0. ALORS en colorer une en vert,
les autres en rouge.
- CAS 2 : Toutes les CelluleE sont <> 0 (et egales entre elles. Comme
c'est sur a 99,999%, pas besoin pour le moment de le verifier). ALORS en
colorer une en vert, les autres en rouge.
- CAS 3 : Les CelluleE sont <> ou = 0. ALORS en colorer une qui est <> 0
en vert, les autres en rouge.
Fin du Premier SI
SINON (Code pas trouve plusieurs fois), colorer la CelluleE en gold (code
44).

Exemples des trois cas :
Cas 1 :
AAA111 0
AAA111 0
AAA111 0
Il faut une des trois (la premiere, c'est plus simple, non ?) en vert, les
autres en rouge
Cas 2 :
AAA111 234
AAA111 234
AAA111 234
Il faut une des trois (la premiere, c'est plus simple, non ?) en vert, les
autres en rouge
Cas 3 :
AAA111 234
AAA111 0
AAA111 234
A la fin, il faut le premier AAA111 en vert, les deux autre en rouge.
Cas impossible
AAA111 567
AAA111 0
AAA111 234
Le cas qui ne doit jamais exister. J'en suis sur a 99,9999999999% des cas.

Je pense avoir donne le plus d'infos possibles.

Vu mon besoin, un Case Of sera utilise ?
Merci AV :)

"AV" escreveu na mensagem
news:#
Voila, c'est mieux comme ca ? ;)


Nettement !

Solution par la MFC (Mise en Forme Conditionnelle)
Sélection A1:A20 (à adapter) --> Format --> MFC -->
Condition1 --> la formule est :
=(NB.SI($A$1:$A$20;A1)>1)*(E1<>0)
--> motif : Vert
Condition2 --> la formule est :
=NB.SI($A$1:$A$20;A1)=1
--> motif : Jaune

AV






Avatar
tictok
Re AV, merci de te pencher sur mon probleme.
Je vais essayer de coder ce que je veux en VB.
Je devrais utiliser un Select Case.

Bonne soiree !

"AV" escreveu na mensagem
news:#
Voila, c'est mieux comme ca ? ;)


Nettement !

Solution par la MFC (Mise en Forme Conditionnelle)
Sélection A1:A20 (à adapter) --> Format --> MFC -->
Condition1 --> la formule est :
=(NB.SI($A$1:$A$20;A1)>1)*(E1<>0)
--> motif : Vert
Condition2 --> la formule est :
=NB.SI($A$1:$A$20;A1)=1
--> motif : Jaune

AV