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 Function

Amicalement, 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

Rechercher des sujets similaires à "probleme fonction vba invalide"