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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2008
    Messages : 44
    Points : 19
    Points
    19

    Par défaut Executer un sub depuis un autre classeur

    Bonjour à tous,

    Pour vous poser un peu le décors.

    J'ai un classeur qui contient plusieurs feuilles, avec plusieurs fonctions vba pour faire différentes actions.
    La fonction la plus importante il s'utilise de la manière suivante :
    - L'utilisateur renseigne une référence dans une textbox dans une feuille
    - L'utilisateur clique sur un bouton
    - Une userform s'ouvre et est préremplie par du code vba
    - L'utilisateur clique sur un bouton dans la userform
    - Une nouvelle feuille s'ouvre et des données sont inscrites dedans

    Ce classeur et les différentes fonction marchent bien comme prévues et tout va bien. Mais maintenant je dois valider ce logiciel. Pour cela je dois entrée dans la textbox une série de références, effectuées les actions que doit faire l'utilisateur et récupérer les résultats pour les comparer aux résultats attendus.
    Pour faire cela j'ai opté pour la création d'un autre classeur qui contient les données d'entrées, les données de sorties attendues et qui comparera le tout. Donc je dois dans ce nouveau classeur automatisé toute cette validation.

    Et c'est là que ça ce complique, en gros mon soft de validation doit :
    1- Ouvrir le classeur à tester.
    2- Se positionner sur la première feuille
    3- Renseigner la textbox avec une référence
    4- Simuler un clique sur le bouton de la feuille
    5- Attendre l'ouverture de la userform
    6- Simuler un clique sur le bouton de la userform
    7- Attendre la fin du remplissage de la nouvelle feuille
    8- Récupérer les données de la feuille tout juste créée
    9- Les comparées avec les données attendues
    10- Me sortir un résultat

    Pour les 3 premiers points pas de soucis par contre pour ce qui est de simuler le clique sur le bouton je sèche un peu.

    Du coté logiciel à testé, dans la Feuil 1, j'ai la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub CommandButtonRechercher_Click()
    ...
    End Sub
    Du coté du logiciel de validation j'essai d'appeler cette fonction de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Extract_BOM(Wb_Configurateur As Workbook, RefaTester As String, OutputCell As Range)
     
    Dim Ws_Menu As Worksheet
    Dim Ws_Article As Worksheet
     
    Set Ws_Menu = Wb_Configurateur.Worksheets("MENU")
    Ws_Menu.Activate
     
    Ws_Menu.OLEObjects("TextBoxRechercher").Object.Value = RefaTester
    Application.Run "'Configurateur IRIO vWork.xlsm'!CommandButtonRechercher_Click"
     
    End Sub
    Mais l'instruction Application.Run ne fonctionne pas. J'ai l'impression que ca ne marche que pour les macros pas les subs, ou alors il faut que la fonction dans un module pas dans une feuille, bref je ne sais pas trop.
    Auriez-vous des idées ?

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    12 649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 12 649
    Points : 25 861
    Points
    25 861

    Par défaut

    Citation Envoyé par Coco47 Voir le message
    - Simuler un clique sur le bouton de la feuille
    Pour ne pas faire plus simple en appelant la macro déclenchée par ce bouton ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2008
    Messages : 44
    Points : 19
    Points
    19

    Par défaut

    Salut Menhir,

    en fait c'est exactement ce que je fais mais par contre il semble que je n'ai pas le droit d'appeler un sub d'une feuille depuis un autre classeur donc je suis passé par un sub défini dans module 1 qui lui même appelle le sub de la feuille. Le sub du module 1 semble lui par contre pouvoir être appelé par un autre classeur.

    Donc mon code a évoluer de la sorte.
    Classeur a tester / Feuil 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub CommandButtonRechercher_Click()
    ...
    End Sub
    Classeur a tester / Module 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub SimulClickRecherche()
     
        Call ThisWorkbook.Worksheets("MENU").CommandButtonRechercher_Click
     
    End Sub
    Classeur de validation :
    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
    Private Sub Extract_BOM(Wb_Configurateur As Workbook, RefaTester As String, OutputCell As Range)
     
    Dim Ws_Menu As Worksheet
    Dim Ws_Article As Worksheet
     
    Wb_Configurateur.Activate
     
    Set Ws_Menu = Wb_Configurateur.Worksheets("MENU")
     
    Ws_Menu.Activate
     
    Ws_Menu.OLEObjects("TextBoxRechercher").Object.Value = RefaTester
    'Wb_Configurateur.UserFormConfig.showmodal = False
    Application.Run "'Configurateur IRIO vWork.xlsm'!SimulClickRecherche"
     
    End sub
    Maintenant que j'en suis là j'ai un nouveau problème avec le point 6.

    Lorsque la userform est ouverte elle possède la propriété showmodal à true. Donc l’exécution de mon code se se poursuis pas jusqu'à la fin de la fermeture de la userform.
    J'essai donc de modifier la propriété showmodal de la userform par mon code pour la mettre a false, mais je n'y arrive pas...

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Rédacteur technique
    Inscrit en
    décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : décembre 2017
    Messages : 4
    Points : 8
    Points
    8

    Par défaut

    Normal, il n'existe pas de propriété "showmodal" pour les userform (à ma connaissance).
    Tu décides si ton userform est à afficher en modal ou non modal en jouant avec l'argument "modal" de la méthode show.

    Syntaxe correcte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UserFormTrucMuche.Show (0)
    Ou, plus lisible:
    UserformTrucMuche.Show (vbModeless)

Discussions similaires

  1. [XL-2010] Executer une macro depuis un autre classeur
    Par debdev dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/05/2011, 13h28
  2. [SQL2000] Executer une PS depuis une autre istance SQL
    Par David.V dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/02/2008, 12h37
  3. Executer une macro dans un autre classeur
    Par nautygirl dans le forum Général VBA
    Réponses: 2
    Dernier message: 30/07/2007, 15h34
  4. [VBA-E] enregistrer un classeur excel depuis un autre classeur
    Par roseau dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/03/2007, 15h15
  5. Appel d'un Formulaire depuis un autre classeur
    Par philmonnery dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/07/2006, 11h03

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