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 :

MefC avec VBA - Comment afficher les règles pour la feuille entière et non la sélection actuelle


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut MefC avec VBA - Comment afficher les règles pour la feuille entière et non la sélection actuelle
    Bonjour,
    J'ai dû réaliser mes mises en forme conditionnelles avec VBA plutot qu'avec le menu consacré, pour différentes raisons.

    j'ai des plages de mises en formes différentes, certaines se chevauchent, d'autres pas, mais en fonction de l'ordre avec lequel je mets mes conditions j'ai un message d'erreur : l'indice n'appartient pas à la sélection.
    Pour info, j'ai fais attention à "La méthode Add renvoie une erreur si la cellule contient déjà 3 conditions." mentionné dans le tuto de SilkyRoad.

    Je pense que mon problème vient de l'option "afficher les règles de mef pour" "Sélection actuelle" au lieu de "cette feuille de calcul".???
    puisque cela fonctionne si je les fais avec le menu des mefC.

    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
    19
    20
    21
    22
    23
    24
    With Application.Union(Range("C3:AG23"), Range("C25:AG27"), Range("C29:AG148"))
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, Formula1:="=EQUIV(C$4;FERIES;0)>0"
        .FormatConditions(1).Interior.Color = RGB(128, 128, 128)
        .FormatConditions(1).StopIfTrue = False
    End With
     With Range("C29:AG148")
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$A$5"
        .FormatConditions(2).Borders(xlEdgeLeft).Color = -16777024
        .FormatConditions(2).StopIfTrue = False
    End With
    '... JUSQU A 15 INCLUS PAS DE PB
    With Range("C29:AG148") 'CC
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$A$22"
        .FormatConditions(15).Interior.Color = RGB(173, 248, 116)
        .FormatConditions(15).StopIfTrue = False
    End With
    'PAS MOYEN D AJOUTER CETTE CONDITION
    With Range("C3:AG3")    'Toussaint P & T
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
            Formula1:="=$AJ$7", Formula2:="=$AK$7"
        .FormatConditions(16).Interior.Pattern = xlGray8
        .FormatConditions(16).StopIfTrue = False
    End With
    J'ai essayé diverses façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Application.Union(Range("C3:AG23"), Range("C25:AG27"), Range("C29:AG148"))
    , ... puis de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Range("C29:AG148")
    ...,
    les 2 à la suite fonctionnent bien

    ,... suivi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Application.Union(Range("C3:AG23"), Range("C25:AG27"), Range("C29:AG148"))
    ça fonctionne aussi,

    mais
    ,... suivi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Application.Union(Range("C3:AG23"), Range("C25:AG27"), Range("C29:AG148"))
    , ... suivi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Range("C29:AG148")
    ..., ça ne fonctionne pas
    NI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Application.Union(Range("C3:AG23"), Range("C25:AG27"), Range("C29:AG148"))
    , ... puis de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Range("C29:AG148")
    ..., suivi de
    ,...

    Est-ce que quelqu'un peut m'aider svp.
    Merci

  2. #2
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Pour avoir toutes les MFC d'une feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim FC As FormatCondition
    For Each FC In ActiveSheet.Cells.FormatConditions
       Debug.Print FC.AppliesTo.Address, FC.Formula1
    Next FC
    Ce code donne la plage d'application et la formule testée mais il est bien sûr possible de récupérer toutes les autres informations.
    https://msdn.microsoft.com/fr-fr/lib.../ff835850.aspx

  3. #3
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour Menhir,
    Merci pour ce code, c'est très utile, ne serait-ce que pour vérifier qu'on a rien oublié.
    Mais personnellement, je connais les mefc, j'ai du mal à les coder
    Avec ton code, j'ai (un extrait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $C$3:$AG$3    =$AJ$12
    $C$3:$AG$3    =$AJ$13
    $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148    =EQUIV(C$4;FERIES;0)>0
    $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148    =JOURSEM(C$3;2)=1
    $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148    =$A$5
    $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148    =$A$6
    $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148    ="P1"
    Je voudrais trouver
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $C$3:$AG$3    =$AJ$12
    $C$3:$AG$3    =$AJ$13
    $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148    =EQUIV(C$4;FERIES;0)>0
    $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148    =JOURSEM(C$3;2)=1
    $C$29:$AG$148    =$A$5
    $C$29:$AG$148    =$A$6
    $C$29:$AG$148    ="P1"
    Merci et en tout cas, je garde ton code, il est très utile

  4. #4
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Si tu veux limiter la liste aux MFC s'appliquant sur un groupe de cellule données, fait un test If en utilisant Application.Intersect entre l'adresse de la MFC (voir mon code) et les adresses qui t'intéressent.
    https://msdn.microsoft.com/fr-fr/lib.../ff835030.aspx

  5. #5
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Menhir

    je pense que tu ne comprends pas bien ce que je veux faire, ou alors c'est moi qui ne vois pas où tu veux en venir.

    Je ne cherche pas à lister des mefc. je supprime toutes les mefc existantes et j'en crée de nouvelles (enfin je voudrais).
    la première mefc s'applique sur les cellules $C$3:$AG$3, avec de nombreux cas de mefc (par ex =$AJ$13)
    la deuxième mefc s'applique sur l'union des cellules $C$3:$AG$23,$C$25:$AG$27,$C$29:$AG$148, avec de nombreux cas de mefc
    la troisième mefc s'applique sur les cellules $C$29:$AG$148, avec de nombreux cas de mefc

    et quand j'arrive à mon 3ème cas, j'ai le message d'erreur

    Merci

  6. #6
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Je pense que c'est toi qui prend le problème à l'envers.
    Ne pense pas aux MFC appliquées à une cellule mais à quelles cellules s'applique une MFC.
    Le code que je t'ai donné te permet de repérer les MFC que tu souhaites modifier. Ensuite, tu n'as qu'à changer ses paramètres, en particulier AppliesTo.
    Regarde les liens que je t'ai fournis.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/08/2013, 15h17
  2. [VBA-E]Afficher les fichiers excel ouvert et leur onglets dispo pour les ouvrir
    Par anubisigfrid dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/03/2007, 22h52
  3. Comment afficher les images avec firefox ?
    Par 12monkeys dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/11/2006, 20h59

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