Pramettres en VB macro excel

Bonjour,

comment on fait pour passer un paramettre a un sub ou a une fonction ?

sub toto()
...
truc(TT,YY)
....
end sub

fonction truc(gfdgfd,gfgd)
....
end fonction ???

merci

12 réponses

  1. Salut,

    Un petit exemple inutile mais juste pour illustrer ;-))
    Sub ma_sub_1()
       Call ma_sub_2("world")
    End Sub
    
    Sub ma_sub_2(mon_param)
      MsgBox ("hello " & mon_param)
      MsgBox (ma_func1(5, 9))
    End Sub
    
    Function ma_func1(param1, param2)
      ma_func1 = param1 + param2
    End Function
    


    @+
    Nebulus
    En route pour de nouvelles aventures !
    0
    1. Modérateur
      salut, petit exemple...

      Private Sub GetTotal()
         Dim curTotal As Currency
         Dim sngDisc As Single
      
        ................................
      
         Call SalesTax(curTotal, sngDisc)
      End sub
      
      Public sub salesTax(curTotal As Currency, sngRateDisc As single)
          Dim intMsg As Integer
       .....................................
      
         intMsg = MsgBox("Taxation Totale : " & curTotal)
      
      
      End sub
      
      
         


      voilà, ça veut pas dire grand chose, mais c'est la technique...

      Le nom des variables passées ne doit pas correspondre forcément au nom des arguments reçus, par contre le type des données doit être identique.

      Il existe deux méthode de passage d'arguments, par référence et par valeur. Par référence étant la méthode par défaut, ce qui signifie que la procédure appelée peut modifier les arguments de la procédure appelante. L'autre méthode étant le passage par valeur, la procédure appelée ne peut pas modifier les arguments. La signature de la méthode est différente...

      Public sub salesTax(ByVal curTotal As Currency, ByVal sngRateDisc As single)


      voilà 8)

      ChoubaPostor 10000 :
      Le soulèvement des modos.
      0
      1. Modérateur
        oups, sorry, j'ai été un peu lent sur le coup

        ChoubaPostor 10000 :
        Le soulèvement des modos.
        0
    2. bon ben ca marche pas terrible j'ai oublié un truc ?

      Sub toto()
      nom = "BX"
      coment = "HS"
      datage (nom_serveur)
      End Sub

      Function datage(veur As String)
      For x = 2 To 100
      If Cells(1, x).Value <> "" Then
      If Cells(1, x).Value = veur Then
      Cells(Day(Date) + 1, x).Value = Date
      Cells(Day(Date) + 1, x).Select
      If commentaire <> "" Then
      Selection.Interior.ColorIndex = 37
      End If
      End If
      End If
      Next x
      End Function

      ca ca marche

      Sub toto()
      nom_serveur = "BX"
      coment = "HS"
      datage (nom,coment)
      End Sub

      Function datage(veur As String, commentaire As String)
      For x = 2 To 100
      If Cells(1, x).Value <> "" Then
      If Cells(1, x).Value = veur Then
      Cells(Day(Date) + 1, x).Value = Date
      Cells(Day(Date) + 1, x).Select
      If commentaire <> "" Then
      Selection.Interior.ColorIndex = 37
      End If
      End If
      End If
      Next x
      End Function

      comment on fait pour passer 2 paramettres a une fonction ?
      0
      1. Modérateur
        ça ? ça marche?

        datage (nom_serveur, coment)


        ChoubaPostor 10000 :
        Le soulèvement des modos.
        0
    3. oups erreur de nom de variables,
      mais la ca marche pas si je mets un deuxieme paramettre
      la ligne
      datage(nom_serveur,coment) repond "syntaxe erreur"

      alors qu'elle marche avec un seul des paramettres pourquoi ?
      0
      1. autant dire que
        datage (nom_serveur, coment) -> syntaxe erreur
        avec la ligne :
        Function datage(veur As String, commentaire As String)

        alors que datage (nom_serveur) marche avec la ligne
        Function datage(veur As String)

        donc je comprend pas pourquoi
        0
        1. Modérateur
          il est fort possible que le problème se trouve au coeur même de ta mfonction datage, dans ton premier essai où "commentaire" est testé, je ne vois pas à quoi celà fait référence. alors que dans le deuxième essai, commentaire est passé en argument, et là ça foire.. Je pense donc que le problème vient de là..

          ChoubaPostor 10000 :
          Le soulèvement des modos.
          0
          1. non c'est pas le probleme commentaire fixé a la main (donc 1 seul parametre) ca marche

            si je passe le paramettre ca marche pas

            c'est donc bien la syntaxe

            nomdefonction(arg,arg) qui n'est pas bonne...
            0
            1. En déclarant la fonction comme ceci :
              Function datage(veur, commentaire)
              (donc sans les "as string") ça passe non ?

              @+
              Nebulus
              En route pour de nouvelles aventures !
              0
              1. non plus
                c'est pareil des que je tape
                datage(XXXXXXX,YYYYYYY) ca repond syntaxe erreur
                meme sans mettre de variable dedant mais directement des valeurs c'est pareil :

                une function ne doit pas pouvoir se lancer comme une fonction
                x=datage(tttt,fffff)
                passe en syntaxe
                mais biensur ne peut pas s'executer correctement

                donc la syntaxe c'est autre chose .....
                0
                1. j'ai trouvé c'est comme ca

                  Function datage(serveur, commentaire)
                  For x = 2 To 100
                  If Cells(1, x).Value <> "" Then
                  If Cells(1, x).Value = serveur Then
                  Cells(Day(Date) + 1, x).Value = Date
                  Cells(Day(Date) + 1, x).Select
                  If commentaire <> "" Then
                  Selection.Interior.ColorIndex = 37
                  End If
                  End If
                  End If
                  Next x
                  End Function

                  Sub toto()
                  nom_serveur = "DI"
                  coment = "TEST"
                  Call datage(nom_serveur, coment)
                  End Sub

                  en fait c'est parceque cette merde d'excel ne sait pas appeler une fonction comme un mot clé...

                  apres la 11eme version ....

                  bref encore à cause de la logique M$ ...
                  Je veux rebosser sur des projets unix .....ouinnnnn....j'aurrai jamais du accepter de donner un coup de main sur ce tableau excel
                  0