Macro mise en forme conditionnelle

Résolu
AnthonyCK Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
AnthonyCK Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
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.


A voir également:

5 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour
4 coUleurs ou 1 seule (45?) ?
0
AnthonyCK Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Il me faut 4 couleurs différentes en effet :)
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > AnthonyCK Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention  
 
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