cs_edoo82
Messages postés8Date d'inscriptionjeudi 12 juin 2008StatutMembreDernière intervention 4 février 2009
-
12 juin 2008 à 17:39
cs_edoo82
Messages postés8Date d'inscriptionjeudi 12 juin 2008StatutMembreDernière intervention 4 février 2009
-
12 juin 2008 à 21:07
Bonjour,
j'ai un problème pour appeler une fonction qui ne renvoi rien et qui a plusieurs arguments en entrée.
par exemple je veux modifier Tableau1 et Tableau2 dans ma fonction:
Function FonctionQuiModifie(byRef Tableau1, byRef Tableau2)
'je fais des calculs et modifications sur les Tableaux d'entrée
'je n'ai jamais fait FonctionQuiModifie = qqch
End Function
lorsque j'appelle cette fonction je fais
QuiModifie(Tableau1, Tableau2)
mais un message affiche: "Error de compilation Attendu: = "
est-ce qu'il est possible de le faire?
(quand j'utilise seulement un argument ça marche sans problème)
Même preblème avec les sub
j'ai un sub qui recoit les noms (string) de deux fichiers à lire mais à l'appel ne marche pas.
je me suis donc posé la question de la legitimité de ce que je fais.
est-ce que les fonctions "void" existent en VBA?
Merci pour votre aide!!
je serai toujours remerciant!!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 juin 2008 à 18:13
Salut
Ton erreur ne vient pas des tableaux mais de la syntaxe d'appel d'une Sub/Fonction :
QuiModifie Tableau1, Tableau2
ou
Call QuiModifie(Tableau1, Tableau2)
De plus, dans ta déclaration, il faut (toujours) préciser le type de variable.
Exemple :
Private Sub Form_Load()
Dim xx(0) As String
Dim yy(0) As String
xx(0) = "toto"
yy(0) = "kiki"
Debug.Print xx(0), yy(0)
Call FonctionQuiModifie(xx, yy)
Debug.Print xx(0), yy(0)
End Sub
Function FonctionQuiModifie(ByRef Tableau1 () As String , _
ByRef Tableau2() As String)
Dim xx As String
xx = Tableau1(0)
Tableau1(0) = Tableau2(0)
Tableau2(0) = xx
End Function
Pourquoi parles-tu de VBA ?
Ta question porte sur VB6, non ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_edoo82
Messages postés8Date d'inscriptionjeudi 12 juin 2008StatutMembreDernière intervention 4 février 2009 12 juin 2008 à 18:58
Salut Jack,
excuse moi si je me suis trompé, je développe maintenant en VB sous excel (ce sont de macros que je fais), j'ai trouvé tellement des solutions àme problèmes ici que je me suis permis de demander cette question qui me hante despuis qq temps.
si tu veux m'aider en fait le problème est le suivante
j'ai deux tableaux T1, T2 de doubles et line un Long (T1 est une matrice)
les tableaux dependent de la ligne line de excel, dans ma fonction je fais des calculs qui font intervenir des cellules d'excel et les tableaux, cette fonction change la dimension en fait d'un tableau
donc j'ai:
Dim Tab1(1 to 6, 1 to 1) as double
Dim Tab2(1 to 4) as double
j'appelle une fonction qui affecte des valeurs et fais des calcul sur ces tableaux
La fonction est declarée ainsi:
Function TakeValuesFromSheet(ByRef T1() as Double, ByRef T2 as Double, ByVal Line as Long)
'... calculs...
End Function
je voudrais faire un appel du type
TakeValuesFromSheet(Tab1, Tab2, linenumber)
dès que je passe à autre ligne j'ai le message:
"Erreur de compilation Attendu: ="
si je fais
a = TakeValuesFromSheet(Tab1, Tab2, linenumber)
ça fait "bien" le travail, mais j'ai une variable a = 0 qui traine.
est-ce qu'il existe une façon de expliciter un fonction qui ne crache rien?
du type
Function (args as Type) as Void
en fait si tu déclare la fonction aveec seulement un arguments ça marche.