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

C# Discussion :

EpPlus - Mise en forme conditionnelle


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut EpPlus - Mise en forme conditionnelle
    Bonjour à tous,

    Pour générer des fichiers Excel dynamiquement, j'utilise la librairie EpPlus. Je génère ces fichiers en C#.

    J'ai réussi globalement à faire ce que je voulais, mais je bloque sur un point : la mise en forme conditionnelle dynamique (MeFC).

    Je m'explique : J'ai besoin d'appliquer pour certaines cellules une MeFC personnalisée (jeux d'icônes provenant de différents set). J'arrive à la créer directement sur Excel. J'ai essayé de l’appliquer à une cellule dans ma feuille de modèles de styles, sauf que lors de la récupération, cela ne fonctionne pas, étant donné que la MeFC n'est pas liée au style d'une cellule.

    Du coup, j'ai cherché sur internet mais je ne trouve vraiment aucune façon de faire afin de créer dynamiquement (en C# donc) ma MeFC personnalisée.

    Vous trouverez le résultat que je souhaite avoir en pièce jointe (il y a 2 MeFC).

    Je voulais savoir si quelqu'un avait une façon de faire, sans forcément me donner la solution, mais surtout afin de m'aiguiller.

    Merci d'avance !
    Images attachées Images attachées   

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il y a des exemples ici : [Sample] Adding Conditional Formatting
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Merci pour ce lien. Effectivement il y avait d'autres sujet sur la MeFC, notamment un qui est exactement le même que le mien, mais il est resté sans réponse depuis 2012...

    Pour le lien que vous m'avez fourni, je ne trouve pas comment appliquer cela avec le type Icon. Je ne connais pas la liste de tous les attributs Xml (sous forme de chaîne de caractères), mais j'imagine que c'est ça que je dois changer. Je vais répondre à la discussion, en espérant avoir une réponse.

    Merci !

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Je suis retombé sur un topic sur lequel je me suis penché à nouveau, et il répond à mon besoin. Voici ce que j'ai fais :
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    /// <summary>
            /// Permet d'appliquer la mise en forme conditionnelle (MeFC) pour une ou plusieurs cellule(s).
            /// </summary>
            /// <param name="xlWorksheet">Feuille dans laquelle appliquer la MeFC</param>
            /// <param name="adresse">Paramètre falcutatif précisant l'adresse d'une cellule en particulier.</param>
            private static void AppliquerMiseEnFormeConditionnelleTableaux(ExcelWorksheet xlWorksheet, string adresse = "")
            {
                //Liste des cellules à mettre en forme
                List<ExcelRangeBase> lstCells = new List<OfficeOpenXml.ExcelRangeBase>();
     
                if (adresse == "")
                {
                    //Récupération de toutes les cellules avec le style préparé pour un MeFC
                    lstCells = xlWorksheet.Cells.Where(c => (c.StyleID == _dicoStyles.ElementAt(23).Value) || 
                                                            (c.StyleID == _dicoStyles.ElementAt(24).Value)).ToList();
                }
                else
                    lstCells.Add(xlWorksheet.Cells[adresse]); //Récupère seulement la cellule spécifiée
     
                foreach (var cell in lstCells)
                {
                    bool isTendance = (cell.StyleID == _dicoStyles.ElementAt(23).Value); //Condition Tendance (flèche) ou objectif
                    ExcelAddress addressCell = new ExcelAddress(cell.Address);
                    AppliquerFormulesFeuille(xlWorksheet, addressCell.Address);
                    double valueCell = Convert.ToDouble(cell.Value); //Valeur après application de la formule
     
                    if (valueCell > 0)
                    {
                        if (isTendance)
                        {
                            // Qn-1 (-) Qn = (> 0) -> Flèche en or vers le bas
     
                            var v = xlWorksheet.ConditionalFormatting.AddFourIconSet(addressCell, eExcelconditionalFormatting4IconsSetType.Arrows);
                            v.Reverse = true;
                            v.Icon4.Type = eExcelConditionalFormattingValueObjectType.Num;
                            v.ShowValue = false;
                        }
                        else
                        {
                            // YtdPays - Objectif = (> 0) -> Pastille 'v' verte
     
                            var v = xlWorksheet.ConditionalFormatting.AddThreeIconSet(addressCell, eExcelconditionalFormatting3IconsSetType.Symbols);
                            v.Reverse = true;
                            v.Icon1.Type = eExcelConditionalFormattingValueObjectType.Num;
                            v.ShowValue = false;
                        }
                    }
                    else if (valueCell == 0)
                    {
                        if (isTendance)
                        {
                            // Qn-1 (-) Qn = (= 0) -> Rond rose
     
                            var v = xlWorksheet.ConditionalFormatting.AddFourIconSet(addressCell, eExcelconditionalFormatting4IconsSetType.RedToBlack);
                            v.Icon4.Type = eExcelConditionalFormattingValueObjectType.Num;
                            v.ShowValue = false;
                        }
                        else
                        {
                            // YtdPays - Objectif = (= 0) -> Pastille vide orange
     
                            var v = xlWorksheet.ConditionalFormatting.AddThreeIconSet(addressCell, eExcelconditionalFormatting3IconsSetType.TrafficLights1);
                            v.Icon3.Type = eExcelConditionalFormattingValueObjectType.Num;
                            v.ShowValue = false;
                        }
                    }
                    else if (valueCell < 0)
                    {
                        if (isTendance)
                        {
                            // Qn-1 (-) Qn = (< 0) -> flèche en gris vers le haut
                            var v = xlWorksheet.ConditionalFormatting.AddFourIconSet(addressCell, eExcelconditionalFormatting4IconsSetType.ArrowsGray);
                            v.Reverse = false;
                            v.Icon4.Type = eExcelConditionalFormattingValueObjectType.Num;
                            v.ShowValue = false;
                        }
                        else
                        {
                            // YtdPays - Objectif = (> 0) -> Pastille 'x' rouge
     
                            var v = xlWorksheet.ConditionalFormatting.AddThreeIconSet(addressCell, eExcelconditionalFormatting3IconsSetType.Symbols);
                            v.Reverse = false;
                            v.Icon1.Type = eExcelConditionalFormattingValueObjectType.Num;
                            v.ShowValue = false;
                        }
                    }
                }
            }
    Cela reste spécifique à mon besoin, mais voilà le principe permettant d'appliquer une icone selon un résultat de la valeur d'une cellule.

    J'espère que cela pour aider quelqu'un

    [EDIT]
    Par rapport à mon besoin qui était d'avoir un trait en or pour une valeur = à 0, il faut savoir que l'énumération correspondante (eExcelconditionalFormatting3IconsSetType.) n'existe pas. C'est la seule dans ce cas là.

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

Discussions similaires

  1. mise en forme conditionnelle et vba
    Par malabar92 dans le forum Access
    Réponses: 4
    Dernier message: 26/04/2006, 14h18
  2. Mise en forme conditionnelle
    Par the big ben 5 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 23/12/2005, 15h20
  3. [VBA][Excel] mise en forme conditionnelle
    Par titflocon dans le forum Access
    Réponses: 9
    Dernier message: 19/12/2005, 10h13
  4. Réponses: 4
    Dernier message: 15/11/2005, 18h53
  5. Mise en forme conditionnelle en VBA / Cut-Paste
    Par priest69 dans le forum IHM
    Réponses: 4
    Dernier message: 03/09/2005, 13h54

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