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

Excel Discussion :

NB.SI.ENS et couleur de fond [XL-2013]


Sujet :

Excel

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut NB.SI.ENS et couleur de fond
    Bonjour,

    J'ai besoin d'aide.

    Comment faire pour utiliser une couleur de fond comme critère de nb.si.ens

    voici ce que j'ai essayé mais ça ne fonctionne pas...

    Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function couleur(Cellule As Range)
        Application.Volatile
        couleur = Cellule.Interior.ColorIndex
    End Function
    Et dans la cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS(E:E;"critère 1";H:H;"critère 2";A:A;couleur(a1))
    Merci de votre aide

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Sujet de nombreuses fois abordé sur ce forum avec chaque fois la même réponse : utiliser une couleur comme donnée d'entrée dans Excel est une très mauvaise idée.

    Excel ne considère pas un élément de format (comme la couleur) comme une donnée d'entrée.
    Donc, même avec un Volatile dans ta fonction, ça sera très boiteux : ta fonction "couleur" donnera effectivement un bon résultat au moment où tu la taperas mais si, plus tard, tu changes la couleur de la cellule ciblée, la valeur renvoyée par ta fonction ne changera pas, malgré le Volatile.
    Elle ne sera remise à jour que lorsque tu changeras le contenu de ta cellule.

    Et si, en plus, cette couleur est résultat d'une mise en forme conditionnelle, c'est encore pire : ta fonction te renverra la couleur du format de la cellule mais pas celle forcée par la mise en forme conditionnelle.
    Et aucune méthode ou propriété ne te permettra de connaitre cette couleur.

    En plus, dans ton NB.SI, la plage A:A renverra la contenu de la colonne A et non sa couleur. Donc, à moins qu'il y ait dans ces cellule la valeur d'un index de couleur, ça ne peut pas fonctionner.

    Donc le seul conseil que je peux te donner c'est de changer de stratégie.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup Menhir pour ta réponse. J'en prends bonne note.

    Je vais ajouter une colonne et y récupérer la valeur pour le troisième critère.

    Le principe était que mensuellement je copie +/- 1000 lignes dans un onglet et chacun des mois a sa propre couleur de fond. De là s'en suit des statistiques que je récupère via NB.SI.ENS.

    Donc soit j'inscrit manuellement une valeur dans une nouvelle colonne (genre 1 pour janvier) ou soit je trouve une façon d'automatiser une valeur pour cette colonne. Ensuite je récupère cette valeur comme critère.

    Merci c'est très apprécié.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je ne comprends pas ton problème : mettre une valeur dans 1000 cellules ne prend pas plus de temps que de modifier la couleur de 1000 cellules.

    A la limite, tu mets dans ces cellules une formule comme =MOIS(AUJOURDHUI()) et, chaque fois, tu fais un "copier/coller valeur" pour les lignes que tu as ajoutées.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci Menhir,

    Lors de la copie des 1000 lignes (sur 35 colonnes), je leur attribut une couleur unique via un clique. Cette couleur que j'attribue à chaque fois que je copie un lot de lignes (une fois par mois) me sert pour analyse ultérieur. Je voulais récupérer cette couleur comme critère et tu m'as bien expliqué pourquoi ce n'est pas vraiment une bonne solution. Je vais donc, pour récupérer les données avec la même couleur de fond, ajouter une colonne et y attribuer une valeur, reste à savoir comment je vais le faire, il y a plusieurs solutions plutôt simples.

    Au plaisir!

  6. #6
    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 771
    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 771
    Points : 28 631
    Points
    28 631
    Billets dans le blog
    53
    Par défaut
    Bonjour Menhir,
    si, plus tard, tu changes la couleur de la cellule ciblée, la valeur renvoyée par ta fonction ne changera pas, malgré le Volatile.
    Elle ne sera remise à jour que lorsque tu changeras le contenu de ta cellule.
    La fonction volatile réagit également si l'on copie un format comme la couleur de fond avec le pinceau ou si l'on appuie sur la touche Suppression même dans une cellule déjà vide.
    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

  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 771
    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 771
    Points : 28 631
    Points
    28 631
    Billets dans le blog
    53
    Par défaut
    Bonjour Gonteur,
    Lors de la copie des 1000 lignes (sur 35 colonnes), je leur attribut une couleur unique via un clique. Cette couleur que j'attribue à chaque fois que je copie un lot de lignes (une fois par mois) me sert pour analyse ultérieur. Je voulais récupérer cette couleur comme critère et tu m'as bien expliqué pourquoi ce n'est pas vraiment une bonne solution
    Si tu souhaites récupérer la valeur de la couleur par une fonction personnalisée telle que la tienne, après placement des couleurs par code VBA.
    d'ajouter de forcer le calcul par l'instruction Application.Calculate

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
     Dim r As Long, rng As Range
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1:A500")
     For r = 2 To 100
      With Cells(r, 1)
      .Interior.Color = Application.WorksheetFunction.RandBetween(1, 500000)
      '.Value = Application.WorksheetFunction.RandBetween(1000, 5000)
      End With
     Next
     Application.Calculate
    End Sub
    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
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci Philippe Tulliez

    Je suis désolé mais je ne comprends pas trop comment et où utiliser le code que tu as inscrit.

    En fait, je recherche comment faire un compte selon plusieurs critères dont 1 étant la couleur de fond, ça ne semble pas très évident, je vais donc associer une valeur récupérable, dans une nouvelle colonne, à toutes les lignes de même couleur.

  9. #9
    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 771
    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 771
    Points : 28 631
    Points
    28 631
    Billets dans le blog
    53
    Par défaut
    Bonjour Gonter,
    Je suis désolé mais je ne comprends pas trop comment et où utiliser le code que tu as inscrit
    J'ai simulé l'écriture de différentes couleurs dans les cellules A2:A100 et en fin de procédure je force le recalcule du classeur.
    Si en cellule C2 et suivantes on place la fonction et bien cette fonction renverra le code couleur (RGB) et pas IndexColor placée en cellule A2 et suivantes.

    Il y a deux propriétés qui permettent de placer de la couleur (Police ou Fond) dans une cellule, Color ou ColorIndex, je préfère Color car ColorIndex peut renvoyer une couleur différente suivant la version voire d'un PC à l'autre si l'utilisateur modifie la couleur de la palette.
    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

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Encore merci pour votre aide, ça m'a aiguiller vers une solution qui fonctionne.

    Dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function CodeCouleur(CelluleCouleur As Range) As Long
     'Retourne le code couleur de la CelluleCouleur
     Application.Volatile
     CodeCouleur = CelluleCouleur.Interior.Color
    End Function
    Je récupère la valeur de la couleur de C dans la colonne A
    J'ai colorer, en marge d'une feuille, 12 cellules représentant les 12 mois d'une couleur différentes.

    Dans la cellule où je veux un compte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS(F:F;"critère";I:I;"critère";A:A;"CodeCouleur(cellule contenant la couleur de fond du mois )")
    Le compte fonctionne en fonction des 3 critères , je dois forcer le recalcul avec F9 mais ça me va.

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

Discussions similaires

  1. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  2. Couleur de fond cellule excel
    Par Grouik dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/07/2004, 09h43
  3. Réponses: 4
    Dernier message: 23/06/2004, 14h30
  4. debutant : couleur de fond d'une application direct3D
    Par ptidrone dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2004, 17h08
  5. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37

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