IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

macro et fonction [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut macro et fonction
    Bonjour,

    Au vu de ce que je cherche à faire (un tableau dan lequel je dois envoyé des données de textbox en paramètres), je risque de devoirs faire une fonction.

    D'après ce que j'ai lu, les fonctions sont écrites dans des modules et ensuite toujours dans le module appelés dans les instructions d'un sub qqchose().

    Est-il possible d'appelés une fonction dans le code d'un usf et de passer des paramètres se situant dans des blocs de codes différents (4 textbox différentes)?

    Bien entendu si oui, comment?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Oui, il suffit de donner une portée 'Public' à ta fonction.

    Quant aux arguments, aucun problème pour les passer tant qu'ils existent dans l'espace depuis lequel tu appelles ta fonction je pense.

    Donc si tu appelles ta fonction située dans un module depuis un userform et que tu veux lui passer tes textbox en arguments, ça devrait marcher si tu appelles la fonction depuis le userform.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    En fait j'étais plutôt partis sur le passage de mes texbox dans une variable string
    puis appeler le(s) string.

    En fait mes string on été déclaré en public parce que je les utilisais ailleurs mais dans ma fonction j'ai mis un paramètre que j'utilise même pas (intérêt = 0)donc c'est sur ça va foirer.

    Par contre, je vois pas comment appeler ma fonction (vu dans un tuto du forum ou la fonction est appelé dans un sub) mais surtout ou la mettre.
    donc voilà une partie du code dans lequel je pense appelé ma (mes fonction(s)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub TextBox_ht_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        
        'Si la valeur de textbox_ht est un nombre sans virgule alors on rajoute la virgule et deux 0
        Dim vResult_ht As Variant, montant As String
    
        
        If TextBox_ht.Value = "" Then
        Else
            'vResult_ht = Replace(TextBox_ht.Value, ".", ",")
            'vResult_ht = CDbl(vResult_ht)
            vResult_ht = CDbl(Val(TextBox_ht.Value)) 'passage d'une chaine string en une valeur de type double si un nombre est rentré dans la textbox
            TextBox_ht = IIf(IsNumeric(vResult_ht), Format(vResult_ht, "###0.00"), "")
            TextBox_ht = Replace(TextBox_ht, ",", ".")
        End If
       
        If (OptionButton_lot.Value = True) Then
          min_max (montant_ht) 'changer pour une fonction
        ElseIf (OptionButton_bon_commande.Value = True) Then
            min_max() = montant_ht 'changer pour une fonction
        Else
            montant_ht = TextBox_ht 'changer pour une fonction
        End If
        
    End Sub

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Avec une portée 'Public' tu peux la mettre dans le module que tu veux, elle sera appelable de n'importe où.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    La question c'est comment l'appeler, une fois que tu sais comment l'appeler ta fonction tu peux la mettre "où tu veux".

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Euh oui...disons pour l'exemple que j'écrive ma fonction dans un module perso. Dans ce module j'aurais donc seulement ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function maFonction(    ) As Sth
     
    End Function
    Et dans n'importe quelle autre module, userform...:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub maProcedure(   )
     
    [...]
     
    maVariable = maFonction(   )
     
    [...]
     
    End Sub

    ...mais je ne suis pas sûr qu'on se comprenne bien.

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    Si si c'était bien ce que je voulais savoir

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    En complément de Sclarckone

    La fonction attend 4 paramètres et retourne un string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function maFonction(str1 as string, str2 as string, str3 as string, str4 as string) As string
     
    ....
     
    End Function
    que j'utilise dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub maProcedure(   )
     
    [...]
     
    maVariable = maFonction(Textbox1.Text,Textbox2.Text,Textbox3.Text,Textbox4.Text)
     
    [...]
     
    End Sub

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Et je me permets d'ajouter, puisque dans une autre discussion tu expliquais que tu as un nombre variable de textbox, que tu peux déclarer certains arguments comme optionnels (avec le mot clé 'Optional').

    Si mes souvenirs sont bons tu pouvais avoir besoin d'en utiliser 2,3 ou 4 donc tu peux déclarer ta fonction comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function maFonction (str1 As string, str2 As string, Optional str3 As string, Optional str4 As string) As string

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Et si on ne connaît pas à l'avance le nombre d'arguments à passer à la fonction, il suffit alors de lui passer un tableau sur lequel elle travaillera en cherchant avec Ubound(Tbl) la borne supérieure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Public Function MaFonction(Tbl() As String) As String
     
        Dim Mot As String
        Dim I As Integer
     
        For I = 1 To UBound(Tbl)
            Mot = Mot & " " & Tbl(I)
        Next I
     
        MaFonction = Mot
     
    End Function
     
    Sub test()
     
        Dim Tbl(1 To 5) As String
     
        Tbl(1) = "1er mot"
        Tbl(2) = "2ème mot"
        Tbl(3) = "3ème mot"
        Tbl(4) = "4ème mot"
        Tbl(5) = "5ème mot"
     
        MsgBox MaFonction(Tbl)
     
    End Sub
    Hervé.

  11. #11
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    Merci pour tout ça que je vais essayer.

    Dans mon cas une msgbox ne sert pas.

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Le MsgBox est un exemple pour voir le retour de fonction ! A toi d'adapter la récup.

    Hervé.

  13. #13
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    une fonction est-elle obligé de renvoyé un résulat qu'il apparaisse dans une variable une msgbox ou autre?

    En fait je vaux faire une remise à zéro de mes textbox et des chaînes qui ont été remplit durant l'exécution de ma macro.

    A moins qu'une fonction existe déjà.

  14. #14
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    On utilise une fonction quand attend un résultat ou une information en retour de son exécution.
    Si le but est uniquement de faire des actions sans attente de retour d'information, une procédure est plus adaptée (Sub)

  15. #15
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    Je suppose que l'appel et la définition du sub sont semblables?

    Finalement j'ai fait le bourrin.

    Merci pour le coup de main

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 15h13
  2. [Macro] Exécuter une macro en fonction d'un contrôle
    Par sugan dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/10/2006, 16h02
  3. Macro en fonction d'une sélection de plage de cellules.
    Par Labiche dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/08/2006, 10h23
  4. [VBA-E] macro avec fonction "TRANSPOSE"
    Par Ardeciel dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 12/06/2006, 16h11
  5. choix entre macro et fonction
    Par remi77 dans le forum C
    Réponses: 4
    Dernier message: 22/10/2003, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo