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 :

Call sub contenant une variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 15
    Par défaut Call sub contenant une variable
    Bonjour à tous, je sollicite votre aide car je suis coincé dans un petit programme, et ayant recherché sans succès, je m'en remet à ce forum.

    Je suis débutant en VBA et donc ce souçi pourra paraître simple pour certains:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub Recherche()
    Dim Mois As String, Metier As String
    Mois = InputBox("Entrez le mois que vous voulez")
    Metier = InputBox("Entrez le métier que vous voulez voir")
    Call Personnes_physiques_&Metier&_&Mois&
    End Sub
    La partie dans Call est fausse, mais c'est pour vous permettre de comprendre ce que j'essaye de faire.
    Le genre de procédure que je pourrais vouloir appeler selon les paramètres renseignés serait :
    'Personnes_Physiques_Chauffeur_Septembre' par exemple, sachant que ces procédures existent déjà : Il y a les 12 mois et des métiers différents.
    Je n'arrive pas à les appeler de cette manière.

    Merci de votre aide

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 548
    Par défaut
    Bonjour

    Télécharge http://bidou.developpez.com/article/VBA/ et regarde à partir de la page 29 le passage d'arguments

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 15
    Par défaut
    Merci, donc je dois déclarer une fonction qui prend en paramètres le mois et le métier que je déclare en string, je les concatène à l'intérieur et le résultat de la fonction je le déclare en quoi ?
    Et comment utiliser ensuite ce résultat pour concaténer la partie "Personnes_physiques" dans la procédure après, car je reçois que des messages d'erreur ?

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 548
    Par défaut
    Bonjour

    Le but des arguments est d'éviter d'écrire 10 fois la même procédure : une seule procédure reçoit le métier et le mois et traite en conséquence

    Donc tu dois avoir une procédure
    Sub Personnes_physiques(Metier as string, Mois as string)

    appelée par la Sub Recherche() de cette façon
    Call Personnes_physiques(Metier, Mois)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 15
    Par défaut
    Merci de ton aide, je m'approche de la solution mais j'ai encore quelques problèmes:
    Je tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Sub StringtoVar(ByVal Metier As String, ByVal Mois As String)
    StringtoVar = "Personnes_physiques_" & Metier & "_" & Mois & ""
    End Sub
     
    Public Sub Recherche()
    Dim Mois As String, Metier As String
    Mois = InputBox("Entrez le mois que vous voulez")
    Metier = InputBox("Entrez le métier que vous voulez voir")
    Call StringtoVar(Metier, Mois)
    End Sub
    Comment puis-je corriger pour que celà fonctionne ? Merci

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    tu mélanges les procédures et les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function StringtoVar .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function StringtoVarr(ByVal Metier As String, ByVal Mois As String)
    StringtoVar = "Personnes_physiques_" & Metier & "_" & Mois & ""
    End Sub
     
    Public Sub Recherche()
    Dim Mois As String, Metier As String
    Mois = InputBox("Entrez le mois que vous voulez")
    Metier = InputBox("Entrez le métier que vous voulez voir")
    Call StringtoVar(Metier, Mois)
    End Sub
    vois les liens des tutos qui t'ont été donnés..

    pour répondre, juste techniquement, à ta question initiale, il est possible d'utiliser la méthode Application.Run dont on se sert souvent pour appeler des procédures d'un autre classeur, vu qu'elle peut utiliser des strings en paramètres, c'est bon genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub gogo()
    strMaString
     
    strMaString = "Boulot" & "DecembreTourneur"
    Application.Run strMaString
    End Sub
     
    Sub BoulotDecembreTourneur()
    MsgBox "Bravo"
    End Sub
    Par contre ça ne veut pas dire que ce soit la bonne piste à utiliser
    des paramètres et des select case sont surement effectivement plus adaptés..

    cordialement,

    Didier

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 15
    Par défaut
    Merci je progresse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Function StringtoVar(ByVal Metier As String, ByVal Mois As String)
    StringtoVar = "Personnes_physiques_" & Metier & "_" & Mois
    End Function
     
    Public Sub Recherche()
    Dim Mois As String, Metier As String, Subappelee As Variant
     
    Mois = InputBox("Entrez le mois que vous voulez")
    Metier = InputBox("Entrez le métier que vous voulez voir")
    Subappelee = StringtoVar(Metier, Mois)
    Call Subappelee
    End Sub
    Stringtovar concatène bien les chaînes que je lui donne (j'ai testé avec une messagbox)
    Maintenant comment expliquer à VBA que je veux appeler la procédure que forme la concaténation ? Là le code bloque à car il me dit "Sub , function ou property attendue".
    Peut être qu'il faut que je mette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public Function StringtoVar(ByVal Metier As String, ByVal Mois As String)
    as quelquechose
    Je ne sais pas quoi mettre même en cherchant :-(

  8. #8
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 548
    Par défaut
    Bonjour

    Relis mon post et l'extrait de Didier

    Citation Envoyé par Ormonth Voir le message
    ...
    Par contre ça ne veut pas dire que ce soit la bonne piste à utiliser
    des paramètres et des select case sont surement effectivement plus adaptés...
    Revois tes n procédures (x métier X 12 mois) pour en avoir une générique.
    Comment feras-tu si tu dois croiser une 3ème variable ?
    C'est ingérable cette méthode même si, comme l'a décrit Didier, on peut concaténer un nom de procédure ou de fonction.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 15
    Par défaut
    Oui c'est mieux mais le souci c'est que je dois affecter ces macros à des zones de texte, chaque zone prend une macro.
    Je ne sais pas si je pourrais affecter chaque zone à une seul macro générique qui prenne des paramètres différents selon les zones ?
    En tout cas je m'en tiens à ce que je fais, même si je n'ai pas pu résoudre mon problème initial, je vous remercie de vos réponses.

  10. #10
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 548
    Par défaut
    Bonjour

    Oui on peut traiter des cas différents selon la zone.

    Si c'est un évènement, Target est la plage source : selon son adresse un Select Case peut faire des choses différentes...

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

Discussions similaires

  1. Requête au sein d'une fonction contenant une variable
    Par hel22 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/07/2007, 13h03
  2. Actualiser une zone de texte contenant une variable
    Par moromain dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/06/2007, 09h11
  3. [VBA-E] Chemin d'accès contenant une variable
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2007, 11h42
  4. [VBA-E] chemin d'acces contenant une variable
    Par surfeuse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/06/2006, 10h07
  5. [ADO] requete contenant une variable ?
    Par kam dans le forum MFC
    Réponses: 9
    Dernier message: 28/04/2004, 11h08

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