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 :

Compter en fonction de la couleur de fond! [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 61
    Points : 29
    Points
    29
    Par défaut Compter en fonction de la couleur de fond!
    Bonsoir à tous,

    J'ai essayé de faire une petite macro pour compter sur une colonne les cellules d'une certaine couleur (définie à l'exécution de la macro ) que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub comptagesurcouleur()
     
    a = InputBox("entrez la couleur de fond recherchée (1=noir, 2=blanc, 3=rouge, 4=vert, 5= bleu, 6=jaune, 7=rose, 8=cyan)") 'couleur : 1=noir, 2=blanc, 3=rouge, 4=vert, 5= bleu, 6=jaune, 7=rose, 8=cyan
    compteur = 0
     
    For j = 1 To 40
        If Cells(j, 1).Interior.ColorIndex = a Then
            compteur = compteur + 1
        End If
    Next
    Cells(41, 1).Value = compteur
    End Sub
    Petit hic, peut importe la couleur que je demande, le compteur me renvoi la valeur "0", et pourtant il y a des cellules de cette couleur dans ma plage...

    Une petite aide serait la bienvenue car comme d'habitude je n'arrive pas à voir où j'ai commis une erreur...

    Merci d'avance.

    Vapo

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Typez les variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim a As Byte, j As Byte, compteur As Byte
     
    a = InputBox("entrez la couleur de fond recherchée (1=noir, 2=blanc, 3=rouge, 4=vert, 5= bleu, 6=jaune, 7=rose, 8=cyan)") 'couleur : 1=noir, 2=blanc, 3=rouge, 4=vert, 5= bleu, 6=jaune, 7=rose, 8=cyan
    For j = 1 To 40
        If Cells(j, 1).Interior.ColorIndex = a Then
            compteur = compteur + 1
        End If
    Next
    Cells(41, 1).Value = compteur

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 61
    Points : 29
    Points
    29
    Par défaut
    Merci bien, ça fait quoi concrètement de typer les variables ou du moins ça fait quoi quand on ne le fait pas...

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    C'est déclarer le type de chaque variable, les variables non déclarées sont des variants
    Inputbox renvoie une valeur de type string, il fallait forcer la type de la variable a pour que l'égalité soit juste

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 61
    Points : 29
    Points
    29
    Par défaut
    Bon c'est cool maintenant j'ai une macro qui fonctionne à peu près comme je veux, la voici :
    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
    Sub comptagesurcouleur()
     
    Dim a As Byte, j As Byte, i As Byte, compteur As Byte, colonnedebut As Byte, colonnefin As Byte, lignedebut As Byte, lignefin As Byte
    MsgBox "Macro qui va compter le nombre de cellules de la couleur de votre choix dans les plages que vous allez déterminer!"
    colonnedebut = InputBox("Entrez le numéro de la première colonne à sonder, exemple :" & Chr(13) & "A=1" & Chr(13) & "B=2" & Chr(13) & "...", "Choix de la colonne de début")
    colonnefin = InputBox("Entrez le numéro de la dernière colonne à sonder, exemple :" & Chr(13) & "A=1" & Chr(13) & "B=2" & Chr(13) & "...", "Choix de la colonne de fin")
    lignedebut = InputBox("Entrez le numéro de la première ligne à sonder", "Choix de la ligne de début")
    lignefin = InputBox("Entrez le numéro de la dernière ligne à sonder", "Choix de la ligne de fin")
    a = InputBox("1=Noir" & Chr(13) & "2=Blanc" & Chr(13) & "3=Rouge" & Chr(13) & "4=Vert brillant" & Chr(13) & "5= Bleu" & Chr(13) & "6=Jaune" & Chr(13) & "7=Rose" & Chr(13) & "8=Turquoise", "Choix de la couleur")
    compteur = 0
     
    For j = lignedebut To lignefin
        For i = colonnedebut To colonnefin
            If Cells(j, i).Interior.ColorIndex = a Then
                compteur = compteur + 1
            End If
        Next
    Next
    MsgBox compteur, vbOKOnly, "Résultat"
    End Sub
    seul petit hic si je sélectionne un trop grand intervalle pour ligne de début ou ligne de fin, ou même si je sélectionne au-delà de la ligne 300 (environ) en ligne de début, il me renvoi un message d'erreur type "Dépassement de capacité"...

    alors que 300 ce n'est rien

    Quelqu'un pourrait-il éclairer ma lanterne ? Je ne comprend pas bien pourquoi ça fait ça...

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut
    Bonjour,

    Au lieu du type Byte limité à 256 si je me souviens bien.
    mettez le type Integer limité lui à 32000 et des poussières.

  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 922
    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 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Cela provient de la façon dont tu déclares tes variables.
    Une variable de type byte peut contenir une valeur de maximum 256, Integer peut aller jusqu'à 32767 etc ...
    Personnellement lorsqu'il s'agit de typer des variables qui représentent des lignes ou des colonnes, je les type comme Single
    Extrait de l'aide en ligne.
    Type de données Taille d'enregistrement Plage
    Byte 1 octet 0 à 255
    Boolean 2 octets True ou False
    Integer 2 octets -32 768 à 32 767
    Long
    (entier long) 4 octets -2 147 483 648 à 2 147 483 647
    Single
    (à virgule flottante en simple précision) 4 octets -3,402823E38 à -1,401298E-45 pour les valeurs négatives ; 1,401298E-45 à 3,402823E38 pour les valeurs positives
    Double
    (à virgule flottante en double précision) 8 octets -1,79769313486231E308 à
    -4,94065645841247E-324 pour les valeurs négatives ; 4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Au départ, tu n'avais que 40 lignes à gérer. c'est pourquoi j'avais proposé le type Bute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim a As Byte, j As Byte, compteur As Byte
     
    a = InputBox("entrez la couleur de fond recherchée (1=noir, 2=blanc, 3=rouge, 4=vert, 5= bleu, 6=jaune, 7=rose, 8=cyan)") 'couleur : 1=noir, 2=blanc, 3=rouge, 4=vert, 5= bleu, 6=jaune, 7=rose, 8=cyan
    For j = 1 To 40
    Maintenant, comme dit précédemment, à toi d'agir sur le type qui te convient en optimisant les déclarations par rapport à l'état de tes données.
    Dans un premier lieu, tu auras à faire les déclarations suivantes (sous réserve des remarques postées ci-haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim a as byte
    Dim j as Integer, compteur as integer

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 61
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup,
    visiblement je n'ai pas encore le reflexe de reflechir aux types des variables... faudra que je m'y mette!

    Par contre comme un problème n'arrive jamais seul, maintenant que cela fonctionne bien, je m'aperçoit qu'il reconnait les fond de couleur quand on les a mis manuellement, mais quand le fond de la cellule est colorié en résultat d'une mise en forme conditionnelle par exemple, il ne reconnait pas ce fond et ne le compte pas

    Vous savez de quoi ça vient et comment je peux corriger ce problème ?

    Merci pour le temps que vous me consacrez

    P.S: Mercatog, oui le fichier de 40 lignes c'était pour commencer par une macro simplifiée (un entrainement quoi), je fonctionne toujours ainsi je préfère après malheureusement on découvre les problèmes au fur et à mesure de l'utilisation de la macro (comme dans mon cas snif ^^)!

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

Discussions similaires

  1. [XL-2007] Formule conditionnelle en fonction de la couleur de fond
    Par Menhir dans le forum Excel
    Réponses: 9
    Dernier message: 19/05/2014, 17h14
  2. [XL-2003] Somme horizontale puis verticale en fonction de la couleur de fond des cellules.
    Par graphikris dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 19/05/2013, 12h21
  3. [XL-2000] compter des cellules avec une couleur de fond et une couleur de police
    Par darkvadave dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/11/2011, 16h36
  4. Réponses: 3
    Dernier message: 16/05/2008, 17h42
  5. Compter en fonction de la couleur de fond
    Par Nico123 dans le forum Excel
    Réponses: 2
    Dernier message: 12/07/2007, 14h52

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