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 :

Gestion argument optionnel (fct comptage cellules sur couleur)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut Gestion argument optionnel (fct comptage cellules sur couleur)
    Bonjour.

    Le but de la fonction suivante est de compter le nombre de cellules ayant le fond d'une certaine couleur (dans une zone définie).

    Utilisation dans Excel :
    =NBCOULEURS($B$3:$B$19;D4) . Dans ce cas on recherche dans $B$3:$B$19 les cellules ayant une couleur de fond identique à D4.
    ou
    =NBCOULEURS($B$3:$B$19) . Dans ce cas on recherche dans $B$3:$B$19 les cellules ayant une couleur de fond identique à la cellule où est saisie la formule.

    Note :
    En utilisant la version 1 du code (qui ne figure pas ici) "NBCOULEURS($B$3:$B$19;D4)" avec le 2ème paramètre permanent ça fonctionne.

    Problème
    En passant le paramètre en optionnel j'ai systématiquement une erreur sur la ligne "If IsArray(..." du type "Argument non facultatif" (et la cellule Excel indique "#Valeur").

    Avez-vous une idée concernant l'origine du problème ?

    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
    Function NBCOULEURS2(ZoneCible As Range, Optional CelRef As Range) As Long
    Application.Volatile    ' force le reclacul automatique
    Dim Element                     ' élément dans la zone cible
    Dim NbOccur As Integer          ' nombre d'occurences de la couleur dans la zone cible
    Dim CouleurSource As Integer    ' code de la couleur à rechercher
    Dim ZoneRef As Range            ' zone avec la couleur de référence
     
    NbOccur = 0
    If IsArray(CelRef) Then ZoneRef = ActiveCell.Range Else ZoneRef = CelRef
    CouleurSource = ZoneRef.Interior.ColorIndex
    For Each Element In ZoneCible
        If Element.Interior.ColorIndex = CouleurSource Then NbOccur = NbOccur + 1
    Next
    NBCOULEURS2 = NbOccur
    End Function

  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
    13 178
    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 : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Note :
    En utilisant la version 1 du code (qui ne figure pas ici) "NBCOULEURS($B$3:$B$19;D4)" avec le 2ème paramètre permanent ça fonctionne.
    Pour voir pourquoi la version 1 fonctionne et pas la version 2 ce serait tout de même utile de la visualiser
    Dans cette ligne, il y a déjà une erreur ActiveCell.Range n'est pas bon, il faut mettre ActiveCell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsArray(CelRef) Then ZoneRef = ActiveCell Else ZoneRef = CelRef
    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
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    Effectivement.

    Voici la version 1 avec la cellule de référence en argument obligatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function NBCOULEURS(Cible As Range, CelRef As Range) As Long
    Application.Volatile    ' force le reclacul automatique
    Dim Element
    Dim NbOccur As Integer
    Dim CouleurSource As Integer
     
    NbOccur = 0
    CouleurSource = CelRef.Interior.ColorIndex
    For Each Element In Cible
        If Element.Interior.ColorIndex = CouleurSource Then NbOccur = NbOccur + 1
    Next
    NBCOULEURS = NbOccur
    End Function
    Citation Envoyé par corona Voir le message
    Dans cette ligne, il y a déjà une erreur ActiveCell.Range n'est pas bon, il faut mettre ActiveCell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsArray(CelRef) Then ZoneRef = ActiveCell Else ZoneRef = CelRef
    Je teste ça !

    Toujours le même problème.
    Je pense que cela vient de la détection du paramètre optionnel. J'ai essayé IsNull et IsArray sans succès.

  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
    13 178
    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 : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y avait deux erreurs
    Remplace cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsArray(CelRef) Then ZoneRef = ActiveCell.Range Else ZoneRef = CelRef
    Par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     If IsEmpty(CelRef) Then
       Set ZoneRef = CelRef
      Else
       Set ZoneRef = ActiveCell
     End If
    Erreur 1 : Une variable objet doit toujours être initialisée par l'instruction Set
    Erreur 2 : Utilise la fonction IsEmpty pour déterminer si une variable a été initialisée.
    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
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    Merci.
    "set"... Erreur de débutant...

    Suite à cette modification :
    - la fonction marche quand l'argument optionnel est positionné.
    - plus de message d'erreur sur le VBA

    Par contre si l'argument n'est pas passé la cellule contient #VALEUR!.
    Surement la question de détection de présence du paramètre optionnel (la résultat du If est toujours faux).
    Je creuse.

Discussions similaires

  1. [LibreOffice][Tableur] Test et comptage cellule par couleur
    Par Cyrion81 dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 16/06/2015, 08h03
  2. Comptage cellules en couleur
    Par nanot dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/05/2008, 10h41
  3. Comptage de cellule de couleur
    Par JPCOURET dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2007, 17h51
  4. [VBA-E]Couleur de cellule sur toute une ligne
    Par Kaiba dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/03/2007, 11h01
  5. Couleur de cellule sur SSDBGRID (Sheridan)
    Par Koksinhell dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/12/2005, 11h52

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