Mise en Forme Conditionelle (VBA)

Bonjour,

C'est encore moi qui galère désolé ...

J'ai tenté d'adapter selon mes besoins le code trouvé sur ce sujet : https://forum.excel-pratique.com/viewtopic.php?p=206421#p206421. Toutefois, lorsque j'indique mes valeurs dans la colonne concernée aucune mise en forme n'est appliquée.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
        With Range("O:O")
        'Supprime les MFC existantes
        .FormatConditions.Delete

        'MFC si cellule = 1 (rouge)
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=1"
            With .FormatConditions(1)
            'Définit la couleur de fond de la cellule lorsque la condition sera vraie.
            .Interior.Color = RGB(255, 229, 255)
            End With

        'MFC si cellule = 2 (vert)
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=2"
            With .FormatConditions(1)
            'Définit la couleur de fond de la cellule lorsque la condition sera vraie.
            .Interior.Color = RGB(255, 255, 255)
            End With
        End With
End Sub

De plus, est-il possible, comme dans une MFC classique effectuée depuis l'éditeur de MFC, d'ajouter des jeux d'icônes ?

Dans l'idéal, j'aurais besoin du sigle de validation vert (pour le fond vert) et le sigle de la croix rouge (pour le fond rouge).

Merci d'avance pour votre aide,

Bapt.

Bonjour,

Il faut tenir compte des conditions ... condition1 et condition2 et éventuellement condition3, etc.

Les chiffres sont maintenant 1 et 5 pour appliquer les couleurs.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
        With Range("O:O")
        'Supprime les MFC existantes
        .FormatConditions.Delete

        'MFC si cellule = 1 (rouge)
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=1"
            With .FormatConditions(1)  ' première condition
            'Définit la couleur de fond de la cellule lorsque la condition sera vraie.
            .Interior.Color = RGB(255, 229, 255)
            End With

        'MFC si cellule = 2 (vert)
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=5"
            With .FormatConditions(2)  ' deuxième condition
            'Définit la couleur de fond de la cellule lorsque la condition sera vraie.
            .Interior.Color = RGB(24, 255, 255)
            End With
        End With
End Sub

ric

Re Ric

Merci de ton aide

1 et 5 sont des chiffres arbitraires que tu as utilisé ? Je peux remettre mon 2 sans problèmes ?

Je laisse en ligne, si jamais quelqu'un sait pour cela :

De plus, est-il possible, comme dans une MFC classique effectuée depuis l'éditeur de MFC, d'ajouter des jeux d'icônes ?

Dans l'idéal, j'aurais besoin du sigle de validation vert (pour le fond vert) et le sigle de la croix rouge (pour le fond rouge).

Bonjour,

@horusbk,

Je pense que tu devrais joindre un fichier, car une MFC sur une colonne entière me titille un peu !...

Cdlt.

Bonjour à tous,

car une MFC sur une colonne entière me titille un peu !.

J'allais le dire...

Les MFC sont très gourmandes, il faut les limiter au strict nécessaire.

eric

Bonjour Horusbk,

Pour le jeu d'icônes tout dépend de l'utilité de ta colonne O. Si elle sert juste de marqueur par rapport à d'autres. Alors utilise une police webding qui permet de faire ressortir des symboles. Tel que le signe de validation ou la croix en tapant un caractère.

Ta MFC ou plus simplement ton worksheet_change repèrera ce caractère dans ta colonne et passera la fonte dans la couleur significative verte ou rouge.

Bonjour à tous

Tu as raison j'aurais dû le faire dès le début... je confirme que les MFC sont très gourmandes pour avoir eu des ralentissements sur un fichier par le passé.

Je pense que tu devrais joindre un fichier, car une MFC sur une colonne entière me titille un peu !

J'ai reproduit une fonction essentielle de mon fichier, qui est une macro permettant d'insérer une nouvelle ligne pour commencer un nouveau jeu de données. C'est pour cela que j'ai appliqué ma MFC sur l'ensemble de ma colonne O : il met impossible de savoir à combien de lignes délimiter la zone d'action de la mise en forme conditionnelle.

X Cellus a écrit :

Pour le jeu d'icônes tout dépend de l'utilité de ta colonne O. Si elle sert juste de marqueur par rapport à d'autres. Alors utilise une police webding qui permet de faire ressortir des symboles. Tel que le signe de validation ou la croix en tapant un caractère.

J'avais commencé par ce principe là. Toutefois j'aime bien l'aspect des jeux de données des MFC, et aussi pour ma culture, je veux bien savoir comment les ajouter via VBA (Peut-être que plus tard j'utiliserais d'autres jeux de données qui ne sont pas dans webding).

Merci encore pour votre aide,

Bapt.

Bonjour Horubsbk,

Pourquoi passer par VBA alors qu'il existe par MFC un jeux d'icônes ou tu disposes des symboles de validation et de croix?

Il suffit de l'appliquer à ta colonne O cette MFC jeux d'icônes. Quand une solution rapide existe autant la prendre.

Suite

Ou du moins aux lignes actuelles remplies plutôt que toute la colonne. Afin de ne pas surcharger ta feuille.

Re,

J'ai une question.

Pour quelle raison les données ne sont-elles pas sous forme de tableau (structuré) ?

Plus de soucis pour insérer une nouvelle lignes (formules, mises en forme y compris les MFCs dupliquées automatiquement).

