5 mises en forme conditionnelles
Fermé
debutant03
-
11 août 2010 à 17:31
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 12 août 2010 à 19:54
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 12 août 2010 à 19:54
A voir également:
- 5 mises en forme conditionnelles
- Mise en forme conditionnelle excel - Guide
- Mise en forme tableau croisé dynamique - Guide
- Fichier gta 5 ✓ - Forum jeux en ligne
- Tableau de combinaison loto 5/90 - Forum Excel
- Resultat loto 5/90 ✓ - Forum Excel
10 réponses
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
Modifié par lermite222 le 12/08/2010 à 15:44
Modifié par lermite222 le 12/08/2010 à 15:44
Mais si tu tient vraiment à le faire en VBA, un code optimiser et avec détection d'erreur.
En cas d'effacement changer le format de la cellule par du texte (une cellule vide étant assimilée à zéro) ou taper une apostrophe dans la cellule.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub 'éviter les plantage quand sélectionne un bloc de cellule If IsNumeric(Target) Then With Target.Interior Select Case Target Case 0: .ColorIndex = 15 Case 1: .ColorIndex = 3 Case 2: .ColorIndex = 45 Case 3: .ColorIndex = 4 Case 4: .ColorIndex = 41 Case Else: .ColorIndex = xlNone End Select End With Else Target.Interior.ColorIndex = xlNone End If End Sub
En cas d'effacement changer le format de la cellule par du texte (une cellule vide étant assimilée à zéro) ou taper une apostrophe dans la cellule.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 710
12 août 2010 à 09:41
12 août 2010 à 09:41
Bonjour,
Ouvrez votre classeur EXCEL, ensuite appuyez sur les touches Alt et F11 pour ouvrir le VBA. Double Click à gauche sur ThisWorkbook et copier le code ci-dessous dans la fenêtre qui s'est ouverte. Enregistrer. Revenez sur le classeur EXECEL. Essayez
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Cellule_Modifiee = Target.Address
If Range(Cellule_Modifiee).Value = 0 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
Else
End If
End Sub
Il n'y a pas le code pour tester que les cellules modifiées sont dans la plage de votre matrice.
Bonne continuation
Ouvrez votre classeur EXCEL, ensuite appuyez sur les touches Alt et F11 pour ouvrir le VBA. Double Click à gauche sur ThisWorkbook et copier le code ci-dessous dans la fenêtre qui s'est ouverte. Enregistrer. Revenez sur le classeur EXECEL. Essayez
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Cellule_Modifiee = Target.Address
If Range(Cellule_Modifiee).Value = 0 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
Else
End If
End Sub
Il n'y a pas le code pour tester que les cellules modifiées sont dans la plage de votre matrice.
Bonne continuation
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 710
12 août 2010 à 10:36
12 août 2010 à 10:36
Rebonjour,
Remplacez le code par celui-ci
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Cellule_Modifiee = Target.Address
If Range(Cellule_Modifiee).Value = 0 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 15
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 3
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 45
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 4
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 41
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
Else
End If
End Sub
Remplacez le code par celui-ci
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Cellule_Modifiee = Target.Address
If Range(Cellule_Modifiee).Value = 0 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 15
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 3
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 45
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 4
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 41
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
Else
End If
End Sub
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2010 à 11:58
12 août 2010 à 11:58
Bonjour,
Si tu a Excel 2007 ou >, tu peu employer une Mise en forme conditionelle
A+
Si tu a Excel 2007 ou >, tu peu employer une Mise en forme conditionelle
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
Modifié par lermite222 le 12/08/2010 à 15:41
Modifié par lermite222 le 12/08/2010 à 15:41
Si ta plage contient déja des données tu peu actualiser avec..
Coller ce code dans le module de la feuille concernée.
Mettre le curseur au milieu de la macro et taper F5
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Coller ce code dans le module de la feuille concernée.
Sub Couleur() Dim Cel As Range For Each Cel In Range("G10:DT210") If IsNumeric(Cel) Then With Cel.Interior Select Case Cel Case 0: .ColorIndex = 15 Case 1: .ColorIndex = 3 Case 2: .ColorIndex = 45 Case 3: .ColorIndex = 4 Case 4: .ColorIndex = 41 End Select End With End If Next End Sub
Mettre le curseur au milieu de la macro et taper F5
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Une dernière question pour f894009, si je supprime une cellule déjà renseignée, un message d'erreur de type "erreur d'exécution '13' incompatibilité de type" apparaît. Et le fond de ma cellule reste. Comment éviter ce phénomène? Je voudrais que le fond disparaisse si je supprime le contenu de la cellule. Est-ce possible? Etant un document à diffuser je souhaiterais que les utilisateurs (niveau encore plus basique que moi) n'aient pas à avoir affaire à l'editor VBA. Merci encore d'avance.
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2010 à 15:34
12 août 2010 à 15:34
Bah... j'ai la solution mais vu que c'est pour f894009
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2010 à 15:47
12 août 2010 à 15:47
Fait.. Reprend mon premier code.
Xymo
Messages postés
8
Date d'inscription
mardi 22 juin 2010
Statut
Membre
Dernière intervention
26 août 2010
6
12 août 2010 à 14:03
12 août 2010 à 14:03
Ce genre de fonctionnalité est déjà intégrée à Excel, tu sélectionnes ta plage de cellules ( ici G10 à DT210 ) et après tu va dans Format > Mise en forme conditionnelle et là tu peux ajouter tes 5 conditions en spécifiant les couleurs pour chacune d'entre elles. Dans la liste choisis bien "égale à" . Voilà !
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2010 à 15:33
12 août 2010 à 15:33
Uniquement à partir de Excel 2007, avant 3 conditions maximum pour les MFC.
D'ou mon premier poste !
D'ou mon premier poste !
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 710
12 août 2010 à 16:08
12 août 2010 à 16:08
Bonjour,
Ce code remet la couleur ou le manque de couleur
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Cellule_Modifiee = Target.Address
If Range(Cellule_Modifiee).Value = 0 And Not IsEmpty(Range(Cellule_Modifiee).Value) Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 15
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 3
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 45
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 4
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 41
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
ElseIf IsEmpty(Range(Cellule_Modifiee)) Then
Range(Cellule_Modifiee).Select
Selection.Interior.ColorIndex = xlNone
Selection.Font.ColorIndex = 0
Else
End If
End Sub
Ce code remet la couleur ou le manque de couleur
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Cellule_Modifiee = Target.Address
If Range(Cellule_Modifiee).Value = 0 And Not IsEmpty(Range(Cellule_Modifiee).Value) Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 15
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 3
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 45
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 4
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 41
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
ElseIf IsEmpty(Range(Cellule_Modifiee)) Then
Range(Cellule_Modifiee).Select
Selection.Interior.ColorIndex = xlNone
Selection.Font.ColorIndex = 0
Else
End If
End Sub
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 710
12 août 2010 à 16:11
12 août 2010 à 16:11
Bonjour,
Ce code marche pour toutes les feuilles du classeur
Ce code marche pour toutes les feuilles du classeur
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2010 à 16:41
12 août 2010 à 16:41
MISE EN FORME CONDITIONELLE
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2010 à 16:42
12 août 2010 à 16:42
OU MA 2ém MACRO
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2010 à 16:23
12 août 2010 à 16:23
Pour que ça fonctionne sur toutes les feuilles ou sur plusieur...
Supprimer les codes mis dans les modules des feuilles.
Mettre dans le module de ThisWorkbook...
A+
Supprimer les codes mis dans les modules des feuilles.
Mettre dans le module de ThisWorkbook...
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'Si pas sur toutes les feuilles.. Sinon, enlever le 1er IF If Sh.Name = "Feuil1" Or Sh.Name = "Feuil2" Then If Target.Count > 1 Then Exit Sub 'éviter les plantage quand sélectionne un bloc de cellule If IsNumeric(Target) Then With Target.Interior Select Case Target Case 0: .ColorIndex = 15 Case 1: .ColorIndex = 3 Case 2: .ColorIndex = 45 Case 3: .ColorIndex = 4 Case 4: .ColorIndex = 41 Case Else: .ColorIndex = xlNone End Select End With Else Target.Interior.ColorIndex = xlNone End If End If End Sub
A+
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 710
12 août 2010 à 17:20
12 août 2010 à 17:20
Re moi,
Ce code remplace le précédent et il fait la copie sur la feuil2, il faut enlever les formules que vous avez mises sur cette feuille
Dim x
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = False
Cellule_Modifiee = Target.Address
x = x + 1
If x > 1 Then x = 0: Exit Sub ' pour éviter une boucle de 234
If Range(Cellule_Modifiee).Value = 0 And Not IsEmpty(Range(Cellule_Modifiee).Value) Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 15
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 3
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 45
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 4
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 41
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf IsEmpty(Range(Cellule_Modifiee)) Then
Range(Cellule_Modifiee).Select
Selection.Interior.ColorIndex = xlNone
Selection.Font.ColorIndex = 0
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
Else
End If
Sheets("Feuil1").Select
Application.CutCopyMode = False
End Sub
'Mise en forme feuil2
'--------------------
Sub Copie_Données(Cellule_Modifiee)
Sheets("Feuil2").Select
Range(Cellule_Modifiee).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
Ce code remplace le précédent et il fait la copie sur la feuil2, il faut enlever les formules que vous avez mises sur cette feuille
Dim x
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = False
Cellule_Modifiee = Target.Address
x = x + 1
If x > 1 Then x = 0: Exit Sub ' pour éviter une boucle de 234
If Range(Cellule_Modifiee).Value = 0 And Not IsEmpty(Range(Cellule_Modifiee).Value) Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 15
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 1 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 3
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 2 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 45
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 3 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 4
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf Range(Cellule_Modifiee).Value = 4 Then
Range(Cellule_Modifiee).Select
Selection.Font.ColorIndex = 41
With Selection.Interior
.ColorIndex = 41
.Pattern = xlSolid
End With
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
ElseIf IsEmpty(Range(Cellule_Modifiee)) Then
Range(Cellule_Modifiee).Select
Selection.Interior.ColorIndex = xlNone
Selection.Font.ColorIndex = 0
Selection.Copy
Call Copie_Données(Cellule_Modifiee)
Else
End If
Sheets("Feuil1").Select
Application.CutCopyMode = False
End Sub
'Mise en forme feuil2
'--------------------
Sub Copie_Données(Cellule_Modifiee)
Sheets("Feuil2").Select
Range(Cellule_Modifiee).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
Bon allez dernière question pour mon satané doc et je n'embête plus personne cette fois : quand je supprime une ligne entière sur ma première feuille (sélection ligne puis Ctrl -), un message d'erreur apparaît et la suppression ne se répercute pas sur la seconde feuille... Une solution pour éviter ça?
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
Modifié par lermite222 le 12/08/2010 à 19:55
Modifié par lermite222 le 12/08/2010 à 19:55
Inscrit-toi sur CCM, cela me permettra de t'envoyer un MP et de remettre les pendules à l'heure.