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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Appeler une procédure depuis une fonction !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appeler une procédure depuis une fonction !

n°1968806
pepito_mi_​corazon
Posté le 24-02-2010 à 11:07:03  profilanswer
 

Bonjour à tous,
 
Je débute en VBA. J'ai créé une fonction VBA qui plante au moment où j'essaie de remplir une cellule Excel, avec la commande exemple ActiveWorkbook.Worksheets("Feuil1" ).Range("A5" ).Value = 200000...
 
J'ai donc essayé de contourner le problème en appelant une procédure, et je me suis rendu compte qu'un programme tout basique tel que celui-ci ne marche pas :
 
 
Public Sub remplissage()
ActiveWorkbook.Worksheets("Feuil1" ).Range("A5" ).Value = 200000
End Sub
 
 
Public Function test(t As Double) As Double
Call remplissage
test = t
End Function
 
 
Ma worksheets se nomme bien "Feuil1", et lorque je contrôle mon programme pas à pas, la fonction appelle bien la procédure remplissage, mais dès qu'elle passe la ligne : ActiveWorkbook.Worksheets("Feuil1" ).Range("A5" ).Value = 200000, tout s'arrête sans message d'erreur.... D'ou vient l'erreur ?
 
Merci !

mood
Publicité
Posté le 24-02-2010 à 11:07:03  profilanswer
 

n°1968884
pepito_mi_​corazon
Posté le 24-02-2010 à 13:27:01  profilanswer
 

Un petit UP ^^

 

C'est surement tout bête mais je vois pas.... Et j'ai cherché sur google rien non plus :(


Message édité par pepito_mi_corazon le 24-02-2010 à 13:27:17
n°1968940
SuppotDeSa​Tante
Aka dje69r
Posté le 24-02-2010 à 15:29:37  profilanswer
 

Bonjour
 

pepito_mi_corazon a écrit :

Bonjour à tous,
 
Je débute en VBA. J'ai créé une fonction VBA qui plante au moment où j'essaie de remplir une cellule Excel, avec la commande exemple ActiveWorkbook.Worksheets("Feuil1" ).Range("A5" ).Value = 200000...
 


 
Quel est le message d'erreur ?
La fonction entiere ressemble a quoi ?
 
Cordialement


---------------
Soyez malin, louez entre voisins !
n°1968953
pepito_mi_​corazon
Posté le 24-02-2010 à 16:31:16  profilanswer
 

A la base la fonction est plus complexe, mais j'en ai créé une 2ème plus simple, qui est celle que j'ai copié plus haut, afin de bien mettre en évidence le problème...
 
J'ai donc juste écrit ceci dans un module :
 
Public Sub remplissage()  
ActiveWorkbook.Worksheets("Feuil1" ).Range("A5" ).Value = 200000  
End Sub  
 
 
Public Function test(t As Double) As Double  
Call remplissage  
test = t  
End Function  
 
Je me mets ensuite dans une cellule excel, je tape :test(10), et je devrai avoir cellule concernée=10 et cellule A5=200000....mais j'ai un #VALEUR
 
Aucun message d'erreur...
 
En "étape par étape", tout se déroule bien jusqu'à ce que :
ActiveWorkbook.Worksheets("Feuil1" ).Range("A5" ).Value = 200000  
 
soit surligné en jaune, à la suite de quoi la fenêtre "Variables locales" se vide, et plus rien ne se passe... sans aucun message d'erreur
 
 

n°1969017
galopin01
Posté le 24-02-2010 à 20:31:20  profilanswer
 

bonjour,
Les fonctions ne sont pas faites pour appeler des Sub ni faire quoi que ce soit mais pour renvoyer une valeur...
A+

n°1969092
pepito_mi_​corazon
Posté le 25-02-2010 à 01:05:02  profilanswer
 

Donc si on veut remplir une feuille Excel depuis VBA, c'est forcément à travers une procédure SUB ?
 
En fait je fais ça car les cellules Excel que je souhaiterais remplir depuis VBA vont me servir de RANGE pour une fonction suivante qui prend seulement des range en paramètres... A moins que l'on puisse créer directement des tableau Range intrinsèquement à VBA ?

n°1969128
pepito_mi_​corazon
Posté le 25-02-2010 à 10:07:02  profilanswer
 

D'ailleurs galoping01 je suis pas d'accord avec toi, car si ma procédure est une MSGBOX, ça marche, donc une fonction peut appeler un SUB...le problème vient bien de l'appel Worksheets.range...

n°1969236
pepito_mi_​corazon
Posté le 25-02-2010 à 14:34:36  profilanswer
 

Quelqu'un peut me dire comme on obtient l'indice de la dernière colonne d'un tableau VBA ?  
 
Impossible avec UBound(tableau,2) par exemple car j'ai un tableau intrinsèque à VBA et pas un tableau provenant de Excel.....
 
Ca serait tellement plus simple si toutes les fonctions permettant d'agir sur les tableaux excel marchaient également pour les tableaux VBA........

n°1969530
galopin01
Posté le 26-02-2010 à 08:07:47  profilanswer
 

bonjour,
Tu n'es peut-être pas d'accord mais c'est comme ça quand même !  :D  
Le MsgBox n'étant qu'une exception qui confirme la règle...  :lol:  
D'ailleurs tu n'as pas besoin d'une Sub pour envoyer le MsgBox  
A noter que ce que je dis est vrai pour les Function appelée par une formule Excel. Ce qui était explicite dans ta question.
Il n'en est pas de même pour une Function qui serait appelé par une Sub...
Si l'on prend l'exemple de

Code :
  1. Function CARRE i%)
  2. CARRE = i*i
  3. End Function


 
Appelée depuis une cellule Excel celle-ci plante inévitablement si tu essaies de lui faire appeler une Sub :

Code :
  1. Function CARRE(i%)
  2. test
  3. CARRE = i * i
  4. End Function
  5. Sub test()
  6. Range("A4" ) = 10
  7. End Sub


 
En revanche il est parfaitement possible d'appeler la fonction depuis une autre Sub

Code :
  1. Sub Autre()
  2. Range("A5" ) = CARRE(2)
  3. End Sub


... mais elle ne fonctionnera pas en tant que fonction dans une cellule Excel !
 
Pour la deuxième question, je ne comprend pas : reformuler la question explicitement !  
A+


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

  Appeler une procédure depuis une fonction !

 

Sujets relatifs
Fonction "copier/coller des champs" dans un formulaireProcédure Sub OK mais pas Fonction
[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 ]
appeler une feuille externe avec VBASélectionner ligne entière langage word dans fonction javascript
Mettre à jour une liste en fonction d'une autre 
Plus de sujets relatifs à : Appeler une procédure depuis une fonction !


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