Par contre, un minimum de rigueur est demandé pour les en-têtes de colonnes et il ne faut pas de colonnes et de lignes vides dans le tableau.

Cdlt.

Bonjour Horubsbk, Pourquoi passer par VBA alors qu'il existe par MFC un jeux d'icônes ou tu disposes des symboles de validation et de croix?

Le fichier étant partagé, lorsque certains utilisateurs actualisent les données, les mises en forme n'apparaissaient plus. Ces MFC ont été créées à partir de l'éditeur de MFC. Du coup c'est pour cela que je veux passer par VBA !

Jean-Eric a écrit :

Pour quelle raison les données ne sont-elles pas sous forme de tableau (structuré) ?

J'ai réalisé un classeur de test "brut". Mais, dans la véritable version de mon classeur certaines colonnes sont masquées et le classeur est structuré en deux tableaux (un par service grosso modo). Ça donne ceci (après avoir masqué les données sensibles) :

191208123402691983

Bonsoir Horusbk,

J'ai modifié le fichier fourni pour montrer que l'on peut simuler un jeu d'icônes.

Soit parce qu'il n'existe pas dans le jeu MFC. Soit comme ton cas parce qu'en fichier partagé tu perds la MFC et préfère passer par VBA.

Bien sur c'est plus réservé à un tableau de synthèse comportant un nombre de lignes minimes.

Parce que le masque utilisé demande un peu de temps à réaliser pour un très grand tableau. Voire sinon à le dupliquer.

Regarde mes commentaires.

Bons tests, bonne continuation.

Bonsoir X Cellus

J'avoue être perdu.. je n'arrive pas à comprendre comment tu passes du -1 ou 2 aux symboles Webdings.

J'ai essayé sur d'autres cellules de la colonne O, en indiquant notamment le format nombre personnalisée (\r;\a;;) et pourtant je n’obtient que le chiffre -1 ou 2 avec la couleur rouge ou verte correspondante :/

A défaut d'utiliser les masques que tu proposes, c'est possible d'indiquer seulement les symboles voulus sous fond vert ou rouge ?

eriiic a écrit :

Les MFC sont très gourmandes, il faut les limiter au strict nécessaire

A défaut s'il est possible d'indiquer dans le code VBA de limiter les MFC aux seules cellules contenant une valeur dans la colonne O ça pourrait être moins gourmand en ressources ? C'est possible ?

Oui c'est possible.

Pourquoi tu n'essaies pas d'abord de mettre tes plages en tableau comme proposé par Jean-eric ?

Sélectionner la plage puis 'Insertion / Tableau'.

Formules et formats se trouvent automatiquement copiés en cas d'insertion.

Insérer la ligne par clic-droit 'Tableau' etc Que tu pourras mettre en macro éventuellement

eric

La mise sous forme d'un "tableau" ne me semble pas nécessaire pour l'utilisation de notre classeur : notamment parce que ce classeur est réinitialisé à chaque nouvelle journée et les données exportées vers une autre feuille où elles sont analysées.

En gros, j'ai peur du comportement du classeur lors de la réinitialisation des données et que ça ne résout pas mon problème de MFC qui disparaît pour certains utilisateurs de mon fichier partagé.

Baptiste.

A nouveau,

J'avoue être perdu.. je n'arrive pas à comprendre comment tu passes du -1 ou 2 aux symboles Webdings.

En fait revient sur les symboles croix et validation en fin de tableau. Il y a effectivement -1 et 2. Mais comme sur ces cellules j'ai appliqué le format nombre personnalisé \a;\r;; précisément que tu peux voir dans l'éditeur des formats. Sélectionne format personnalisé et tu verras ce nombre personnalisé. a représente un nombre positif (2 pour toi) et r le format négatif (-1 pour toi).

Ce format remplace les chiffres par des lettres et comme ces lettres en webdings ressortent des symboles. Ce sont ces derniers qui s'affichent. Il faut bien sur appliquer le format personnalisé aux cellules souhaitées de la colonne O et aussi la police Webdings.

Juste au dessus je présente à l'identique -1 et 2 mais en police Calibri et sans format personnalisé. Donc seule la MFC s'applique en fonds de couleur rouge ou verte. Note aussi que dans ton code VBA tu as indiqué O:O au tout début. Donc c'est toute la colonne. Tu peux restreindre en indiquant O5:O100 par exemple. Ainsi la MFC s'appliquera de la ligne 5 (minimum) à la ligne 100 (maximum). Ainsi tu limites la ressource.

D'accord donc si je résume, il faut que j’effectue ces étapes sur mon fichier final :

  1. Appliquer le format personnalisé à toute la colonne.
  2. Appliquer la police Webdings à toute la colonne.
  3. Limiter aux cellules "O5:O100" ma MFC.

Par contre, suis-je sûr que le format personnalisé ne se perdra pas comme les MFC lors du partage du fichier ? A défaut peut-on l'appliquer par VBA pour éviter cela ?

Suite,

Tu n'est pas obligé d'appliquer le format et la police sur toute la colonne. Si tu limites ta MFC par Range(O5:O100) fait de même pour le format personnalisé et la police Webdings.

Après si ton tableau un jour dépasse cette limite de 100 lignes adapte le alors à la nouvelle limite.

Rechercher des sujets similaires à "mise forme conditionelle vba"