Macro mise en forme conditionnelle

Résolu
AnthonyCK Messages postés 15 Statut Membre -  
AnthonyCK Messages postés 15 Statut Membre -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    4 coUleurs ou 1 seule (45?) ?
    0
    1. AnthonyCK Messages postés 15 Statut Membre
       
      Il me faut 4 couleurs différentes en effet :)
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. AnthonyCK Messages postés 15 Statut Membre
       
      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
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > AnthonyCK Messages postés 15 Statut Membre
         
        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
  3. AnthonyCK Messages postés 15 Statut Membre
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > michel_m Messages postés 18903 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
  4. AnthonyCK Messages postés 15 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. AnthonyCK Messages postés 15 Statut Membre
       
      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