J'ai défini quelques fonctions dans un classeur à l'aide de VBA, et je m'attendais ensuite à pouvoir les utiliser dans une formule de cellule, mais Excel ne reconnaît pas la fonction. Je viens d'avoir #NAME?
A tenté:
Qu'est-ce que je rate?
Ce n'est pas un code intelligent, non plus:
Function Square2(AnyNumber)
'return the square of any integer
Square2 = AnyNumber * AnyNumber
End Function
Placer la fonction dans la zone "ThisWorkbook" peut provoquer le problème #NAME?
. Créez un nouveau module (clic droit sur le dossier VBAProject, Insert, New Module)
Alt + F11
sous Windows/Fn + Option + F11
sur un Mac)Créez une fonction Public
dans Module1
, par exemple:
Public Function findArea(ByVal width as Double, _
ByVal height as Double) As Double
' Return the area
findArea = width * height
End Function
Appelez-le depuis une cellule, comme n'importe quelle autre fonction: =findArea(B12,C12)
J'ai rencontré le même problème, après avoir lutté pour suivre, qui a fonctionné pour moi:
Ma fonction était à l'intérieur d'un module de classeur de macros appelé Personal.XLSB. J'ai préfixé le nom de la fonction avec le nom de fichier du classeur de macros personnelles et!, Ainsi, si le nom de la fonction est la fonction (x, y), j'ai entré dans la cellule "= PERSONAL.XLSB! LaFonction (x, y).
Veuillez noter que PERSONAL.XLSB est toujours ouvert en mode caché pour moi.
J'ai eu un problème identique, y compris une fonction qui a ensuite cessé de fonctionner, donnant une erreur #NAME. J'ai réussi à corriger les deux en m'assurant que le nom du module n'est pas le même que le nom de la fonction. J'avais une fonction de travail F_1 dans Module1, j'ai changé le nom du module en F_1 et cela a cessé de fonctionner; je suis maintenant revenu dans Module1 et la fonction est à nouveau opérationnelle. Ma deuxième fonction a également commencé à fonctionner lorsque j'ai changé le nom du module de F_2 à Module2.
Assurez-vous que vous n'êtes pas en mode conception.
Il existe un bouton en mode Création dans l'onglet Développeur dans Excel et à côté des boutons Exécuter/Arrêter dans l'éditeur VBA. S'il est sélectionné et ne vous permet pas de le désélectionner, essayez de rouvrir le classeur avec les macros activées.
S'il est toujours activé ou ne laisse pas les macros s'exécuter, assurez-vous que les macros sont activées
Activer les macros.
Je pense qu'il pourrait y avoir un problème si votre module porte le même nom que votre fonction. Essayez de renommer votre module ou votre fonction.
Les fichiers XLSX et XLSM n’ont rien à voir avec cela. Le format joue le rôle lorsque vous enregistrez le fichier. (Dans XLSX, le code VBA sera supprimé lors de l'enregistrement du fichier).
Le code ci-dessous de http://office.Microsoft.com/en-us/Excel-help/creating-custom-functions-HA001111701.aspx fonctionne assez bien dans un nouveau module dans Excel.
Function Discount(quantity, price)
If quantity >= 100 Then
Discount = quantity * price * 0.1
Else
Discount = 0
End If
Discount = Application.Round(Discount, 2)
End Function
Étant donné que je ne peux pas voir votre code, pouvez-vous essayer si la fonction ci-dessous fonctionne pour vous aussi? Si tel est le cas, commencez à modifier la fonction ci-dessous afin qu'elle devienne votre fonction (par exemple, modifiez d'abord le nom et vérifiez si cela fonctionne, puis modifiez le nombre de paramètres et vérifiez si cela fonctionne, puis modifiez le nom des paramètres).
J'ai ouvert Excel, ouvert l'éditeur de code (Alt + F11), sélectionné le nouveau classeur, inséré un nouveau module, saisi
Function Decrement(i As Integer) As Integer
Decrement = i - 1
End Function
puis retourné à mon classeur et en A1 tapé = Decrement (2) et appuyez sur Entrée, et cela a fonctionné. Decrement est apparu dans la liste déroulante des fonctions car j'ai tapé = Decr ... Il a été reconnu et a fonctionné. Je n'ai même pas eu à sauvegarder le classeur.
Je sais que ce n'est pas exactement une réponse à votre question, mais c'est la recette avec laquelle j'ai eu de la chance.
Activer les macros.
Si vous utilisez les dernières versions d'Excel, pour afficher les fonctions VBA dans un autre classeur, vous devez:
Définir une référence. Dans VBA (Alt-F11), choisissez Outils/Références, puis naviguez jusqu'au classeur contenant la macro que vous souhaitez utiliser. Vérifiez cette référence dans la liste.
Si vous obtenez un message d'erreur concernant le conflit des noms de modules, renommez-le d'abord dans l'explorateur de projet.