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 selon choix liste déroulante - VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    ingénieur développement mécanique
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur développement mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Par défaut coloration ligne selon choix liste déroulante - VBA
    Bonjour,

    Je prépare pour une utilisation professionnelle un document me permettant de chiffrer des projets.
    Ce document renferme plusieurs colonnes, dont une qui donne le choix du statut du chiffrage, via une liste déroulante dont les données sont dans un onglet "back-office".

    En fonction du choix de statut (officiel, en cours, estimé, autre), j'aimerais affecter une couleur à l'ensemble de la ligne de mon tableau (cf image attachée, réalisée en MFC classique).
    Je pourrais utiliser les MFC simplement, mais j'ai besoin de:
    - gagner du temps (pas envie de faire 4 x MFC par ligne)
    - rendre autonome le système (= pouvoir ajouter des lignes dans mon tableau et que tout fonctionne encore)

    Ainsi, j'aimerais passer sur un code VBA, qui me semble être la meilleure option.
    J'ai pas mal cherché sur le web des tuto, et malgré quelques trouvailles, je n'arrives pas à m'en sortir.

    Quelqu'un pourrait donc m'aider à me mettre sur le bonne piste ?
    Je précise que je suis débutant en VBA mais que j'ai quelques notions quand même

    Merci
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par martinou38 Voir le message
    Bonjour,

    J'avais répondu à un message en décembre 2015 dont je ne me souviens plus la référence mais basé sur le même principe. Là, il s'agit de colorer des cellules en fonction de couples Machine-Référence.

    Le code ne correspond pas directement à votre problématique mais il peut vous donner des idées sur la méthode.

    Il pourrait être amélioré en y ajoutant une procédure événementielle en fonction de la position des devis.

    Pièce jointe 231782

    Cordialement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    ingénieur développement mécanique
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur développement mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Par défaut
    Merci pour votre retour !

    En fait, si j'ai bien compris, je dois passer par un "Private Sub xxxx_Change(ByVal Target As Range)"
    J'ai compris que "Target" désignait la/les cellule(s) qui avait été changée(s).

    Je comptais faire quelque chose de la sorte, en langage non VBA:

    si contenu de la cible = "estimé" alors la plage de la colonne X à Y, de la ligne de la cible sont colorées en RGB (X, X, X)

    J'ai écrit un bout de code sur ce principe mais cela ne fonctionne pas.
    Je ne sais pas si mon problème vient du déclenchement du xxx_Change ou du fait que je cherche à sortir une information texte ("en cours" par exemple) de la variable Target qui est un Range.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par martinou38 Voir le message
    A qui répondez-vous ? Utilisez Répondre avec citation et supprimez les informations inutiles.
    Quel est votre code ?

    Cordialement.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    ingénieur développement mécanique
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur développement mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Par défaut
    A vous
    J'ai ça en stock, qui je pense est plein d'erreurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub cout_produit_Change(ByVal Target As Range)
     
    Dim i As Integer
     
    i = 14
     
        For i = 14 To i = 100
            If Range("O" & i).Value = "estimé" Then Columns("C:S").Rows(i).Interior.Color = RGB(237, 127, 16)
            If Range("O" & i).Value = "en cours" Then Columns("C:S").Rows(i).Color = RGB(255, 0, 0)
            If Range("O" & i).Value = "officiel" Then Columns("C:S").Rows(i).Color = RGB(22, 184, 78)
            If Range("O" & i).Value = "PMI" Then Columns("C:S").Rows(i).Color = RGB(22, 184, 78)
        Next i
     
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par martinou38 Voir le message
    Dans le module de votre onglet cout_produit, essayez ce 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
     Dim AireLigneDevis As Range
     
         If Target.Count > 1 Then Exit Sub
     
         If Not Intersect(Target, Range("O14:O100")) Is Nothing Then
            With ActiveSheet
                 Set AireLigneDevis = .Range(.Cells(Target.Row, 3), .Cells(Target.Row, 19))
                 With AireLigneDevis
                      Select Case Target
                             Case "estimé"
                                  .Interior.Color = RGB(237, 127, 16)
                             Case "en cours"
                                  .Interior.Color = RGB(255, 0, 0)
                             Case "officiel"
                                  .Interior.Color = RGB(22, 184, 78)
                             Case "PMI"
                                 .Interior.Color = RGB(22, 184, 78)
                     End Select
                     Set AireLigneDevis = Nothing
                End With
           End With
        End If
     
    End Sub
    Cordialement.

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par martinou38 Voir le message
    J'ai bien essayé de supprimer les $ mais le résultat ne me satisfait pas.
    Laisse les $ dans la zone décrite dans le champ "S'applique à".

    Dans les condition, mettre une formule en gardant un $ pour la colonne mais pas de $ pour la ligne.
    Quelque chose comme :
    Citation Envoyé par martinou38 Voir le message
    J'ai ça en stock, qui je pense est plein d'erreurs...
    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
    Private Sub cout_produit_Change(ByVal Target As Range)
    Dim CC As Color
     
    If Target.Column <> 15 Then Exit Sub
     
    Select Case Target.Value
    Case "estimé"
        CC = RGB(237, 127, 16)
    Case "estimé"
        CC = RGB(237, 127, 16)
    Case "en cours"
        CC = RGB(255, 0, 0)
    Case "officiel"
        CC = RGB(22, 184, 78)
    Case Else
        CC = RGB(255, 255, 255)
    End Select
     
    Range("C" & Target.Row & ":S" & Target.Row).Interior.Color = CC
     
    End Sub

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par martinou38 Voir le message
    Je pourrais utiliser les MFC simplement, mais j'ai besoin de:
    - gagner du temps (pas envie de faire 4 x MFC par ligne)
    - rendre autonome le système (= pouvoir ajouter des lignes dans mon tableau et que tout fonctionne encore)
    Pourquoi "par ligne" ?
    Quand on fait une MFC, il est possible de l'appliquer à une zone (donc plusieurs lignes) en mettant la référence de ligne en référence variable (sans $).
    Voir Mise en Forme conditionnelle > Gérer les règles > Champ "S'applique à".

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    ingénieur développement mécanique
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur développement mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Pourquoi "par ligne" ?
    Quand on fait une MFC, il est possible de l'appliquer à une zone (donc plusieurs lignes) en mettant la référence de ligne en référence variable (sans $).
    Voir Mise en Forme conditionnelle > Gérer les règles > Champ "S'applique à".
    Sauf que je souhaite avoir une couleur par ligne en fonction de la valeur de la liste déroulante.
    J'ai bien essayé de supprimer les $ mais le résultat ne me satisfait pas.

    Si je supprime les $ dans "s’applique à ", je colore toutes les cellules du champ sélectionné.
    Et lorsque je supprime les $ dans ma formule, XL me les remet automatiquement.
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2015, 21h46
  2. [MySQL] fonction include selon choix liste déroulante
    Par ghyosmik dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/12/2007, 16h34
  3. [VBA]Colorer ligne d'une liste
    Par docky dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/04/2007, 14h45
  4. Réponses: 3
    Dernier message: 06/04/2007, 11h51
  5. Comment changer la valeur d'un input selon une liste déroulante
    Par dreyo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/02/2007, 15h22

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