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 :

Compte des cellules par couleur


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut Compte des cellules par couleur
    Bonjour à tous, voila, j'expose mon problème, j'ai une vingtaine de feuilles dans lequelles les cases sont remplies avec différentes couleurs, ce que j'aimerais faire, c'est mettre dans un tableau sur chaque feuille le compte de toutes les cases par couleur, alors voila ce que j'ai commencé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Couleur()
    For Each Cel In Range("B5:S98")
        Application.ScreenUpdating = False
            Cel.Select
            If Cel.ColorIndex = 35 Then i = i + 1 Else End If
            Next
        Application.ScreenUpdating = True
        Range("X25").Select
        Selection = i
     
    End Sub
    Alors, ça marche pas du tout, est ce que quelqun serait inspiré pour autre chose sachant que je peux monter à une dizaine de couleurs différentes en fonction des feuilles

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Il te manque les déclarations.
    Ensuite le Else End if est inutile.
    Tu ne dis pas à quoi s'applique le ColorIndex.
    La dernière ligne Selection = i fait quoi ?

    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
    Sub Couleur()
     
    Dim cel As Range
    Dim i As Integer
     
    Application.ScreenUpdating = False
    For Each cel In Range("B5:S98")
        cel.Select
        If cel.Interior.ColorIndex = 35 Then i = i + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Select
    Debug.Print i
     
    End Sub

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    En fait je me servais de i comme compteur pour cette couleur, et ensuite je voulais placer la valeur dans la case selectionnée, sachant que je peux avoir jusqu'à dix compteurs puisque dix couleurs...

    Pour le Else End If, oui j'ai vu ça après coup, et oki pour les déclarations de variables, j'ai perdu l'habitude de déclarer :s...

    Merci beaucoup du coup de main, je teste le code complet et je reviens dire ce qui se passe

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Réponse de Kikof +1 mais il est inutile de sélectionner la cellule comme le fait Tiresia.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
    Next
    suffit

  5. #5
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Pour l'affectation,
    En ce qui concerne la sélection de cellule : j'ai pas trop cherché

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Il me marque aucun message d'erreur mais il ne me fait rien du tout... est ce que ça peut venir du fait qu'il y a plusieurs feuilles par classeur ?

    Ce que j'aimerais en fait, j'ai 4 classeurs de 6 feuilles chacun, c'est qu'à l'ouverture de chaque classeur qui peut être amené à être modifié, le compte se refasse dans un tableau différent par feuille...

    J'essaie d'être claire

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    C'est bon pour le compte de cette couleur la, je m'occuperai du reste des couleurs, juste une derniere question, comment je fais pour le faire pour toutes les feuilles mais séparémment ?

    Et est ce que pour le lancer automatiquement c'est bien dans ThisWorbook Autoopen quelquechose dans ce genre ? ^^

    Merci beaucoup de votre aide, c'est tres gentil

  8. #8
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Et est ce que pour le lancer automatiquement c'est bien dans ThisWorbook Autoopen quelquechose dans ce genre ? ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
     
    'Pour chaque feuille on lance la fonction couleur
        Couleur
     
    End Sub
    Pense à déclarer ta procédure Couleur en Public

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu fais deux clics sur Thisworkbook
    Sur l'onglet Général tu cliques sur Workbook et tu obtiens la macro de tes rêves, dans laquelle tu mets le nom de la macro que tu veux lancer ou directement le code.

  10. #10
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    La il ne me le fait que pour une seule feuille, il faut lui préciser ? Ca ne suffit pas de mettre comme j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Couleur
    End Sub

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Si tu réfléchis, tu constateras que ton test ne porte que sur une seule couleur.

    Si tu réfléchis encore un peu, tu constateras qu'il te faut un compteur par couleur.

    Et si tu réfléchis encore un peu, tu constateras que tu peux créer un tableau de compteurs à deux dimensions, une pour la couleur et une pour le compteur.

    Mais tu constateras qu'on peut t'aider mais pas faire le boulot à ta place. Alors réfléchis un peu et propose-nous quelque chose. Comme ça on pourra t'aider

  12. #12
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Une piste pour executer ta fonction sur chaque feuille :
    Les feuilles font parties d'une collection qu'il faut parcourir. Je suis sur qu'il y a des exemples sur le forum.
    Et il y a un exemple dans ton code.

  13. #13
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    On s'est mal compris en fait

    Ce que je voulais savoir, c'est par exemple dans le cas de ce classeur, je n'ai que deux couleurs différentes, donc le code donne (grâce à votre aide )

    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
    Public Sub Couleur()
     
    Dim cel As Range
    Dim i As Integer
    Dim j As Integer
     
    Application.ScreenUpdating = False
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
        If cel.Interior.ColorIndex = 34 Then j = j + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Value = i
    Range("X26").Value = j
     
    End Sub
    Et ensuite, comme vous me l'avez dit, j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Couleur
    End Sub
    Le souci, c'est que ça ne s'applique qu'à une seule feuille, or, moi ce que je voudrais c'est que ça le fasse sur toutes

  14. #14
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Une piste pour executer ta fonction sur chaque feuille :
    Les feuilles font parties d'une collection qu'il faut parcourir. Je suis sur qu'il y a des exemples sur le forum.
    Et il y a un exemple dans ton code.
    ça fonctionne aussi avec un For each alors ? Bon j'arrête de vous embêter, merci beaucoup de votre aide, a plussss !!


  15. #15
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    J'ai cherché mais j'ai pas trouvé :'(, j'ai essayé en faisant quelquechose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Feuil As Worksheet
    Dim Class as Workbook
     
    For Each Feuil in Class("B5.xls").Worksheets
     
     
     
    Next
    Mais ça ne marchait pas du tout...

    Alors à défaut de ça, j'ai fait feuille par feuille comme ça :

    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
    Public Sub Couleur()
     
    Dim cel As Range
    Dim i As Integer
    Dim j As Integer
     
     
    Worksheets("Niveau 1").Select
    Application.ScreenUpdating = False
    i = 0
    j = 0
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
        If cel.Interior.ColorIndex = 34 Then j = j + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Value = i
    Range("X26").Value = j
     
    Worksheets("Niveau 2").Select
    Application.ScreenUpdating = False
    i = 0
    j = 0
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
        If cel.Interior.ColorIndex = 34 Then j = j + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Value = i
    Range("X26").Value = j
     
    Worksheets("Niveau 3").Select
    Application.ScreenUpdating = False
    i = 0
    j = 0
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
        If cel.Interior.ColorIndex = 34 Then j = j + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Value = i
    Range("X26").Value = j
     
    Worksheets("Niveau 4").Select
    Application.ScreenUpdating = False
    i = 0
    j = 0
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
        If cel.Interior.ColorIndex = 34 Then j = j + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Value = i
    Range("X26").Value = j
     
    Worksheets("Niveau 5").Select
    Application.ScreenUpdating = False
    i = 0
    j = 0
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
        If cel.Interior.ColorIndex = 34 Then j = j + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Value = i
    Range("X26").Value = j
     
    Worksheets("Niveau 6").Select
    Application.ScreenUpdating = False
    i = 0
    j = 0
    For Each cel In Range("B5:S98")
        If cel.Interior.ColorIndex = 35 Then i = i + 1
        If cel.Interior.ColorIndex = 34 Then j = j + 1
    Next
    Application.ScreenUpdating = True
    Range("X25").Value = i
    Range("X26").Value = j
    End Sub
    Forcément, la ça marche très bien mais c'est vrai que ça fait une sacrée tartine alors que je sais qu'il y a sûrement un moyen de simplifier tout ça, dans tous les cas merci de votre aide et à bientôt

  16. #16
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Tu déclares ton classeur avec le mot réservé class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Feuil As Worksheet
     
    For Each Feuil in Worksheets
    ...
    Next
    Pas la peine de déclarer un classeur : vu que tu vas exécuter le code dans ce classeur.

    Tu y es presque avec ce bout de code.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    je te conseille de boucler sur les feuilles classeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    For i = 1 To Sheets.Count
    Sheets(i).Activate
     
    '  ->ta boucle de couleur<- 
     
    next i
    edit: arf j'avais pas vu la réponse juste au dessus.... owned

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/08/2011, 11h46
  2. Addition de cellule par couleur
    Par melodyyy dans le forum Excel
    Réponses: 16
    Dernier message: 21/06/2007, 15h43
  3. Compter des cellules de couleurs différentes
    Par solorac dans le forum Excel
    Réponses: 3
    Dernier message: 13/06/2007, 12h24
  4. selectionner des cellules de couleurs
    Par SAINT-BERNARD dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 25/08/2006, 20h25
  5. Réponses: 4
    Dernier message: 30/05/2006, 18h21

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