Macro mise en forme conditionnelle

Résolu/Fermé
AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015 - 16 nov. 2015 à 13:05
AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015 - 17 nov. 2015 à 18:29
Bonjour,

Je bloque sur une macro VBA de mise en forme conditionnelle sur un fichier Excel 2007.

Je cherche en effet modifier le format de certaines cellules par ligne, à partir de la ligne 5 et pour les colonnes de A à I.
Le critère qui doit faire changer la couleur de ces cellules se trouve sur chaque ligne à partir de la ligne 5, et dans la colonne G. Il s'agit d'un élément texte issu d'une liste déroulante, qui peut être : Appel d'Offres, Etude de faisabilité, En cours, Perdu, Terminé.

Voici ma macro actuelle :

Private Sub FormatCondition()


Application.ScreenUpdating = False
For Each c In [G5:G135]
c.Select
Dim l As Long
l = ActiveCell.Row

If ActiveCell.Value = "Appel d'Offres" Then

Rows(4, "").Select
Selection.Font.ColorIndex = 45
Else
If ActiveCell.Value = "Etude de faisabilité" Then
If ActiveCell.Value = "En cours" Then
If ActiveCell.Value = "Perdu" Then
If ActiveCell.Value = "Terminé" Then
End If
End If


Application.ScreenUpdating = True
Range(G5:G135).Select

End Sub


Cela fait plusieurs années que je n'ai pas touché à VBA et j'avoue mes lacunes et je suis preneur de chacun de vos conseils.

Merci d'avance à tous.


5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 nov. 2015 à 13:44
Bonjour
4 coUleurs ou 1 seule (45?) ?
0
AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015
16 nov. 2015 à 13:48
Il me faut 4 couleurs différentes en effet :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 16/11/2015 à 14:08
Cela fait plusieurs années que je n'ai pas touché à VBA

Réjouis toi,tu es parti pour une 2° jeunesse !

Option Explicit
'---------------
Sub conditionner_format()
Dim Lig As Byte, Etat As String

Application.ScreenUpdating = False
'nettoyage
Range("G5:G135").Font.ColorIndex = -4142
'affectation couleur
For Lig = 5 To 135
Etat = Cells(Lig, "G")
Select Case Etat
Case "Appel'd'offres"
Cells(Lig, "G").Font.ColorIndex = 5
Case "Etude de faisabilité"
Cells(Lig, "G").Font.ColorIndex = 7
'etc.....
End Select
Next
End Sub


a compléter et choisir les coluleurs

Michel
0
AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015
16 nov. 2015 à 14:18
Merci Michel pour cette réponse.
En revanche, je ne souhaite pas colorer la colonne G mais les lignes à partir de la ligne 5 jusqu'à 135, sur les colonnes de A à I.

Dans votre réponse, je ne comprends pas le "=-4142".

Merci d'avance.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015
16 nov. 2015 à 14:49
Excuse moi j'avais mal interprété. je dois m'absenter et je regarderai au retour si OK

en attendant pour les couleurs de cellule et non les caractères remplace partout "Font" par "interior"

Range("G5:G135").Font.ColorIndex = -4142
devient
Range("G5:G135").interior.ColorIndex = -4142
-4142 ---> aucun remplissage

pour les colonnes A àI
Case "Appel'd'offres"
Range("A" & lig & ":I" & lig).Interior.ColorIndex = 3
0
AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015
16 nov. 2015 à 18:26
Pas de problème, merci de l'aide déjà apportée :)

Voilà où je suis désormais bloqué; Il semble que la couleur ne change pas lorsque le statut change...

Private Sub ConditionnerFormat()

Dim Lig As Byte, Etat As String

Range("G5:G135").Interior.ColorIndex = -4142
'affectation couleur
For Lig = 5 To 135
Etat = Cells(Lig, "G")
Select Case Etat
Case "Appel'd'offres"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 34
Case "Etude de faisabilité"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 34
Case "En cours"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 4
Case "Perdu"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 3
Case "Terminé"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 15

