Accueil > Forum > > > > Activer fonction Excel
Activer fonction Excel
vendredi 5 octobre 2007 à 19:44:17 |
Activer fonction Excel

Estelle_BNP
|
Bonsoir à tous, Je viens de créer une fonction VBA très simple qui permet de réaliser une interpolation linéaire. La voici : Public Function Interpoline(X() as variant, Y() as variant, Z as variant) Dim t as Interger t=1 While X(t)<Z and t<Ubound(X) t=t+1 Wend Interpoline = Y(t-1)+(Z-X(t-1))/(X(t)-X(t-1))*(Y(t)-Y(t-1)) End Function J'aimerai maintenant utiliser cette fonction à partir d'Excel. J'ai donc tapé dans une page Interpoline(Dates, Taux, C8) où Dates est une plage de dates triées par ordre croissant, Taux est une plage de chiffres et C8 est une date. Dans ma cellule Excel où j'ai tapée cette fonction je vois #VALEUR. Pensant que j'avais mal écrit la fonction j'ai tapé ensuite au début de la fonction Interpoline=1 pour voir si elle était activée correctement (et j'ai mis le reste du code en commentaire) mais je vois toujours #VALEUR. Pouvez-vous me dire comment utiliser ma fonction Interpoline directement dans Excel ? Merci pour vos réponses.
|
|
samedi 6 octobre 2007 à 00:32:08 |
Re : Activer fonction Excel

MPi
|
Premièrement, une Function devrait retourner quelque chose. Ta formule est peut-être simple pour toi, mais je n'ai aucune idée de ce qu'elle devrait retourner  Alors tu devrais l'écrire comme ceci Public Function Interpoline(X() as variant, Y() as variant, Z as variant) As TypeRetouren changeant TypeRetour par ce qui devrait être retourné. Par défaut le retour est Variant, donc ça ne devrait pas causer de problème ici ... Deuxièmement, cette formule doit être déclarée dans un module standard (.bas) et non pas dans le code d'une feuille ou d'un UserForm. C'est probablement ici qu'il y a problème... (?) En espérant que ça puisse aider ... MPi²
|
|
samedi 6 octobre 2007 à 12:21:54 |
Re : Activer fonction Excel

us_30
|
Bonjour,
Non une fonction n'a pas obligatoirement bessoin de déclarer le type de donnée en retour. Car sans précision le type sera en Variant par défaut. Mais il reste vrai, qu'il est préférable de déclarer son type... C'est une nuance.
Pour illustrer, voici un exemple plus que basique :
Function essai() essai = 5 End Function
Sub test() Debug.Print essai End Sub
qui fonctionne parfaitement... 
Ensuite, encore un précision sur l'emplacement. La fonction si elle est déclarée dans "feuil1", sera correctement utilisable qu'à partir d'un appel effectuée à partir de ce même emplacement (donc en interne avec une sub en VBA). Malgré, les apparences les appels d'une fonction à partir d'une cellule EXCEL, ne fait pas directement référence à "feuil1" du VBA. Seul les événements passent directement. (Je ne sais pas si je suis bien clair... c'est pourtant juste).
En définitive, pour appeler une fonction reconnue à partir des cellules, il faut qu'elle soit dans un module (donc accessible à tous et en Public (par défaut)), comme l'indique MPi².
=
Le code d'erreur #VALEUR, ne signifie pas que la fonction n'est pas reconnue ! mais justement l'inverse. LA fonction est bien reconnue, mais ces paramètres où son calcul (plus généralement) pose problème.
Si la fonction n'était pas reconnue, le code d'erreur serait #NOM.
=
LE problème ici, semble être le passage des paramètres à la fonction. Pour passer une plage de cellule, on utilise la type RANGE. VARIANT fonctionnera mais peut poser problème si on traite n'importe comment les données par la suite.
PAR contre, les parenthèse ne seront pas valide pour passer une plage. C'est ICI l'erreur !
Donc utiliser :
Public Function Interpoline(X as variant, Y as variant, Z as variant)
et plus précisément :
Function Interpoline(X as range, Y as range, Z as range)
(Public est par défaut, donc on peut aussi le retirer)
On peut vérifier que cela fonctionne avec cet exemple basique :
Function essai(X As Range) essai = X(2) End Function
et en prenant une plage d'au moins 2 valeurs... et renvoi toujours la valeur de la 2ième selection X(2) (y'a pas de test de validité ! )
=
Ensuite, le code proposée est obscure et ne fonctionne donc pas... mais les problèmes de syntaxe sont déjà résolus...
Amicalement, Us.
|
|
dimanche 7 octobre 2007 à 11:37:25 |
Re : Activer fonction Excel

