Appel à une fonction modifiant ses arguments

cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009 - 12 juin 2008 à 17:39
cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Derniè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!!
   

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Derniè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.

Enfin...

merci si tu as des idées.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 juin 2008 à 19:15
Lis ce que je t'ai écris, la réponse est dedans.
Il ne faut pas de parenthèses si tu ne mets pas de Call ou de "a = " devant le nom de la fonction

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)
0
cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009
12 juin 2008 à 19:19
Un Grand Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
12 juin 2008 à 21:01
salut,

juste pour dire, (même si ça fonctionne), une fonction est censé te retourner une valeur. Dans ce cas présent, j'emploierai plutôt une Sub

++
0
cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009
12 juin 2008 à 21:07
C'est noté merci
0
Rejoignez-nous