IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Coloration ligne en fonction de ce qu'il y a dans une cellule [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Par défaut Coloration ligne en fonction de ce qu'il y a dans une cellule
    Bonjour,

    J'ai un tableau Excel avec des colonne de A à O.
    J'ai un code qui permet de compléter ce tableau de façon automatique, mais pour des raisons de lisibilité je souhaite que les lignes soient coloriées.
    Chacune des lignes correspond à un commande. Dans la colonne O on a l'état. En fonction de l'état de la commande je souhait attribuer une couleur différente

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub Worksheet_Activate()
     
    Call ChargerVisuHistoriqueCommandes
     
     
     
    'Pour chaque lignes (de A à O) de la ligne 2 jusqu'à la dernière,
     
    'si ce qui est dans la cellule "O" = "Commande envoyée par e-mail"
    'alors on colori la ligne en bleu
     
    'si ce qui est dans la cellule "O" = "Matériel reçu"
    'alors on colori la ligne en vert
     
    'si ce qui est dans la cellule "O" = "Commande annulée"
    'alors on colori la ligne en rouge
     
    End Sub
    Quelqu'un a t'il une idée?
    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une mise en forme conditionnelle ne ferait pas l'affaire ? Ca permet en plus de faire varier dynamiquement les couleurs si un statut est amené à changer


    sinon, côté VBA, il faut faire un test sur la valeur (.Value) de la cellule, et en fonction de cette valeur (utilisation d'un Select Case) colorier le fond de la cellule (Range("A1").Interior.Color = xxxx)


    Bon courage

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Par défaut
    Bonjour,

    Voilà j'ai écrit mon code (je progresse lol) par contre j'ai un plantage "dépassement de capacité" quand je lui demande de modifier jusqu’à la dernière ligne.
    J'ai essayé, si j'indique 2000 ça marche.
    Pourtant il me faut impérativement aller jusqu'a la dernière ligne.

    Quelqu'un a-t-il une idée?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim i As Integer
     
    Dim DerLig As Long
        With Worksheets("Visu historique des commandes")
            DerLig = .Range("A1").End(xlDown).Row
    '        MsgBox "Numéro de la dernière ligne : " & DerLig
        End With
     
    If Not Application.Intersect(Target, Range("B2:O65000")) Is Nothing Then 'si pas de changement de valeur dans les cellules B20 à I141 => rien , sinon
     
     
    Application.EnableEvents = False 'désactiver les évènements pendant la macro 
     
    'For i = 0 To DerLig 'compteur de 0 à la dernière ligne => plantage "dépassement de capacité"
     
    For i = 0 To 2000 ' pas de soucis
     
    If Range("O2").Offset(i).Value = "ARC reçu" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(255, 255, 204)
        End If
     
    If Range("O2").Offset(i).Value = "Commande annulée" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(255, 0, 0)
        End If
     
    If Range("O2").Offset(i).Value = "Commande envoyée par e-mail" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(0, 255, 255)
        End If
     
    If Range("O2").Offset(i).Value = "Commande envoyée par fax" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(0, 255, 255)
        End If
     
    If Range("O2").Offset(i).Value = "Commande passée sur le site" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(178, 102, 255)
        End If
     
    If Range("O2").Offset(i).Value = "Commande passée sur le site" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(178, 102, 255)
        End If
     
    If Range("O2").Offset(i).Value = "Matériel reçu chez SEDAM" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(153, 255, 153)
        End If
     
    If Range("O2").Offset(i).Value = "Réception partielle" Then
        Range("A2:O2").Offset(i).Interior.Color = RGB(255, 153, 21)
        End If
     
    Application.EnableEvents = True 'Résactiver les évènements pendant la macro
     
    Next
     
    End If
     
     
    End Sub

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    comme d'hab' corriger la ligne n°3 !

    Rien qu'en lisant l'aide de l'erreur sans oublier la ligne n°5 et l'aide VBA d'Integer et de Long

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Un Select Case serait peut-être plus judicieux que cette succession de tests.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Couleur
    Select Case Range("O2").Offset(i).Value 
        Case "ARC reçu" 
            Couleur = RGB(255, 255, 204)
        Case "Commande annulée" 
            Couleur = RGB(255, 0, 0)
     'Etc....
        Case "Réception partielle"
            Couleur = RGB(255, 153, 21)
    End Select
    Range("A2:O2").Offset(i).Interior.Color = Couleur
    De plus mets ta ligne 52 (Application.EnableEvents = True 'Résactiver les évènements pendant la macro) en 55 (après le Next).

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Par défaut
    Citation Envoyé par pijaku Voir le message
    Bonjour,

    Un Select Case serait peut-être plus judicieux que cette succession de tests.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Couleur
    Select Case Range("O2").Offset(i).Value 
        Case "ARC reçu" 
            Couleur = RGB(255, 255, 204)
        Case "Commande annulée" 
            Couleur = RGB(255, 0, 0)
     'Etc....
        Case "Réception partielle"
            Couleur = RGB(255, 153, 21)
    End Select
    Range("A2:O2").Offset(i).Interior.Color = Couleur
    De plus mets ta ligne 52 (Application.EnableEvents = True 'Résactiver les évènements pendant la macro) en 55 (après le Next).
    Merci c'est vrai que c'est plus simple et aussi efficace. Par contre je n'arrive pas à me débarrasser du message d'erreur.
    J'ai remplacé en ligne 3 "Integer" par "Long" mais du coup plantage à la ligne 25.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim i As Long
     
    Dim DerLig As Long
        With Worksheets("Visu historique des commandes")
            DerLig = .Range("A1").End(xlDown).Row
    '        MsgBox "Numéro de la dernière ligne : " & DerLig
        End With
     
    If Not Application.Intersect(Target, Range("B2:O65000")) Is Nothing Then 'si pas de changement de valeur dans les cellules B20 à I141 => rien , sinon
     
     
    Application.EnableEvents = False 'désactiver les évènements pendant la macro (sinon la macro ne peut pas supprimer les cellules
     
    For i = 0 To DerLig 'compteur de 0 à la dernière ligne => plantage "dépassement de capacité"
     
    'For i = 0 To 2000 ' pas de soucis
     
     
     
     
     
    Dim Couleur
    Select Case Range("O2").Offset(i).Value
        Case "ARC reçu"
            Couleur = RGB(255, 255, 204)
        Case "Commande annulée"
            Couleur = RGB(255, 0, 0)
        Case "Commande annulée"
            Couleur = RGB(255, 0, 0)
        Case "Commande envoyée par e-mail"
            Couleur = RGB(0, 255, 255)
        Case "Commande envoyée par fax"
            Couleur = RGB(0, 255, 255)
        Case "Commande passée sur le site"
            Couleur = RGB(178, 102, 255)
        Case "Matériel reçu chez SEDAM"
            Couleur = RGB(153, 255, 153)
        Case "Réception partielle"
            Couleur = RGB(255, 153, 21)
    End Select
    Range("A2:O2").Offset(i).Interior.Color = Couleur
     
     
     
     
    Next
     
    Application.EnableEvents = True 'Résactiver les évènements pendant la macro
     
    End If
     
     
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour,

    comme d'hab' corriger la ligne n°3 !

    Rien qu'en lisant l'aide de l'erreur sans oublier la ligne n°5 et l'aide VBA d'Integer et de Long

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    Désolé mais j'ai pas le niveau (pour le moment) je suis un pauvre dessinateur industriel qui fait du mieux qu'il peut pour faciliter son travail.
    Merci quand même

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macro pour copier/insérer des lignes en fonction de séparateur dans une cellule
    Par Dncky dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/12/2015, 19h44
  2. Réponses: 7
    Dernier message: 29/08/2014, 11h40
  3. Réponses: 5
    Dernier message: 03/02/2009, 13h43
  4. Réponses: 2
    Dernier message: 15/09/2008, 11h42
  5. Réponses: 2
    Dernier message: 07/06/2007, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo