Correction de fonction

Fermé
Zarzis - Modifié le 8 avril 2019 à 14:34
 Zarzis - 16 avril 2019 à 16:39
Bonjour à tous,
J'ai créé une fonction qui permet de compter le nombre de couleurs différentes dans une plage. Mais le code en dessous ça ne fonctionne pas. Vous pouvez m'aider pour le corrigé.
Merci d'avance,
Public Function NB_Couleurs(Cell As Ranges) As Integer
Dim colec As New Collection
Application.Volatile

   On Error Resume Next
   colec.Add Cell.Interior.ColorIndex, CStr(Cell.Interior.ColorIndex)

 NB_Couleurs = colec.Count - 1
End Function>


EDIT : Ajout des balises de code

Configuration: Windows / Internet Explorer 11.0
A voir également:

4 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
8 avril 2019 à 14:40
Bonjour,

Pour commencer, merci à l'avenir d'utiliser les balises de code pour poster ton code sur le forum
explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, dans ta fonction tu passes en parametre
(Cell As Ranges)

Range au plurièl ? Que lui envoies tu au juste ... une seule plage de cellules ou plusieurs voir même.. une seule cellule ??

Car si tu ne passes qu'une seule cellule... c'est RANGE au singulier qu'il faut utiliser.
Sans compter que si ta plage contenait plusieurs cellules.. il faudrait boucler dessus...

Et pour finir.. pourquoi faire un -1 pour ton calcul ??


0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
8 avril 2019 à 14:46
Bonjour,

Tu as l'embarras du choix:

http://www.xavierdupre.fr/blog/2013-01-26_nojs.html

https://www.formuleexcel.com/compter-les-cellules-selon-leur-couleur-sur-excel/

https://www.commentcamarche.net/faq/46274-vba-excel-nombre-de-cellules-selon-leur-couleur
0
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
8 avril 2019 à 15:01
Bonjour,

Tel que décrit par mes prédécesseurs, la signature de la méthode est douteuse.

Public Function NB_Couleurs(Cell As Ranges) As Integer


Utiliser un mot qui ressemble à un mot réservé est périlleux.

Cell ~ Cells

Le mot Cells est un mot réservé à ne jamais utiliser comme nom de variable.
Le mot Cell ... pas vraiment une bonne idée.

Jordane à spécifié l'erreur de Ranges au lieu de Range.

Une définition comme suit serait préférable :

Public Function NB_Couleurs(ByVal Cellules As Range) As Integer


note : Cellules est au pluriel car il pourrait y avoir plus d'une cellule

Exemple :

Option Explicit
'

Public Sub Test()

    Dim Target As Range
    Dim Retour As Integer
    
    Set Target = Range("A1:D10")
    
    Retour = NB_Couleurs(Target)
    

    MsgBox Retour

End Sub
'


Public Function NB_Couleurs(ByVal Cellules As Range) As Integer

    Dim colec As New Collection
    Dim Cible As Range

    Application.Volatile

    On Error Resume Next
    
    For Each Cible In Cellules
        colec.Add Item:=Cible.Interior.ColorIndex, Key:=CStr(Cible.Interior.ColorIndex)
    Next Cible

    NB_Couleurs = colec.Count - 1
    
End Function



K
0
Merci pour vos retours, le code ça fonctionne bien sauf qu'il prend en compte les cellules vides (sans couleur). Il le considéré comme un couleur.
Y-a-il une solution de n'est pas rendre en compte les cellules vides (sans couleur)?
Merci d'avance,
0