Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2979 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Procédure Sub OK mais pas Fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Procédure Sub OK mais pas Fonction

n°1966969
pepito_mi_​corazon
Posté le 17-02-2010 à 18:17:54  profilanswer
 

Bonjour à tous,
 
J'ai un petit problème qui ne m'était jusqu'à présent jamais arrivé :
 
J'ai créé une fonction VBA, qui marche parfaitement lorsque je crée la procédure SUB et que j'appelle avec Call :
 
Sub Bouton2_Clic()
Call Interpolation("G5", "B5:R5", "B6:R6" )
End Sub
 
J'ai bien regardé avec l'outil "Variables Locales" (F8), ma fonction Interpolation fonctionne parfaitement et le résultat de la fonction est correcte.
 
Mais si je me mets maintenant dans une case Excel de la même feuille que mon bouton2, et que je tape : Interpolation("G5", "B5:R5", "B6:R6" ) j'ai l'erreur #VALEUR...
 
Je comprends pas pourquoi ça marche dans un cas et pas dans l'autre  :pt1cable:  
 
 
D'ailleurs j'en profite pour une 2ème question, comment peut -on passer une cellule excel en paramètre?
Ma fonction contient pour le moment des string, mais à terme, j'aimerai avoir une fonction en tapant dans une cellule excel :
 
Interpolation(sélectionner les cellules excel qui m'intéressent)
 
Merci beaucoup de votre aide !


Message édité par pepito_mi_corazon le 17-02-2010 à 18:29:09
mood
Publicité
Posté le 17-02-2010 à 18:17:54  profilanswer
 

n°1967057
kiki29
Posté le 18-02-2010 à 08:23:19  profilanswer
 

Salut, rebatir ta fonction interpolation en
Interpolation(A as Range, B as Rrange, C as Range )
Sans plus de détail difficle de faire mieux pour le reste de cette fonction


Message édité par kiki29 le 18-02-2010 à 08:23:31
n°1967075
pepito_mi_​corazon
Posté le 18-02-2010 à 09:46:35  profilanswer
 

Oki je viens de changer ma fonction pour des Range, et même problème je la  fais marcher avec un SUB, mais pas en appelant la fonction depuis une case EXCEL o_O : Voici mon code :
 
Public Function Interpolation_new(t As Range, dates As Range, taux As Range) As Double
 
Dim tab_dates, tab_taux As Variant
 
tab_dates = dates 'tableau INPUT des dates
tab_taux = taux ' INPUT des données à interpoler
 
 
For i = 1 To UBound(tab_dates, 2) 'Feuil2
Worksheets("Feuil2" ).Cells(1, i) = dates(1, i)
Worksheets("Feuil2" ).Cells(2, i) = taux(1, i)
Worksheets("Feuil2" ).Cells(3, i) = i
Next i
Worksheets("Feuil2" ).Cells(4, 1) = t
Worksheets("Feuil2" ).Activate
 
 
 
Dim x As Double
x = Application.WorksheetFunction.Match(t, dates, 0) ' Ordonnée de la date considérée
On Error GoTo 0
 
 
 
If x < 4 Then
Interpolation_new = Cubique(x, Cells(3, 1), Cells(3, 2), Cells(3, 3), Cells(3, 4), Cells(2, 1), Cells(2, 2), Cells(2, 3), Cells(2, 4)) 'Interpolation des 4 premières valeurs
 
ElseIf x > Cells(3, UBound(tab_dates, 2) - 4) Then
Interpolation_new = Cubique(x, Cells(3, UBound(tab_dates, 2) - 3), Cells(3, UBound(tab_dates, 2) - 2), Cells(3, UBound(tab_dates, 2) - 1), Cells(3, UBound(tab_dates, 2)), Cells(2, UBound(tab_taux, 2) - 3), Cells(2, UBound(tab_taux, 2) - 2), Cells(2, UBound(tab_taux, 2) - 1), Cells(2, UBound(tab_taux, 2))) 'Interpolation des 4 dernières valeurs
 
Else 'Interpolation du reste
 
 
 
 
            If (Cells(2, x) = 0) Then
 
            Dim tableau(1, 3) As Double 'tableau des noeuds aux alentours
            Dim j As Double
             
 
 
            j = x
            While (Cells(2, j) = 0)
            DoEvents
            j = j - 1
            Wend
            tableau(0, 1) = Cells(3, j)
            tableau(1, 1) = Cells(2, j)
 
 
 
 
 
 
            j = x
            While (Cells(2, j) = 0)
            DoEvents
            j = j + 1
            Wend
            tableau(0, 2) = Cells(3, j)
            tableau(1, 2) = Cells(2, j)
 
 
 
 
 
 
            j = tableau(0, 1) - 1
            While (Cells(2, j) = 0)
            DoEvents
            j = j - 1
            Wend
            tableau(0, 0) = Cells(3, j)
            tableau(1, 0) = Cells(2, j)
 
 
 
 
            j = tableau(0, 2) + 1
            While (Cells(2, j) = 0)
            DoEvents
            j = j + 1
            Wend
            tableau(0, 3) = Cells(3, j)
            tableau(1, 3) = Cells(2, j)
 
            Interpolation_new = Cubique(x, tableau(0, 0), tableau(0, 1), tableau(0, 2), tableau(0, 3), tableau(1, 0), tableau(1, 1), tableau(1, 2), tableau(1, 3))
 
 
            Else:
            Interpolation_new = Cells(2, x)
            End If
 
 
 
End If
 
 
 
 
 
Worksheets("Feuil1" ).Cells(25, 1) = Interpolation_new 'Test qui affiche le résultat de la fonction avec une procédure SUB
 
 
End Function
 
 
 
Depuis une case excel, j'ai tapé : =Interpolation_new(B1;A1:Q1;A2:Q2) ==> #VALEUR
 
Et ma procédure SUB et la suivante :
 
Sub Bouton2_Clic()
Worksheets("Feuil1" ).Activate
Call Interpolation_new(Range("A1" ), Range("A1:Q1" ), Range("A2:Q2" ))
End Sub
 
==> marche impec
 
 
Pourtant avec la fonction Typename j'ai bien vérifié que les cellules Excel étaient reconnues par VBA comme des Ranges :/
 
Voila ou j'en suis, merci de votre aide !

n°1967076
drasche
Posté le 18-02-2010 à 09:47:05  profilanswer
 

Et ta fonction Interpolation retourne bien une valeur à la fin?
 
Genre:
 

Code :
  1. Interpolation = valeur


 
?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1967080
pepito_mi_​corazon
Posté le 18-02-2010 à 09:48:39  profilanswer
 

Oui oui, et ma fonction cubique marche très bien ...

n°1967082
pepito_mi_​corazon
Posté le 18-02-2010 à 09:51:10  profilanswer
 

Est-ce qu'il y a un moyen d'afficher les étapes de calcul pour une fonction ? ( genre comme F8 pour un SUB ...)

n°1967085
drasche
Posté le 18-02-2010 à 09:53:54  profilanswer
 

bon, ceci ne sert à rien:
 

Code :
  1. On Error GoTo 0


 
Et ça, ça sert à quoi?
 

Code :
  1. Else:


Les : indiquent un label, et vu qu'il n'est référencé nulle part, il ne sert à rien.
 
Mets un breakpoint dans ta fonction et teste pour voir que Interpolation_new a bien une valeur à la fin et ne plante pas.
 
Si tu ne veux pas exécuter ligne par ligne, il y a Debug.Print qui pourra t'aider.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1967092
pepito_mi_​corazon
Posté le 18-02-2010 à 10:11:45  profilanswer
 

Oki j'ai enlevé les 2 parties inutiles (apparemment le On Error stabiliserait la fonction Match...)
 
J'ai identifié l'endroit du problème (merci pour le coup du pointbreak, je ne connaissais pas...) :
 
ça vient de la ligne : Worksheets("Feuil2" ).Cells(1, i) = tab_dates(1, i), après qu'il ait été surligné en jaune, l'éxecution ligne par ligne plante, et si je mets un pointbreak juste après je n'y accède même pas.
 
POurtant mon tableau tab_dates est bien rempli : cf screen :
 
 
http://img192.imageshack.us/img192/3664/screenvbainterp.jpg


Message édité par pepito_mi_corazon le 18-02-2010 à 10:12:56
n°1967096
drasche
Posté le 18-02-2010 à 10:20:24  profilanswer
 

Il ne te reste plus qu'à identifier la cause de l'erreur.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1967108
pepito_mi_​corazon
Posté le 18-02-2010 à 10:38:40  profilanswer
 

Oui exactement...... :D
 
Je vais craquer, il me plante même avec une boucle ultra simple :
 
For i = 0 To 5
Worksheets("Feuil2" ).Cells(7, i + 1) = 2 + i
Worksheets("Feuil2" ).Cells(8, i + 1) = i
Next i
 
Il serait donc impossible de remplir des feuilles excel depuis VBA ??

mood
Publicité
Posté le 18-02-2010 à 10:38:40  profilanswer
 

n°1967110
drasche
Posté le 18-02-2010 à 10:40:39  profilanswer
 

Tout dépend si la sheet existe, et si les cellules elles-mêmes sont accessibles. Le message d'erreur devrait te donner un indice (et un lien vers l'aide pour les possibles diagnostics).


