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 :

Macro MEFC plus de 3 conditions sous excel 2003


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Macro MEFC plus de 3 conditions sous excel 2003
    Bonjour,
    Pour faire une mis en forme conditionnelle sous excel 2003, en trifouillant, je suis arrivé à cette macro:

    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
    Sub formatConditionnelle()
    Application.ScreenUpdating = False
     
    For Each c In [BH2:BH250] 'plage a testée
    c.Select
    Dim l As Long
    l = ActiveCell.Select
    If ActiveCell.Value = "X" And ActiveCell.Offset(0, 9) <> "" Then
     
    ActiveCell.Select
    Selection.Font.ColorIndex = 45
    Else
    If ActiveCell.Value = "Y" And ActiveCell.Offset(0, 9) = "" Then
    ActiveCell.Select
    Selection.Font.ColorIndex = 5
    Else
    ActiveCell.Select
    Selection.Font.ColorIndex = 1
    End If
    End If
     
    Next
     
    Application.ScreenUpdating = True
    Range("BH2").Select
    End Sub
    Je voudrais la modifier pour obtenir 2 choses:


    - La cellule se colore et non la police;
    - seules les cellules de la colonne concernée se colorent.


    MERCI BEAUCOUP

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Évite les Select et utilise le # quand tu envoies du code pour rendre celui-ci plus lisible

    Essaie comme ceci et change les valeurs de ColorIndex au besoin...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim c As Range
     
    For Each c In [BH2:BH250] 'plage a testée
        If c.Value = "X" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 45
        ElseIf c.Value = "Y" And c.Offset(0, 9) = "" Then
            c.Interior.ColorIndex = 5
        Else
            c.Interior.ColorIndex = xlColorIndexAutomatic
        End If
    Next

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    J'avais pourtant mis entre ##.

    Je te remercie de ta réponse qui me fait pas mal avancer mais ne résout pas tout.

    En fait, pour être plus clair, j'ai ma colonne excel (BH) qui contient des données comme suit:

    X
    X
    Y
    Z
    A
    A
    A
    C
    X
    D
    Z
    .
    .
    .

    Par exemple, et je voulais remplir les cellules en fonction des valeurs (que tous les X aient la même couleur, idem pour les Y, les A, les C.....
    Le code, quand je le fais tourner me colore bien mes cellules mais s'arrête à la première condition, il colore bien toutes les cellules qui contiennent la première valeur du code mais ne tient pas compte de autre valeurs.

    Merci pour l'aide

    Je viens de faire un test en mettant en condition la dernière valeur de la colonne et il se trouve que celle-ci et uniquement elle est colorée comme il se doit.......

    J'ai réglé le problème en remplaçant les "=""" par des "<>""" mais le remplissage n'est pas systématique, il me faut dans certains cas copier/coller une cellule déjà remplie et colorée....?????

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Il faudrait voir ton code pour savoir où tu en es rendu.
    En principe, si la boucle se fait normalement, il y aura passage et vérification à chaque ligne, donc coloration ou non selon condition(s)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Enfin, comment pourrais-je colorer de la même façon la colonne BN.

    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
    Sub formatConditionnelle()
     
     
    Application.ScreenUpdating = False
    For Each c In [BH2:BH250] 'plage a tester
     
        If c.Value = "A" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 8
        ElseIf c.Value = "B" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 9
        ElseIf c.Value = "C" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 3
        ElseIf c.Value = "D" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 4
     
        ElseIf c.Value = "E" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 10
            ElseIf c.Value = "F" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 6
             ElseIf c.Value = "G" And c.Offset(0, 9) <> "" Then
            c.Interior.ColorIndex = 7
     
        Else
            c.Interior.ColorIndex = xlColorIndexAutomatic
        End If
    Next
     
    Application.ScreenUpdating = True
     
    Range("BH2").Select
    End Sub

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    Enfin, comment pourrais-je colorer de la même façon la colonne BN.
    Tu refais la même boucle en changeant BH par BN
    Tu pourrais éventuellement imbriquer les 2 colonnes dans la même boucle, mais tu risques de t'emmêler dans les conditions...

  7. #7
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut macro MFC plus de 3 conditions
    Bonjour,

    J'arrive à la fumée des cierges mais je ne résiste pas au plaisir de te proposer ceci plutôt qu'une multitude de "elseif":
    Rendons à César le mérite qui lui revient: C'est le souvenir des exercices sur "evaluate" de J Boisgontier qui m'a conduit à 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
     
    Sub formatConditionnelle()
     
    couleur = [{"A",8;"B",9;"C",3;"D",4;"E",10;"F",6;"G",7}] 'fonction evaluate
    Application.ScreenUpdating = False
     
    For Each C In [B2:B25] 'plage a testée
      For lig = LBound(couleur, 1) To UBound(couleur, 1)
          If C = couleur(lig, 1) And C.Offset(0, 9) <> "" Then C.Interior.ColorIndex = couleur(lig, 2)
          If C.Offset(0, 3) = couleur(lig, 1) And C.Offset(0, 9) <> "" Then C.Offset(0, 3).Interior.ColorIndex = couleur(lig, 2)
      Next lig
    Next
     
    Application.ScreenUpdating = True
     
    End Sub
    Il te faut adapter à ta plage.
    edit : apporté une correction après message de PARMI

    Cordialement,
    Fichiers attachés Fichiers attachés

  8. #8
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut macro MFC plus de 3 conditions
    Bonjour,

    et avec ton code que empile les "Elseif" cela marchait ou produisait une erreur ?

    A+

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Ca tournait mais ça ratait quelques lignes et ça ne colorait pas la colonne BN

  10. #10
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut macro MFC plus de 3 conditions
    re...,

    Pour prendre BN en compte ce ne sera pas un problème

    par contre, les lignes ratées se trouvaient vers la fin du fichier ou un peu partout dans le fichier ? et ces ratès sont-ils nombreux ?

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Pour BN, il s'agit bien de colorer les cellules en fonction des valeurs des cellules de BH.

    Les erreurs étaient dispersées, pas forcément trop nombreuses, souvent quand des valeurs identiques se suivaient mais pas à tous les coups

    Peut être, mais je n'en suis pas du tout certain, un problème de format cellule??????

    Testé, apparemment elles ont toute le même format

  12. #12
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut macro MFC plus de 3 conditions
    Bonsoir,

    Pour BN, il s'agit bien de colorer les cellules en fonction des valeurs des cellules de BH.
    Que faut-il comprendre exactement ?
    Dans mon code, BN est coloré suivant les mêmes conditions que BH, à savoir :

    - les lettres acceptées sont les mêmes que celles retenues pour BH
    - la colonne non vide est également celle retenue pour BH.

    Pour l'autre problème, je ne peux hélas rien faire si je ne dispose pas du fichier ou d'un extrait du fichier à traiter.
    Vérifie, on ne sait jamais, qu'un espace ne traine pas devant ou derrière les "mails" qui ne passent pas.

    Cordialement,

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

Discussions similaires

  1. comptages avec 2 conditions sous excel
    Par cpe81 dans le forum Excel
    Réponses: 8
    Dernier message: 11/12/2008, 13h45
  2. activation d'une macro après sasie d'une valeur sous excel
    Par pecofrou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/12/2007, 21h52
  3. [Excel VBA] Faire une condition sous Excel
    Par ANTMA dans le forum Excel
    Réponses: 3
    Dernier message: 03/08/2007, 11h20

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