(VBA) Probleme declaration fonction VBA

pjp666

XLDnaute Nouveau
Bonjour,

J'ai un probleme sur quelque chose de tres simple mais j'ai l'impression d'avoir manque quelque chose car je n'arrive pas a le resoudre.

En fait quand je cree une fonction dans un module VBA, comme par exemple:

Public Function multiplication(a As Integer, b As Integer) As Integer

multiplication = a * b

End Function

et qu'ensuite je cherche a l'utiliser directement dans une formule excel:

=multiplication(3,4)

J'ai une erreur #NOM?

Ce qui signifit bien entendu qu'il ne reconnait pas la fonction. Pourtant la fonction est declaree au bon endroit (et elle est publique..), elle apparait bien dans le menu declaration en haut a droite de la fenetre VBA...bref je n'arrive pas a voir ce qui cloche.

Y aurait il une ame charitable pour me venir en aide svp?

Merci d'avance.

Bien cordialement,
 

Fchris

XLDnaute Occasionnel
Re : (VBA) Probleme declaration fonction VBA

Bonjour Pjp666, Salut le Forum

Ta fonction, pour être prise en compte en tant que publique, doit absolument être mise dans un module, et non dans une feuille. Dans ton projet VBA, il faut que tu insères un module pour y faire ta déclaration, sinon cela ne fonctionne pas ;)

@+
Fchris
 

pjp666

XLDnaute Nouveau
Re : (VBA) Probleme declaration fonction VBA

Messieurs,

Tout d'abord merci pour votre accueil et votre aide!

Ensuite pour repondre a Fchris, ma fonction est bien dans un module et non simplement une feuille!

JeanPierre, je ne pense pas non plus que cela vienne de la ponctuation car quand je remplace ; par , cela me retourne une erreur.

En fait quand j'utilise l'auditeur de fonction, il me montre clairement que le probleme vient du nom de la fonction qui n'est pas reconnu. J'ai ce probleme au bureau et chez moi, dans les 2 cas je suis sous windows XP avec office XP.

Je ne pensais pas bloquer sur un truc aussi simple mais clairement, il y a un truc qui m'echappe.

En tout cas encore merci pour vos reponses et si quelqu'un a une autre idee, qu'il n'hesite pas a se manifester! merci.

Bien cordialement,
 

mutzik

XLDnaute Barbatruc
Re : (VBA) Probleme declaration fonction VBA

bonjour à tous,

1 dans les fonctions il faut mettre application.volatile
2 essaie avec un nom comme mult ou lieu de multiplication qu'excel utilises comme un mot réservé (peut-être)
 

pjp666

XLDnaute Nouveau
Re : (VBA) Probleme declaration fonction VBA

Bon j'ai trouve!

En fait c'etait tres bete mais la fonction etat declaree dans un module d'une autre feuille que celle que j'utilise. Je pensais naivement qu'en la declarant publique cela suffirait a la rendre operante dans toutes mes feuilles excel ouvertes (specialement car le module ou la fonction etait correspondait a ma feuille excel par defaut quand je demarre le programme)

Comme quoi on en apprend tous les jours.

Un grand merci pour votre aide a tous, et a bientot sur ce forum!

Bien cordialement,
 

alyscamps

XLDnaute Nouveau
Re : (VBA) Probleme declaration fonction VBA

Bonjour,

je me permets de déterrer cette discussion car mon problème ressemble fortement à celui qui est exposé plus haut : j'ai crée une fonction sous vba par clic droit sur le projet/insertion/Module (elle se contente de trouver une valeur dans un tableau) :

Code:
Function rechercheValeur(valeur As String) As String
'renvoi de la dernière position de la valeur dans le sens : gauche/droit puis haut/bas

Dim nbLignes, nbColonnes, abscisse, ordonnee As Integer

    nbLignes = ActiveSheet.Rows.Count
    nbColonnes = ActiveSheet.Columns.Count
    abscisse = 0
    ordonnee = 0
   
    For i = 1 To nbLignes
        For j = 1 To nbColonnes
            If Cells(i, j) = valeur Then
                abscisse = i
                ordonnee = j
            End If
        Next
    Next
    
rechercheValeur = CStr(abscisse) & " " & CStr(ordonnee)
End Function

Je l'appelle ensuite dans une procédure qui appartient au même projet VBA :
Code:
Sub test()
    ActiveSheet.Select
    result = Run(rechercheValeur, "2011")
    MsgBox result
End Sub

Lorsque j'exécute le test(), j'obtiens ce message d'erreur :
Erreur de compilation: Variable ou procédure attendue, et non un module

Certes, j'ai créé un module pour écrire ma fonction, mais cette dernière est bien une procédure ?
J'ai également essayé dans le test d'écrire simplement "result = rechercheValeur("2011"), sans plus de succès.

Avez-vous une idée ?
Je vous remercie d'avance.
 
Dernière édition:

ypelissier

XLDnaute Nouveau
Re : (VBA) Probleme declaration fonction VBA

Bonjour,
Je répond peut-être un peu tard mais au moins je tente...

Heummm je crois me souvenir que la fonction Run prend en premier paramètre le nom de la macro en chaine de caractères et non en direct comme tu le fais. Essaye avec ça :
result = Run("rechercheValeur", "2011")

Si cela ne fonctionne pas, essaye avec :
result = Run("Module1.rechercheValeur", "2011")
(à considérer que ta fonction est dans le Module1).
 

alyscamps

XLDnaute Nouveau
Re : (VBA) Probleme declaration fonction VBA

Bonjour,
Je répond peut-être un peu tard mais au moins je tente...

Heummm je crois me souvenir que la fonction Run prend en premier paramètre le nom de la macro en chaine de caractères et non en direct comme tu le fais. Essaye avec ça :
result = Run("rechercheValeur", "2011")

Si cela ne fonctionne pas, essaye avec :
result = Run("Module1.rechercheValeur", "2011")
(à considérer que ta fonction est dans le Module1).

Bonjour,

Merci pour votre réponse ! Etant sans retour, j'avais ouvert une autre discussion et finalement résolu le problème : j'avais nommé mon module (dans la case "Name") et ma fonction de manière similaire, ce qui fait que j'appelais effectivement un module en essayant d'appeler ma fonction.

Je ne me souviens plus si mon Run fonctionnait, mais je suis sûre que votre post aidera d'autres débutants en rade :)

A bientôt sur le forum !
 

laurent950

XLDnaute Accro
Re : (VBA) Probleme declaration fonction VBA

Bonsoir,

C'est tous simple cela fonctionne via toute les version excel :

Code vba associer au fichier ci-join

formule perso :

au choix

=Multiplication(7;2)

soit le resutat de la multiplication est 14

ou

A1 la cellule a la valeur de 6
A2 la cellule a la valeur de 2

=Multiplication(A1;A2)

soit le Résultat de la multiplication est 12

Laurent
 

Pièces jointes

  • FonctionPersoMultiplication.xlsm
    14.5 KB · Affichages: 73
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 765
dernier inscrit
Pi4