Problème fonction VBA invalide sous Excel
Bonjour,
J'ai créé une fonction VBA pour compter le nombre de cellules répondant à trois critères.
D'abord je recherche les lignes qui contiennent le mois souhaité (dans la colonne B).
Exemple: 01/02/2008 => Je recherche "/02/".
Ensuite, pour chaque ligne trouvée, je vérifie si cellule de la colonne 1 est égal à valeur1 et si la cellule de la colonne 2 est égal à valeur2.
Il faut savoir que cette fonction marche très bien si je l'appelle à partir de VBA.
Le problème vient du fait que j'utilise cette fonction dans Excel
Exemple : =count_cells($B3;6;$G$1;10;$G$2)
La fonction renvoie #VALEUR à chaque fois que j'essaie de l'utiliser.
Quand je désactive le Find de la plage, ça fonctionne.
Ainsi, j'ai l'impression qu'on ne peut utiliser la recherche lorsque l'on est dans une formule Excel.
Merci de bien vouloir confirmer, ou de me dire comment contourner le problème..
Voici le code de ma fonction :
Public Function COUNT_CELLS(ByVal NumMois As Integer, ByVal Colonne1 As Integer, ByVal Valeur1 As String, ByVal Colonne2 As Integer, ByVal Valeur2 As String) As Integer
Dim Plage As Range
Dim CelluleTrouvee As Range
Dim DateCherche As String
Dim nbCellules As Integer
Dim ligne As Integer
Dim premiereAdresse As String
DateCherche = "/" & IIf(NumMois < 10, "0" & NumMois, NumMois) & "/"
Set Plage = Range("B20:B2000")
Set CelluleTrouvee = Range("B2000") ' Selectionner la derniere cellule
Set CelluleTrouvee = Plage.Find(What:=DateCherche, After:=CelluleTrouvee, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not CelluleTrouvee Is Nothing Then
premiereAdresse = CelluleTrouvee.Address
Do
ligne = CelluleTrouvee.Row
If Cells(ligne, Colonne1) = Valeur1 Then
If InStr(1, Cells(ligne, Colonne2), Valeur2, 1) > 0 Then nbCellules = nbCellules + 1
End If
Set CelluleTrouvee = Plage.FindNext(After:=CelluleTrouvee)
Loop Until CelluleTrouvee Is Nothing Or CelluleTrouvee.Address = premiereAdresse
End If
COUNT_CELLS = nbCellules
Set CelluleTrouvee = Nothing
End FunctionAmicalement, Florian
Salut le forum
Bienvenue comme nouveau membres Florian
Merci de joindre un bout de fichier, pour faciliter le travail (On n'aiment pas deviner)
Tu n'as qu'à cliquer sur ce lien : Joindre un fichier pour que l'on puisse t'aider, et recopier l'adresse sur ta ficelle.
Mytå
Bonjour tout le monde.
J'ai préparé ce fichier de test.
Les dates sont au format texte donc on peut bien appliquer la recherche via la fonction Find.
Voici le lien du fichier : https://www.excel-pratique.com/~files/doc/Test_Fonction.xls
Si on clique sur le bouton "Compter cellules", le résultat retourné est correct.
Toutefois, l'appel de la fonction à partir d'une cellule dans Excel retourne 0 ou l'erreur #VALEUR.
Merci de votre aide.
Amicalement Florian.
Ouf.
C'est bon, j'ai trouvé le problème.
En fait, l'erreur est normal, mais je ne l'avais pas trouvée.
J'ai ajouté un point d'arret à la fonction puis j'ai rafraichi la valeur dans la cellule.
Résultat :
Lorsque CelluleTrouvee est égale à Nothing, la deuxième partie du OR est exécutée quand même et provoque une erreur.
Solution :
J'ai sorti la condition du "loop until", en écrivant If CelluleTrouvee Is Nothing Then Exit Do.
J'avais peur qu'on ne puisse utiliser la fonction Find dans une cellule, alors qu'en fait, c'était une bête erreur de considération.
Bonne journée à tous.
Florian