Message édité par drasche le 18-02-2010 à 10:40:53

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1967152
pepito_mi_​corazon
Posté le 18-02-2010 à 11:41:29  profilanswer
 

L'aide d'excel me raconte des généralités sur le #VALEUR...
 
La sheet existe bien, mais qu'entends tu par cellule accessible ??

n°1967154
drasche
Posté le 18-02-2010 à 11:42:11  profilanswer
 

Quel est le message d'erreur exact? (et le numéro d'erreur)


Message édité par drasche le 18-02-2010 à 11:42:33

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1967156
pepito_mi_​corazon
Posté le 18-02-2010 à 11:44:45  profilanswer
 

C'est pas vraiment une erreur, mon exécution ligne par ligne s'arrête, et toute la partie Variable locales s'efface, mais aucun message avec Erreur n° ...

n°1967166
pepito_mi_​corazon
Posté le 18-02-2010 à 12:09:24  profilanswer
 

OK j'ai résolu le problème, je ne passe pas par un tableau dans une Sheet et tout marche bien ! Merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Procédure Sub OK mais pas Fonction

 

Sujets relatifs
[php] Fonction mail() sous IE8problème affichage totalité fonction flash player dans browser
[python] fonction chr(), ord() et \x01probleme de modele sou firefox mais pas sous IE [voir fin post ]
Sélectionner ligne entière langage word dans fonction javascript[OK] Problème de connexion entre Java (par Eclipse) et MAMP
Mettre à jour une liste en fonction d'une autre[C++] Spécialisation d'une fonction template un peu tordue...
Ajouter case à cocher dans fonction javascript en langage Wordaidez moi : que calcule cette procédure
Plus de sujets relatifs à : Procédure Sub OK mais pas Fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR