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 :

Référence d'une cellule particulière dans la formule d'une mise en forme conditionnelle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Par défaut Référence d'une cellule particulière dans la formule d'une mise en forme conditionnelle
    Bonjour,

    Je cherche à créer une mise en forme conditionnelle via un code VBA. J'ai réussi à faire en sorte que la ligne complète de mon tableau soit mise sur fond gris si la cellule I2 est vide, avec le code suivant (en partie trouvée via l'enregistreur de 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
    Sub Mise_en_forme()
        ' Récupération des dimensions du tableau (utilisées à d'autres endroits dans ma macro complète...)
        Range("A1").Select
        Nb_rows = ActiveCell.SpecialCells(xlLastCell).Row
        Nb_columns = ActiveCell.SpecialCells(xlLastCell).Column
     
        ' Ajout de la mise en forme conditionnelle
        Range("A2").Select
        Range(Cells(2, 1), Cells(Nb_rows - 1, Nb_columns)).Select
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$I2="""""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        Selection.FormatConditions(1).Interior.Color = RGB(211, 211, 211)
        Selection.FormatConditions(1).StopIfTrue = False
    End Sub
    Si mon code marche bien avec la cellule I2 pour tout mon tableau, je ne sais pas comment faire pour lui dire de prendre l'antépénultième cellule de ma ligne (celle qui m'intéresse réellement) ; je peux la calculer la référence de la colonne avec Nb_columns-2 mais je ne sais pas comment utiliser cette information dans le code...

    J'ai tenté de remplacer la formule avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=R2C[Nb_columns-2]="""""
    ... mais ça ne fonctionne pas... J'imagine que ce n'est pas très compliqué mais quelqu'un peut-il m'aider ?

  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,

    tu peux calculer ce numéro de colonne et ensuite l'utiliser ?
    une proposition qui part des principes suivants :

    - les données commencent en A1
    - il n'y a aucune ligne ou colonne entièrement vide dans ta plage (les données sont contigües)
    - la MEF ne doit pas s'appliquer à la ligne 1, je pars du principe que ce sont des en-têtes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Mise_en_forme()
        ' la plage contigüe
        With Thisworkbook.Worksheets("MaFeuille").Range("A1").CurrentRegion
            ' on ne prend que les données (pas la ligne 1)
            With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
                ' mise en place de la formule avec la colonne en référence absolue et la ligne en référence relative
                ' on prend l'avant avant-dernière colonne
                .FormatConditions.Add xlExpression, , "=" & Cells(2, .Columns.Count - 2).Address(False, True) & "="""""
                .FormatConditions(.FormatConditions.Count).SetFirstPriority
                .FormatConditions(1).Interior.Color = RGB(211, 211, 211)
                .FormatConditions(1).StopIfTrue = False
            End With
        End With
    End Sub
    A éventuellement adapter

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    A éventuellement adapter
    C'est parfait, exactement ce que je cherchais !

    Juste en terme de syntaxe, c'est le ".Adress(False, True)" signifie que les colonnes sont en référence absolue et les lignes en référence relative ?

    Un grand merci Joe !

  4. #4
    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
    Oui c'est ça

    la propriété .Address possède deux paramètres facultatifs pour spécifier le mode de référencement des lignes/colonnes en absolu.

    Par défaut, les propriétés RowAbsolute et ColumnAbsolute sont à True

    https://msdn.microsoft.com/fr-fr/vba...property-excel

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Par défaut
    C'est top, merci à toi

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2012, 15h35
  2. [XL-2003] Utilisation d'une fonction VBA dans la formule d'une cellule
    Par robx2309 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/05/2011, 00h41
  3. Réponses: 0
    Dernier message: 05/04/2011, 13h30
  4. [XL-2007] Formule "compris entre" mise en forme conditionnel
    Par Elo0174 dans le forum Excel
    Réponses: 9
    Dernier message: 22/06/2009, 17h59
  5. Réponses: 1
    Dernier message: 15/01/2007, 18h32

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