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 :

Creation et appel de fonction avec parametre


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Creation et appel de fonction avec parametre
    Bonjour,

    Je souhaiterais a partir d'un programme principal, faire appel a une fonction avec un worksheet en entree. De cette maniere je pourrais faire les modifications sur plusieurs worksheet avec une seule fonction.

    Merci de me donner la bonne syntaxe

    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
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
     
    Sub Modfication(ws As Worksheet)
    'modifications on ws......
    End Sub
     
    Sub Main()
    Set ws1 = Worksheets("Feuil1")
    Set ws2 = Worksheets("Feuil2")
     
    Modfication (ws1)
    Modfication (ws2)
     
    End Sub
    merci encore

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    si c'est une fonction que tu veux faire, il faut faire une fonction et non une procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function Modfication(ws As Worksheet)
    'modifications on ws......
    End Function
    Jérôme

  3. #3
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Citation Envoyé par jfontaine
    si c'est une fonction que tu veux faire, il faut faire une fonction et non une procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function Modfication(ws As Worksheet)
    'modifications on ws......
    End Function
    Je ne crois pas. Par définition, une fonction retourne une valeur. À moins que gregounet (mignon le pseudo) désire avoir une réponse du genre True si l'opération est réussie et False si ça a foiré quelquepart. Pas très parlant. Ou encore en gérant les code d'erreur... mais ça peut tout aussi bien se faire dans une procédure (sub).

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    tu peux essayer sous cette forme, ça marche, j'ai testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Modfication(ws)
    Set u = Worksheets(ws)
    u.Cells(1, 1) = u.Name
    End Sub
     
    Sub Main()
     choix = InputBox("choisir_n°_de_feuille")
     choixws = "feuil" & choix
    Modfication (choixws)
    End Sub
    naturellement, c'est le principe, a toi de voir pour les déclarations et les erreur si la saisie n'est pas bonne dans l'inputbox

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci a toutes et a tous de votre rapidite de reponse !

    D'apres ce que vous me dite, je vais utiliser une procedure car je n'ai pas besoin de retourner une valeur.

    En ce qui concerne mes procedures, j'ai une erreur quand j'appelle la procedure: Run-time error '438'. Je pense que j'ai un probleme de declaration
    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
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet 
    Dim u As Worksheet 
     
    Sub Modfication(ws)
    Set u = Worksheets(ws)
    'modifications sur u
    End Sub
     
    Sub Main()
     
    Set ws1 = Worksheets("Feuil1")
    Set ws2 = Worksheets("Feuil2")
     
    Modfication(ws1)
    Modfication(ws2)
     
    End Sub
    Merci beaucoup

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    J'ai dans une de mes applications, le même besoin que toi.
    Mais au lieu de passer en paramètre la feuille, je passe le nom de la feuille.
    Jérôme

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Pourrais-je avoir un exemple stp ?

    merci

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Voila un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub test(ByVal NomFeuille As String)
     
    With Sheets(NomFeuille)
     
        'Modifications
     
    End With
     
    End Sub
    Jérôme

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Dans un module, les déclarations sont à placer dans la macro ou bien tu les déclares en Public, auquel cas tes feuilles seront reconnues dans toute les modules de l'appli, y compris dans les userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public ws1 As Worksheet
    Public ws2 As Worksheet 
    Public u As Worksheet 
    Sub Main()
    Set ws1 = Worksheets("Feuil1")
    Set ws2 = Worksheets("Feuil2")
    ...
    Sinon, tu les déclares dans la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Main()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set ws1 = Worksheets("Feuil1")
    Set ws2 = Worksheets("Feuil2")
    ...
    Là l'instance ne sera reconnue que dans la sub ou la fonction que tu appelles avec ws1 ou ws2 en paramètre.
    Par contre, ta syntaxe serait ok pour un userform, si tu déclarais ça en tête de la page de code d'un userform. Tes instances seraient valables dans toutes les sub de l'userform en question.
    A+

    Edit
    Une autre erreur : Supprime les parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Modfication ws1
    Modfication ws2
    ou bien utilise Call
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Call Modfication(ws1)
    Call Modfication(ws2)

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci a tous et a toue de votre efficacite

    Pour finaliser et valider la reponse, je corrige mon code:
    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
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet 
     
    Sub Modification(ws)
    ws.Select
    'modifications sur ws ex: Cells(1, 1) = 9
    End Sub
     
    Sub Main()
     
    Set ws1 = Worksheets("Feuil1")
    Set ws2 = Worksheets("Feuil2")
     
    Modification ws1
    Modification ws2
     
    End Sub
    A bientot

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

Discussions similaires

  1. Appel de fonction avec parametre dans un setTimeOut
    Par jfv.work dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/01/2012, 17h16
  2. Appel de fonction avec parametre dans fonction
    Par VooDooNet dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 03/05/2010, 18h40
  3. [debutant] Appel de fonction avec parametre undefined
    Par Jean_pierre dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/03/2009, 21h38
  4. Appeler une fonction avec un tableau en parametre ?
    Par devoluti0n dans le forum C++
    Réponses: 9
    Dernier message: 11/04/2008, 16h21
  5. appel d'une fonction avec parametre.
    Par rollernox dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2006, 23h07

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