End Select
Next

End Sub

Ou ai-je faux ?

Merci encore :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
17 nov. 2015 à 08:21
Bonjour

Merci de mettre tes codes entres les balises "code" <> en haut et à droite du message

pour ce que tu demandes il faut une macro événementielle à installer dans le module feuille concerné (feuil1 par ex)

Option Explicit
'--------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lig As Byte, Etat As String

If Not Intersect(Target, Range("G5:G135")) Is Nothing Then

'le code....

End If
End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
17 nov. 2015 à 09:58
ERRAta

Tu avais mis une boucle ce qui m'a mal aiguillé
le code "à la volée"

Option Explicit
'-----------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lig As Byte, Etat As String
If Not Intersect(Target, Range("G5:G135")) Is Nothing Then
'-----------------affectation couleur
Etat = Target
Lig = Target.Row
Select Case Etat
Case "Appel d'offres"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 34
Case "Etude de faisabilité"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 34
Case "En cours"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 4
Case "Perdu"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 3
Case "Terminé"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 15
Case Else
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = -4142
End Select
End If

End Sub
0
AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015
17 nov. 2015 à 11:53
Merci beaucoup pour ce support.

La macro fonctionne (nouvelle macro en gras), en revanche j'ai un problème de rafraichissement des data au moment où la macro tourne, ce qui donne un code global :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub

If Target.Column = 1 And Target.Row > 3 Then
If Target.Value = Empty Then
Target.Offset(0, 4).Hyperlinks.Delete
Else
Set hy = Target.Offset(0, 4).Hyperlinks.Add(Target.Offset(0, 4), "", "'" & Me.Name & "'!" & Target.Offset(0, 4).Address)
Target.Offset(0, 4).FormulaR1C1 = Target.Offset(-1, 4).FormulaR1C1
Target.Offset(0, 4).Font.Name = "Wingdings"
Target.Offset(0, 4).HorizontalAlignment = xlCenter
Target.Offset(0, 4).BorderAround xlSolid, xlThin
End If
Exit Sub

End If

Dim Lig As Byte, Etat As String

Application.ScreenUpdating = False

Range("G5:G135").Interior.ColorIndex = -4142
'affectation couleur
For Lig = 5 To 135
Etat = Cells(Lig, "G")
Select Case Etat
Case "Appel d'Offres"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 34
Case "Etude de faisabilité"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 34
Case "En cours"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 4
Case "Perdu"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 3
Case "Terminé"
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = 15
Case Else
Range("A" & Lig, "I" & Lig).Interior.ColorIndex = -4142

End Select
Next
Application.ScreenUpdating = True
End Sub


Avant d'ajouter la macro pour la mise en forme conditionnelle, aucun problème de délai lorsque la macro tournait.

Quelqu'un aurait-il une piste pour m'aider à réduire le temps perdu pour les utilisateurs de l'outil ? :)

Aussi, vous remarquerez que je n'ai pas ajouté "Option Explicit" comme vous me l'aviez indiqué, car je ne comprends pas son intérêt.

Merci d'avance.
0

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

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
17 nov. 2015 à 18:20
C'EST DU N'IMOPRTE QUOI !


POURQUOI NE PAS EXPLIQUER LE PROBLEME EN ENTIER AU DEPART ?
--

je n'ai pas ajouté "Option Explicit" comme vous me l'aviez indiqué, car je ne comprends pas son intérêt.

!!!!! ARCHI-NUL

Essaies le macramé, ca ira peut-^tre mieux

Michel
0
AnthonyCK Messages postés 14 Date d'inscription lundi 16 novembre 2015 Statut Membre Dernière intervention 4 décembre 2015
17 nov. 2015 à 18:29
L'objectif était d'aller à l'essentiel dans la description de mon problème pour ne pas repousser les éventuels lecteurs de ce post.

Merci de la réaction constructive, je vais essayer de me débrouiller quand même :)
0