Call fonction avec arguments en vba ?

Résolu
printfx000 -  
moiced59 Messages postés 1161 Statut Membre -
Bonjour,

j'ai un problème avec la fonction call en vba. Mon code est le suivant:

Private Function Gauche(x As Integer, y As Integer)

If Cells(x, y - 1) = "" Then
Call Gauche(x, y - 1)
End If

End Function

Sub Macro1()
Dim x, y As Integer
x = 1
y = 10
Call Gauche(x, y)
Cells(x, y).Select
End Sub

A chaque execution, j'ai le message: Type d'argument ByRef incompatible.

Pourriez vous m'aider, svp ?

11 réponses

  1. moiced59 Messages postés 1161 Statut Membre 60
     
    Bonjour

    Dans ta fonction tu reappel ta fonction c pas terrible comme facon de faire tu devrai plutot faire une boucle.

    ton but est de trouver la derniere colonne ecrite de la 1 ere ligne ?
    0
  2. printfx000
     
    en fait, je compte faire une fonction recursive. pour le moment, le but de la fonction n'a pas trop d'importance, c'est juste pour l'exemple.

    Mon problème, c'est que j'arrive pas à rentrer dans ma fonction lors de l'instruction Call.

    Comment faire ?
    0
  3. moiced59 Messages postés 1161 Statut Membre 60
     
    Bah t deja dedans tu n'a cas bouclé au lieu de faire un appel de celle ci !!!

    Private Function Gauche(x As Integer, y As Integer)
    Do While Cells(x, y - 1) = ""
    y = y - 1

    Loop
    End Function

    Sub test()
    Dim test As Variant
    test = Gauche(1, 10)

    End Sub
    0
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Très bien de te lancer dans la récursivité, mais au préalable, pose ton problème.
    Exemple de récursivité avec la une simple addition des nombres de 10 à 1 :
    Private Function Addition(x As Integer) As Integer
      If x = 0 Then
         Addition = 0
        Else
         Addition = Addition(x - 1) + x 'la récursivité se trouve ici!!!
       End If
    End Function

    Et la macro d'appel correspondante :
    Sub AppelMaFonction()
    Debug.Print Addition(10)
    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Paf
     
    bonjour

    pour le message d'erreur Type d'argument ByRef incompatible, dans ta macro modifie la déclaration des variables comme ceci:
    Dim x As Integer 
    Dim y As Integer 
    

    bonne suite
    0
  7. printfx000
     
    J'ai réussi à résoudre mon problème.
    Il fallait que je déclare une variable de type variant et que je l'initialise avec ma fonction pour que ça marche.
    (ex: Move=Fonction(x,y)).

    Sinon, un dernier truc sans rapport particulier avec ce qui est été dit précédemment: savez vous s'il existe une fonction en vba permettant de stopper ou d'arrêter l'execution de la macro en cours ?
    0
  8. moiced59 Messages postés 1161 Statut Membre 60
     
    un exit sub arrete la macro
    0
  9. printfx000
     
    Merci de ta réponse.
    J'ai essayé, mais on m'affiche un message du type 'Exit Sub' inutilisable dans une fonction ou une procédure.

    Or, il faudrait que j'arrête le macro si ma condition dans ma fonction est vérifié ... Y'a t'il un autre moyen ?
    0
  10. moiced59 Messages postés 1161 Statut Membre 60
     
    Tu parle dans ta fonction ou macro ?

    si c dans ta fonction c'est exit function
    0
  11. printfx000
     
    C'est bien exit function. Merci beaucoup.
    0
  12. moiced59 Messages postés 1161 Statut Membre 60
     
    ;) @ + sur CCM
    0