XL 2016 Application.WorksheetFunction, fonction en VBA

gege5959

XLDnaute Nouveau
Bonjour amies et amis Excellistes,

N'ayant que des connaissances sommaires en programmation VBA, je vous sollicite.

J'ai un problème avec "Application.WorksheetFunction" car j'ai un message le message d'erreur suivant: "Erreur définie par l'application ou par l'objet".
"Application.WorksheetFunction" fonctionne avec la fonction CountIf (ci-dessous) dans une autre macro:(NbSheets = Application.WorksheetFunction.CountIf(Sheets("sol2").range(Cells(12, 36), Cells(14, 41)), 1).

QUESTION: Est-ce que "Application.WorksheetFunction" est compatible avec des fonctions ne se trouvant pas dans le catalogue proposé par Microsoft comme NbColor2 (en bas) ou y a-t'il une astuce pour que cela fonctionne?
la fonction nbcolor2 a été trouvée sur internet et n'est pas au catalogue mais fonctionne parfaitement dans les feuilles Excel.
Voici le code qui pose problème:

Sub NbVert ()

Dim Nbnum as Integer

Nbnum = Application.WorksheetFunction.NbColor2(Sheets(feuil1).range(Cells(1, 1), Cells(1, 20)), 4)

End Sub

(Nbnum est le nombre de cellules de couleur verte).
Les cellules vertes sont colorées par macro.

-----------------------------------
Function NbColor2(ByRef Plage As range, ByRef Couleur As Byte) As Long
Application.Volatile
Dim c As range
Dim nb As Long
nb = 0
For Each c In Plage
If c.Interior.ColorIndex = 4 Then
nb = nb + 1
End If
Next c
NbColor2 = nb
End Function

Merci d'avance pour votre aide,
Cordialement
 

Modeste geedee

XLDnaute Barbatruc
QUESTION: Est-ce que "Application.WorksheetFunction" est compatible avec des fonctions ne se trouvant pas dans le catalogue proposé par Microsoft comme NbColor2 (en bas) ou y a-t'il une astuce pour que cela fonctionne?
:rolleyes:NbColor2 étant une fonction personnelle...elle n'est évidement pas dans le catalogue
il suffit de l'appeler simplement :
Nbnum = NbColor2(Sheets(feuil1).range(Cells(1, 1), Cells(1, 20)), 4)
à condition quelle soit dans le classeur actif ou dans le classeur se trouvant dans XlStart
 

Modeste geedee

XLDnaute Barbatruc
Bonjour,

J'ai tenté votre proposition mais j'obtiens toujours le même message d'erreur: "Erreur définie par l'application ou par l'objet"

La fonction NbColor2 se trouve bien dans le classeur actif.

Cordialement
feuil1 tel que écrit, défini l'objet worksheet : codename
comme ceci :
NbNum=NbColor2(Feuil1.Range(Cells(1, 1), Cells(1, 20)), 4)
ou bien comme ceci :
"feuil1" nomme l'objet :Worksheet(name)
NbNum=NbColor2(Sheets("Feuil1").Range(Cells(1, 1), Cells(1, 20)), 4)
ou même :
la première feuille
NbNum=NbColor2(Sheets(1).Range(Cells(1, 1), Cells(1, 20)), 4)
 
Dernière édition:

gege5959

XLDnaute Nouveau
Bonjour,

Cela fonctionne parfaitement avec "NbNum=NbColor2(Feuil1.Range(Cells(1, 1), Cells(1, 20)), 4)",.
J'essaierai les 2 autres tout à l'heure car ma macro est bien plus compliquée que cela et je devais compter les cellules vertes sur 300 lignes et 4250 colonnes sur 14 feuilles Excel (ce qui prenait 50 min avec une boucle (for-next et while-wend) mais je calais là-dessus. (pc 2 x 2.7 Ghz).
Ça va prend 5 minutes à peine maintenant.

J'apprends donc que "Application.WorksheetFunction" ne fonctionne qu'avec les fonctions définies par excel mais aussi l'utilisation des fonctions personnelles.

Grâce à vous, me voilà plus instruit.

Un grand merci pour votre aide.

Bien cordialement
 

Discussions similaires

Réponses
12
Affichages
225
Réponses
1
Affichages
122
Réponses
0
Affichages
83

Statistiques des forums

Discussions
311 737
Messages
2 082 030
Membres
101 876
dernier inscrit
JULIEN21370