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 :

Identifier sur une ligne, une même valeur entre deux colonnes afin d'afficher la ligne en une couleur rouge


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 72
    Points : 33
    Points
    33
    Par défaut Identifier sur une ligne, une même valeur entre deux colonnes afin d'afficher la ligne en une couleur rouge
    Bonjour à tous,

    j'ai développé il y a quelque temps un bouton permettant d'actualiser sur une feuille excel mon tableau. Je peux également via un autre bouton "importer" un tableau externe. Après l'importation de celui ci, le bouton "actualiser" gère sa mise en forme. Si une cellule est vide alors la valeur "information manquante" apparaît et le fond devient beige etc... Parallèlement, le bouton me permet de lancer des formules par défaut dans mon tableau.

    Voici le 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub CommandButton5_Click()
    Feuil1.unprotect Feuil3.Range("MDP")
    Feuil1.Activate
    ActiveWorkbook.RefreshAll
     
         ActiveSheet.Range("L:P").Calculate
         ActiveSheet.Range("V:V").Calculate
     
    Dim Cel As Range
     
     
     
    Application.Goto Reference:="BASEDEDONNEES"
        For Each Cel In Selection
            If IsEmpty(Cel) Then
                Cel.Interior.ColorIndex = 19
                 Cel.value = "Information manquante"
            Else
            Cel.Interior.ColorIndex = -4142
            End If
     
            If Cel.value = "Information manquante" Then
            Cel.Interior.ColorIndex = 19
     
        Else
        Cel.Interior.ColorIndex = -4142
            End If
     
        Next Cel
     
          With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
     
    Feuil1.Protect Feuil3.Range("MDP")
     
    End Sub

    Je souhaiterai ajouter une amélioration. Dans mon tableau,pour chaque ligne, en colonne "P", il apparaît le nom de l'entreprise qui a gagné le marché. Chaque ligne représente un marché.
    En colonne "T", il y a le nom de mon entreprise. Ainsi, si le nom d'entreprise en colonne "P" est égal au nom en colonne "T" alors cela signifie que j'ai gagné le marché.
    En conséquence, j'aimerai qu'en cliquant sur mon bouton actualisé, la police de ma ligne se transforme en vert. (Colonne "p": entreprise AA ; Colonne "T": entreprise AA)
    Dans le cas ou les deux colonnes sont différentes, cela voudrait donc dire que j'aurai perdu l'affaire. Je souhaiterai alors que la ligne se colorie en rouge.
    Pour finir, si en colonne "p", la valeur de la cellule est égale à "Information manquante" alors laisser la couleur de la police de la ligne en noir.

    J'ai imaginé le code suivant mais je n'arrive pas à incorporer le code dans celui déja existant ( en ajoutant auparavant "Dim ligne as long"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For ligne = 16 To 14000
        If Cells(ligne, 16).value = Cells(ligne, 20) Then
        Cells(ligne, 1).Resize(, 23).Interior.ColorIndex = -11489280
        Else
        Cells(ligne, 1).Resize(, 23).Interior.ColorIndex = -16776961
       End If
     
       If Cells(ligne, 16).value = "Information manquante" Then
       Cells(ligne, 1).Resize(, 23).Interior.ColorIndex = 0
       End If
       Next
    Merci infiniment de votre aide par avance...

    Amicalement votre,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Question certainement criticable, mais ce que vous demandez peut-être fait nativement par une mise en forme conditionelle? Donc pourquoi passer par du code dans ce cas?
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    par la suite, l'outil excel que je développe est transmis à des collègues. A l'avenir, je ne serai plus derrière eux pour faire de nouvelles manipulations. J'ai donc bloqué les pages de toutes modifications. Je veux donc absolument éviter d'utiliser des réglages automatiques tels que les MFC qui pourraient se dérégler. En appuyant sur le bouton, je suis sur que la macro se lancera bien. Qu'en pensez vous ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    et ben ..... je reprends l'adage de base du VBA: tout ce qui peut se faire nativement sous Excel ne doit pas être refait en VBA ..... Donc, ce que j'en pense: MFC, avec ou sans equations! Si en plus vos données sont sous forme de tableau, c'est tout bénéfique.
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Dans ce cas là, pouvez vous m'aider afin de savoir ce que je dois rentrer comme formule dans MFC -> Nouvelle règle -> "Utiliser une formule pour déterminer pour quelles cellules le format sera appliqué" ?

    Merci beaucoup !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Non vérifié mais par exemple (excel anglais)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Cells(ligne, 16).value = "Information manquante" Then
       Cells(ligne, 1).Resize(, 23).Interior.ColorIndex = 0
    => En MFC de type formule: =$P1="Information manquante", à appliqer sur A1..Axxx
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Bonjour Vinc_bilb,

    Merci pour votre aide. Au final, j'ai fait le choix de coder pour qu'en appuyant sur mon bouton "actualiser", la police de ma premiere colonne se mette en rouge si l'affaire est perdue (colonne 16 différente en valeur de la colonne 20), en verte si elle est gagnée (égale) et en noir si la donnée "information manquante" apparaît en colonne 16.

    J'ai écrit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    der_ligne = Cells(Rows.Count, 1).End(xlUp).Row
        For ligne = 19 To der_ligne
        If Cells(ligne, 16).value = Cells(ligne, 20) Then
        Cells(ligne, 1).Font.ColorIndex = 10
        Else
        Cells(ligne, 1).Font.ColorIndex = 3
       End If
     
       If Cells(ligne, 16).value = "Information manquante" Then
       Cells(ligne, 1).Font.ColorIndex = 1
       End If
       Next
    Ce code a été glissé de la manière suivante dans le code générale de l'actualisation :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Private Sub CommandButton5_Click()
    Feuil1.unprotect Feuil3.Range("MDP")
    Feuil1.Activate
    ActiveWorkbook.RefreshAll
     
         ActiveSheet.Range("L:P").Calculate
         ActiveSheet.Range("V:V").Calculate
     
    Dim Cel As Range
    Dim ligne As Long
     
     
     
     
     
    Application.Goto Reference:="BASEDEDONNEES"
        For Each Cel In Selection
            If IsEmpty(Cel) Then
                Cel.Interior.ColorIndex = 19
                 Cel.value = "Information manquante"
            Else
            Cel.Interior.ColorIndex = -4142
            End If
     
            If Cel.value = "Information manquante" Then
            Cel.Interior.ColorIndex = 19
     
        Else
        Cel.Interior.ColorIndex = -4142
            End If
     
        Next Cel
     
          With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
     
     
        der_ligne = Cells(Rows.Count, 1).End(xlUp).Row
        For ligne = 19 To der_ligne
        If Cells(ligne, 16).value = Cells(ligne, 20) Then
        Cells(ligne, 1).Font.ColorIndex = 10
        Else
        Cells(ligne, 1).Font.ColorIndex = 3
       End If
     
       If Cells(ligne, 16).value = "Information manquante" Then
       Cells(ligne, 1).Font.ColorIndex = 1
       End If
       Next
     
     
    Feuil1.Protect Feuil3.Range("MDP"), , , , , , , , , , , , , , True
     
     
     
     
     
     
    End Sub
    Bonne continuation ! et merci pour vos renseignements !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2016, 22h26
  2. [XL-2010] Colorier une ligne sur deux les lignes de même valeur
    Par ggvad dans le forum Excel
    Réponses: 1
    Dernier message: 17/12/2014, 16h28
  3. Réponses: 7
    Dernier message: 08/01/2013, 11h03
  4. Réponses: 6
    Dernier message: 25/10/2011, 15h52
  5. Supprimer une ligne si même valeur qu'une cellule définie
    Par kesdo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/05/2011, 12h54

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