lermite222
|
Citation Dans ma cellule Excel où j'ai tapée cette fonction je vois #VALEUR.
Les fonctions ne peuvent pas êtres entrées dans une cellule, elle doivent l'être soit dans un module de feuille soit dans un module commun. @+
|
|
dimanche 7 octobre 2007 à 15:32:25 |
Re : Activer fonction Excel

us_30
|
Euh... bonjour, lermite22... Perso, j'aime bien la justesse de la citation...  Amicalement, Us.
|
|
lundi 8 octobre 2007 à 16:33:48 |
Re : Activer fonction Excel

Estelle_BNP
|
Merci pour votre aide. Grâce à vos remarques et en tatonnant un peu, j'ai réussi à faire marcher cette fonction. Voici le code final :
Public Function InterpoLine(x As Range, Y As Range, Z As Date) As Double Dim i As Integer Dim TabDate() As Variant Dim TabTx() As Variant Dim xk As Variant
TabDate() = x TabTx() = Y
i = 1 While TabDate(i, 1) < Z And i < UBound(TabDate, 1) i = i + 1 Wend
InterpoLine = TabTx(i - 1, 1) + (Z - TabDate(i - 1, 1)) / (TabDate(i, 1) - TabDate(i - 1, 1)) * (TabTx(i, 1) - TabTx(i - 1, 1))
End Function
Encore merci d'avoir pris de votre temps pour m'aider.
Cordialement,
Estelle
|
|
lundi 8 octobre 2007 à 22:51:45 |
Re : Activer fonction Excel

us_30
|
Bonsoir,
Encore une précision. Tu utilises les plages en les tranférant dans un tableau déclaré par DIM. Ok, cela marche, mais comme tu ne modifie pas ces données, tu peux plus simplement garder les données RANGE.
En clair, ton code pourrait se simplifier avec :
=
Function InterpoLine(X As Range, Y As Range, Z As Date) As Double Dim i As Integer i = 1 While X(i, 1) < Z And i < UBound(X, 1) i = i + 1 Wend InterpoLine = Y(i - 1, 1) + (Z - X(i - 1, 1)) / (X(i, 1) - X(i - 1, 1)) * (Y(i, 1) - Y(i - 1, 1)) End Function
=
Rq : la variable "Dim xk As Variant" n'est jamais utilisée...
Amicalement, Us.
|
|
mercredi 10 octobre 2007 à 15:55:42 |
Re : Activer fonction Excel
|
Cette discussion est classée dans : fonction, excel, dates, variant, interpoline
Répondre à ce message
Sujets en rapport avec ce message
Ouvrir un pdf avec excel en fonction d'une cellule [ par FlyingAlex ]
Bonsoir a tous!J'ai une feuille Excel, avec une liste de nombres, à chaque nombre correspond un document PDF. J'aimerai trouver un moyen d'ouvri
Fonction Excel avance [ par AReS097 ]
Bonjour a tous,Je cherche un solution pour supprimer un ligne complète dans Excel, mais sans utiliser le numéro de ligne Excel.Dans la première colonn
Fonction "Show" et connexe de VBA 2003 Office EXCEL [ par jeanpierredebangui ]
Bonjour,j'ai créé un code de paye spécifique pour la Centrafrique avec EXCEL et VB 98. Par la suite, j'ai adapté ce code avec Windows XP SP1 et Office
Problème avec une fonction excel [ par garonimette ]
Appel aux experts excel :Est-il possible d'additionner dans une cellule la dernière cellule renseignée d'une colonne ?Je m'explique, je trouve ça pas
Lien entre fichier [ par eriz64 ]
Bonjour,J'ai un soucis de lien entre fichier.J'ai un fichier Excel qui contiens des valeurs en fonction du numéro du mois :1 2 3 4 5
Problème fonction Nz Access depuis Excel [ par entoanhuu ]
Bonjour.Je veux utiliser les données d'une requête Access à partir du module d'un classeur Excel. Voilà comment je m'y suis pris:Sub ouvrir_access()
Permutation des données d’un tableau. [ par keko38 ]
Bonjour à tous,
Fonction Excel dans VBA [ par InformatiqueStein ]
Bonjour, J'ai écris une subroutine permettant d'écrire dans une cellule d'une feuille d'Excel une fonction.Dans ma subroutine, voici ce qui est écrit:
Créer une fonction VB sous excel s'executant après une sauvegarde du classeur [ par kata ]
Bonjour à toutsJe cherche à réaliser une fonction type "Aftersave". c'est à dire de déclencher le lancement de la fonction après un enregistrement de
macro vb et associer colonnes excel [ par FSpring ]
Bonjour à tous Je travaille présentement sur une base de données en Excel et j’ai à associer des catégories avec d'autres. Je vous averti d'avance q
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|