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 -
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.
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:
- Macro mise en forme conditionnelle
- Mise en forme conditionnelle excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise en forme tableau croisé dynamique - Guide
- Mise a jour windows 10 - Accueil - Mise à jour
5 réponses
Bonjour
4 coUleurs ou 1 seule (45?) ?
4 coUleurs ou 1 seule (45?) ?
AnthonyCK
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
Il me faut 4 couleurs différentes en effet :)
Cela fait plusieurs années que je n'ai pas touché à VBA
Réjouis toi,tu es parti pour une 2° jeunesse !
a compléter et choisir les coluleurs
Michel
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
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"
pour les colonnes A àI
en attendant pour les couleurs de cellule et non les caractères remplace partout "Font" par "interior"
Range("G5:G135").Font.ColorIndex = -4142-4142 ---> aucun remplissage
devient
Range("G5:G135").interior.ColorIndex = -4142
pour les colonnes A àI
Case "Appel'd'offres"
Range("A" & lig & ":I" & lig).Interior.ColorIndex = 3
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 :)
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 :)
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)
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
ERRAta
Tu avais mis une boucle ce qui m'a mal aiguillé
le code "à la volée"
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
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 :
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question