begin process at 2012 02 14 19:36:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

Débutants

 > 

Activer fonction Excel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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 TypeRetour
en 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

Membre Club

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

Membre Club
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

Membre Club
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

Membre Club
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

Estelle_BNP

Merci pour le conseil


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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,146 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales