Macro de mise en forme conditionnelle

Fermé
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016 - 24 mars 2016 à 16:19
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016 - 30 mars 2016 à 19:15
Bonjour. Je vous expose mon problème après avoir essayer de chercher sur plusieurs forums.

J'ai un tableau de saisie numérique que j'appellerais Plage1.
Je souhaiterais qu'à chaque saisie, la valeur soit recherchée dans un autre tableau(Plage2). Si la même valeur s'y trouve, alors changer la couleur de la cellule de saisie (Plage1) . J'ai fait des essais avec application.countif, sans avoir le résultat escompté . Quelqu'un aurait il la solution ou un début de solution s'il vous plaît ?

9 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
24 mars 2016 à 17:52
Bonjour,

La méthode countif devrait pourtant te donner satisfaction.
Envoie un fichier exemple avec les 2 plages.
https://www.cjoint.com/

A+
0
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016
25 mars 2016 à 09:51
Tout d'abord merci pour la réponse...
voici tout d'abord le document de base
https://www.cjoint.com/c/FCziSlSSbVw

Les variables de la 1ere plage sont en bleu (elle peut être divisée en plusieurs plage si besoin)
L'objectif de ce document est que pour toute saisie dans la première plage, il aille vérifier d'abord si ce nombre existe dans le premier tableau en bas à droite. Si oui, changer la cellule dans une couleur donnée. Si ce nombre n'est pas dans le 1er tableau, aller chercher dans le deuxième où lui sera attribuer un autre code couleur en cas d’occurrence, etc...
Pour en final, si le numéro n'est dans aucun tableau, n'appliquer aucune modification de couleur.

Donc ma première idée fut d'utiliser le "countif" avec le If then else....



D'avance merci
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
25 mars 2016 à 10:47
Bonjour,

1) Je n'ai pas compris où se trouvent les plages 1 (plage de saisie) et 2 (plage de contrôle).
Tu évoques le tableau1 puis tableau2, etc ... l'indication en bas à droite est un peu vague.

2) Pourquoi 2 feuilles ?

3) Tu dis que les variables de la 1ere plage (plage de saisie) sont en bleu. Elles sont donc déjà saisies.

Merci de compléter tes explications en donnant un exemple concret : je saisis la valeur xxx dans la cellule Feuil_x!YYY, je contrôle si cette valeur existe dans la plage Feuil_y!TTT:UUU, puis dans la plage Feuil_y!VVV:WWW et ainsi de suite jusqu'à la plage Feuil_y!YYY:ZZZ.
Etc.

A+
0
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016
25 mars 2016 à 12:37
Veuillez m'excuser, je vais préciser

Les Nombres en bleu ont été saisis à titre d'exemple pour les différencier des nombre en noir....Les nombres en bleus sont des variables, je peux les changer à tout moment.... Les nombres en noir n'ont pas d'autre utilité qu'une information de repère.

donc par exemple je souhaite saisir dans n'importe quelle cellule de la plage E11:AY12 une valeur numérique. Je souhaiterais alors que la macro recherche tout d'abord si ce nombre existe dans la plage A22:K28. Si oui, attribué à la cellule saisie, un fond de couleur spécifique.

Sinon, rechercher ce même nombre dans la plage M22:S28. Si le nombre existe dans cette plage, attribuer à la cellule de saisie un autre code couleur de cellule.

Sinon passer à la plage U22:AE28....etc

Tout en sachant que si le nombre saisi n'est dans aucune des plages du bas du document, aucun changement de couleur cellule ne sera affecté.


J'espere avoir été plus clair
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016
25 mars 2016 à 12:38
j'oubliais...la feuille 2 ne représente qu'un autre essai, ne pas en tenir compte pour ma question. Seule la feuille 1 est à utiliser
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
25 mars 2016 à 13:56
Ton fichier en retour
https://www.cjoint.com/c/FCzm22NV3Fq

A+
0
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016
25 mars 2016 à 15:26
Merci infiniment Gyrus, celà correspond exactement à ce que je cherchais. Je vais potasser certaines commandes auxquelles je n'avais pas pensé.

Excellente journée
0
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016
28 mars 2016 à 16:24
désolé de revenir vers vous mais il semble que la couleur ne change pas suivant les differentes plages...

Comment puis je améliorer votre macro afin qu'elle traite de cette manière...

si l'élément recherché se trouve en PlageS1 : rouge
PlageS2 jaune
PlageS3 vert
PlageS4 bleu
PlageS5 orange

et que sinon, la fonte repasse en noir ?

j'ai beau avoir essayer de trouver seul, en vain.

d'avance merci
0
Dwell76 Messages postés 7 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 30 mars 2016
30 mars 2016 à 19:15
je pense avoir trouvé la solution en analysant la réponse de Gyrus


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim PlageS1 As Range, PlageS2 As Range, PlageS3 As Range, PlageS4 As Range, PlageS5 As Range, PlageS6 As Range, PlageS As Range
Dim Tablo1
Dim Tablo2
Dim Tablo3
Dim Tablo4
Dim Tablo5
Dim i As Integer
If Target.Count > 1 Then Exit Sub
'Définition des plages de saisie
Set PlageS1 = Range("E5:BI5")
Set PlageS2 = Range("E11:BI11")
Set PlageS3 = Range("E12:BI12")
Set PlageS4 = Range("E18:BI18")
Set PlageS5 = Range("BF16:BH17")
Set PlageS = Application.Union(PlageS1, PlageS2, PlageS3, PlageS4, PlageS5)
'Définition des plages de contrôle
Tablo1 = Array("A22:L28")
Tablo2 = Array("M22:S28")
Tablo3 = Array("U22:AE28")
Tablo4 = Array("AG22:AM28")
Tablo5 = Array("AO22:AY28")
If Not Application.Intersect(Target, PlageS) Is Nothing Then
Target.Interior.ColorIndex = 2
For i = 0 To UBound(Tablo1)
If Application.CountIf(Range(Tablo1(i)), Target) > 0 Then
Target.Interior.ColorIndex = 3

ElseIf Application.CountIf(Range(Tablo2(i)), Target) > 0 Then
Target.Interior.ColorIndex = 6

ElseIf Application.CountIf(Range(Tablo3(i)), Target) > 0 Then
Target.Interior.ColorIndex = 10

ElseIf Application.CountIf(Range(Tablo4(i)), Target) > 0 Then
Target.Interior.ColorIndex = 45

ElseIf Application.CountIf(Range(Tablo5(i)), Target) > 0 Then
Target.Interior.ColorIndex = 43

Exit For
End If
Next i
End If
End Sub
0