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 :

Modifier un compteur de couleur en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Modifier un compteur de couleur en VBA
    Bonjour à tous,
    J'ai un tableau avec un code VBA qui me permet de compter à partir d'une couleur d'une cellule modèle le nombre de cellule ayant la même couleur (je m'en sers pour le planning des congés payés).
    Seulement, le code VBA s'applique sur une seule colonne alors que je voudrais l'appliquer sur une plage de cellules, plus large comprenant en compte plusieurs colonnes et lignes.
    Je joins un modèle
    Merci de m'aider à modifier mon programme.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 822
    Points : 28 727
    Points
    28 727
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ouvre pas les classeurs joints et je ne pense pas que son ouverture apporterait plus que d'afficher ici (entre les balises prévues à cet effet) la ou les lignes de code qui te permettent de mettre en couleur une colonne.
    Un simple regard à ton code suffira je pense à t'apporter la solution que tu attends.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Je n'ouvre pas les classeurs joints et je ne pense pas que son ouverture apporterait plus que d'afficher ici (entre les balises prévues à cet effet) la ou les lignes de code qui te permettent de mettre en couleur une colonne.
    Un simple regard à ton code suffira je pense à t'apporter la solution que tu attends.
    Voici le code, 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
    Option Explicit
    Sub Cumul_couleur()
    'déclaration des variables
    Dim CouleurFond As Long
    Dim LigneCumul As Long
    Dim CouleurCumul As Long
    Dim Ligne As Long
    'remise à zéro des cumuls précédents sans effacement de la couleur du fond
        Range("E2").ClearContents
    For LigneCumul = 2 To 2
        Cells(LigneCumul, 5).Select
    'récupération de la première couleur du cumul
        CouleurCumul = Selection.Interior.ColorIndex
        For Ligne = 2 To 100
            Cells(Ligne, 3).Select
            CouleurFond = Selection.Interior.ColorIndex
            Cells(Ligne, 3).Value = 1
    'récupération de la première couleur de fond
            If CouleurFond = CouleurCumul Then
            Cells(LigneCumul, 5).Value = Cells(LigneCumul, 5) + Cells(Ligne, 3).Value
            End If
    Next Ligne
    Next LigneCumul
    Range("C2:C100").ClearContents
    Range("E2").Select
            Application.Calculate
            [G2] = [G2] + [E2]
    Call CelluleClignote
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 822
    Points : 28 727
    Points
    28 727
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si j'ai bien compris, tu cherches à compter le nombre de cellules de la plage C2:C100 dont la couleur intérieure serait la même que la couleur intérieure de la cellule E2 et tu voudrais étendre la plage en colonnes et/ou en lignes

    Alors, il serait préférable d'écrire une fonction personnalisée qui aurait comme arguments la plage dont il faut dénombrer la couleur intérieure et le code couleur à dénombrer

    Petites questions
    Pourquoi écrire la valeur 1 dans les cellules C2:C100 ?
    Pourquoi utiliser la méthode Select et l'objet Selection

    Voici le code d'une fonction que j'ai écrite il y a un certain temps. Je n'utilise pas la propriété ColorIndex mais Color.
    Ne tient pas compte des couleurs d'une mise en forme conditionnelle
    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
    Function CountColor(CellRange As Range, CodeColor As Variant) As Double
     ' Author : Philippe Tulliez http://philippe.tulliez.be
     ' Date   : 2010/04/14 v 1.1
     ' Dénombre les cellules ayant le même code couleur que l'argument CodeColor
     ' Parameters
     '  CellRange (Range)  : Plage contenant les valeurs à dénombrer
     '  CodeColor (Variant): Ce critère peut être
     '                       - un objet Range (Cellule où se trouve la couleur)
     '                       - un nombre (Code RGB)
     Dim c As Range
     Application.Volatile
     If TypeName(CodeColor) = "Range" Then CodeColor = CodeColor.Interior.Color
     For Each c In CellRange
      If c.Interior.Color = CodeColor Then CountColor = CountColor + 1
     Next
     Set c = Nothing
    End Function
    Pour l'utiliser

    Avec VBA
    Exemple 1 renvoie le nombre de cellules de la plage C2:F10 ayant le même code couleur (RGB) que la cellule E2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub TestCountColor()
     MsgBox CountColor(Range("C2:F10"), Range("E2"))
    End Sub
    Exemple 2 renvoie le nombre de cellules de la plage C2:F20 ayant le code couleur RGB 65535 ici représenté par la constante vbYellow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub TestCountColor()
     MsgBox CountColor(Range("C2:F20"), vbYellow)
    End Sub
    Utilisation dans Excel - renvoie le nombre de cellules de la plage C2:C20 ayant le même code couleur (RGB) que la cellule E2
    Attention : Si l'on change de couleur, la fonction ne va pas réagir dynamiquement sauf si l'on utilise le pinceau (équivalent de Copier/Collage Spécial-Format

    A lire pour en savoir plus sur
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Merci
    Merci beaucoup je vais essayer.
    "Je ne perds jamais; soit je gagne soit j'apprends"

  6. #6
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Problème
    Je suis désolé de vous importuner mais je n'arrive à intégrer la partie =CountColor(C2:C20;E2).
    dans le code que vous m'avez si gentiment adressé.
    En effet je veux pouvoir demander le nombre de couleur de la case E2 sans avoir à préciser le code RGB etc... mais simplement
    la couleur de cette case dont je peux changer la couleur à ma guise. 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
    Option Explicit
    Function CountColor(CellRange As Range, CodeColor As Variant) As Double
      ' Dénombre les cellules ayant le même code couleur que l'argument CodeColor
     ' Parameters
     '  CellRange (Range)  : Plage contenant les valeurs à dénombrer
     '  CodeColor (Variant): Ce critère peut être
     '                       - un objet Range (Cellule où se trouve la couleur)
     '                       - un nombre (Code RGB)
     Dim c As Range
     Application.Volatile
     If TypeName(CodeColor) = "Range" Then CodeColor = CodeColor.Interior.Color
     For Each c In CellRange
      If c.Interior.Color = CodeColor Then CountColor = CountColor + 1
     Next
     Set c = Nothing
    End Function
    Sub TestCountColor()
     MsgBox CountColor(Range("A1:L100"), vbYellow)
     End Sub

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 822
    Points : 28 727
    Points
    28 727
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis désolé de vous importuner mais je n'arrive à intégrer la partie "=CountColor(C2:C20;E2)"
    Pourtant, il me semble que je lai bien expliqué
    La fonction ci-dessous placée dans Excel
    renvoie le nombre de cellules de la plage C2:C20 ayant le même code couleur (RGB) que la cellule E2
    Si tu n'aimes pas "ayant le même code couleur (RGB)" comprend le comme ceci
    renvoie le nombre de cellules de la plage C2:C20 ayant la même couleur de cellule que celle de la cellule E2
    donc si la cellule E2 est en jaune la fonction renverra le nombre de cellules de C2 à C20 qui sont en jaune (la même couleur)

    Est-ce plus clair ?

    ps : C'est amusant car je vois que tu as publié ma fonction en ayant supprimé la ligne avec le nom de l'auteur et la date de création. Tu comptais t'approprier la paternité de ce travail ?

    Voir l'illustration ci-dessous
    En cellule H2, la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CountColor($B$2:$E$15;G2)
    renvoie 8.
    Comme tu peux le remarquer il y a bien 8 cellules plage B2:E15 qui sont en jaune
    Si tu copies le format de la cellule G2 (avec le pinceau) et que tu le colles dans une ou plusieurs des cellules de la plage B2:E15, la fonction renverra une autre valeur

    Nom : 190623 dvp Compter le nombre de cellules en jaune.png
Affichages : 906
Taille : 24,1 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Réponse
    Cher monsieur,
    Je suis surpris par vos soupçons concernant le fait que j'ai effacé votre nom sur le code que vous m'avez transmis si gentiment. Vous ne me connaissez
    pas car vous ne tiendriez pas ces propos dans le cas contraire. Voyez vous ce qui nous différencie c'est la modestie.
    Croyez à mes sentiments les meilleurs
    Edgar Rivas

Discussions similaires

  1. Modifier un niveau de regroupement en VBA
    Par morelm dans le forum Access
    Réponses: 2
    Dernier message: 17/01/2007, 22h08
  2. Modifier les noms des champs sous VBA
    Par shadockgreg dans le forum Access
    Réponses: 2
    Dernier message: 22/09/2006, 17h50
  3. Réponses: 4
    Dernier message: 05/01/2006, 09h01
  4. Modifier la taille, la couleur ... dans un label
    Par Guigui_ dans le forum GTK+ avec Python
    Réponses: 3
    Dernier message: 15/07/2004, 17h09
  5. pb pour modifier la luminositée des couleurs
    Par mathieutlse dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 14h45

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