[VBA] Fonction qui ne retourne rien. Possible ?

Fonction qui ne retourne rien. Possible ? [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 12-04-2006 à 09:34:31    

Bonjour, je souhaite dans un programme ajouter une fonction d'affichage d'un tableau (n lignes, 2 colonnes)
 
Probleme, cette fonction ne doit rien revoyer, elle ne fait que copier les valeurs du tableau dans la feuille excel, or, VB n'accepte pas que je lance la fonction seule.
 
voici le code en question :
 

Code :
  1. Private Function Affichage(ByRef Matrice() As Double, ByRef Colonne As Integer)
  2. n = UBound(Matrice, 1)
  3. For i = 1 To n - 1
  4.     Cells(i + 1, Colonne) = Matrice(i, 1)
  5.     Cells(i + 1, Colonne + 1) = Matrice(i, 2)
  6. Next
  7. End Function


 
la fonction passe, mais si dans mon main je lui demande : "Affichage(Mat2004(), 8)" il me dit qu'il n'y a pas de = [:spamafote]  
 
par contre la suite passe tres bien :
 

Code :
  1. Private Function Affichage(ByRef Matrice() As Double, ByRef Colonne As Integer) As Integer
  2. n = UBound(Matrice, 1)
  3. For i = 1 To n - 1
  4.     Cells(i + 1, Colonne) = Matrice(i, 1)
  5.     Cells(i + 1, Colonne + 1) = Matrice(i, 2)
  6. Next
  7. Affichage = 1
  8. End Function


 
en appelant : c = Affichage(Mat2004(), 8)

Reply

Marsh Posté le 12-04-2006 à 09:34:31   

Reply

Marsh Posté le 12-04-2006 à 10:18:39    

Il suffit de remplacer le mot "Function" par "Sub" après "Private", et "End Sub" à la place "End Function" (sauf si VBA le fait tout seul).
Pour de vieilles rasions qui remontent au début de l'informatique, une "function" retourne toujurs une valeur, et une subroutine n'en retourne pas.

Reply

Marsh Posté le 12-04-2006 à 10:28:04    

haaan ...
 
ok :)
 
merci
 
edit : et du coup, comment je lance ce sub dans mon main ?  [:core 666]


Message édité par vinc35 le 12-04-2006 à 10:30:30
Reply

Marsh Posté le 12-04-2006 à 10:33:17    

Si tu as

Private Sub Toto(par1 as string)

alors tu le lances juste par

Toto "truc"


Reply

Marsh Posté le 12-04-2006 à 10:36:22    

Oui, pour appeler une sub ou function, on peut indiquer uniquement son nom sur une ligne.
On peut aussi mettre optionnellement le mot "call" devant ce nom de sub ou de function.
On peut aussi mettre les paramètres entre parenthèses ou utiliser la technique des paramètres nommés.

Reply

Marsh Posté le 12-04-2006 à 10:37:52    

donc voila ce que j'ai :
 

Code :
  1. Private Sub Affichage(ByRef Matrice() As Double, ByRef Colonne As Integer)


 
que je tente de lancer avec :
 

Code :
  1. Affichage(Mat2005(), 8)


 
Et j'ai le droit un magnifique : "Erreur de compilation. Attendu : ="

Reply

Marsh Posté le 12-04-2006 à 10:39:56    

Enlève les parenthèses

Affichage Mat2005(), 8

ou utilise le mot clé Call

Call Affichage(Mat2005(), 8)

La syntaxe diffère entre les functions et les procédures (sub)


Message édité par tegu le 12-04-2006 à 10:41:11
Reply

Marsh Posté le 12-04-2006 à 10:40:17    

je m'auto reponds :
 

Code :
  1. Call Affichage(Mat2004(), 8)


 
marche tres bien, mais pas sans le call
 
en tout cas merci a vous du coup de main

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed