Appel à une fonction modifiant ses arguments

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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
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)
Messages postés
8
Date d'inscription
jeudi 12 juin 2008
Statut
Membre
Dernière intervention
4 février 2009

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
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)
Messages postés
8
Date d'inscription
jeudi 12 juin 2008
Statut
Membre
Dernière intervention
4 février 2009

Un Grand Merci!
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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

++
Messages postés
8
Date d'inscription
jeudi 12 juin 2008
Statut
Membre
Dernière intervention
4 février 2009

C'est noté merci