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 :

VBA - Ouverture d’un Userform depuis un autre classeur [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut VBA - Ouverture d’un Userform depuis un autre classeur
    Bonjour à tous,

    Je n’ai trouvé aucune réponse sur les différents forums que j’ai parcourus, donc je me lance :
    J’ai deux classeurs 1 et 2. J’ai une Userform appartenant au classeur 2, comportant une Textbox dans laquelle l’utilisateur doit saisir un nombre.
    Je souhaite qu’au changement d’une cellule A dans le classeur 1, le numéro qui est stocké dans la cellule B du classeur 1 soit « pré-saisi » dans le Textbox (qui n’est pas dans ce classeur, donc).
    Pour l’instant j’ai la macro qui se déclenche à la modification de la cellule et qui ouvre le classeur 2 s’il n’était pas ouvert, l’affiche sinon. Cette macro fait appel à une seconde macro qui devrait normalement faire afficher la Userform et c’est là que se pose mon problème (j’ai essayé Application.Run mais sans résultat)
    Merci d’avance pour votre aide !

    Guillaume

    Je vous joints la partie du code qui fonctionne :

    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
     
    Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("M4:M250")) Is Nothing Then
            If Target.Value = "Bloqué" Then
                MsgBox "BlaBla", vbOKOnly, "Bla"
                Num = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=-12).Value
                FichierOuvert = False
                For Each Fichier In Workbooks
                    If Fichier.Name = "Classeur2.xlsm" Then
                        FichierOuvert = True
                    End If
                Next
                    If FichierOuvert = True Then
                        Workbooks("Classeur2.xlsm").Activate
                    Else
                        Set WbkSaisie = Workbooks.Open(Filename:="Chemin\Classeur2.xlsm")
                        WbkSaisie.Activate
                    End If
            End If
        End If
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Guillaume56,

    Si je comprends bien, tu as dans le classeur 1 une procédure événementielle.
    Lorsque celle-ci s'exécute, elle ouvre le classeur 2.

    Ce que tu souhaiterais, c'est exécuter, lors de l'ouverture de ce classeur, la macro contenue dans celui-ci.
    Est-ce bien cela ?

    Si tel est le cas, tu as donné la solution. Tu as peut-être mal utilisé la méthode Run.

    Voici pour exécuter une macro depuis une autre macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub execute_macro()
     
    Application.Run "Classeur1.xlsm!Module2.Ma_Macro"
     
    End Sub
    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut
    Bonjour Kimy et merci pour cette première réponse,

    Application.Run semble bien fonctionner mais c'est ensuite que vient le problème (j'ai oublié de le préciser dans mon premier message).
    Via Application.Run je lance la procédure OuvrirUF du classeur2 qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub OuvrirUF()
        UFSaisie2.Show
    End Sub
    Et là j'ai une erreur "'l'indice n'appartient pas à la sélection" avec curseur bloqué sur la ligne UFSaisie2.Show. Je précise que je suis certain que UFSaisie2 existe bien dans Classeur2, que j'ai vérifié l'orthographe et que quand j'utilise cette même ligne depuis une feuille du Classeur2 via un bouton pas de problème.

    EDIT : Je viens de remarquer que sur mes trois UserForms respectivement UFSaisie, UFSaisie2 et UFSaisie3, seule UFSaisie.Show fonctionne, les autres non... Le problème est donc là... Mais je n'ai toujours pas la solution !

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    EDIT : Je viens de remarquer que sur mes trois UserForms respectivement UFSaisie, UFSaisie2 et UFSaisie3, seule UFSaisie.Show fonctionne, les autres non... Le problème est donc là... Mais je n'ai toujours pas la solution !
    Bonjour,

    Peut être faut-il mettre la propriété ShowModal de chaque UserForm à False pour qu'ils puissent tous coexister.

    OU, dans le code, ouvrir les userForms avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UFSaisie.Show vbModeless

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut
    Bonjour PMO et merci pour ta réponse,

    J'ai essayé les deux méthodes que tu me proposes et aucune des deux ne fonctionne.
    J'ai également essayé de modifier les noms des UserForms, sans succès...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'ai un peu de difficultés à comprendre la finalité!

    Le but est que le classeur a ouvre un usf du classeur b, mais pourquoi faire?; pour enregistrer dans le classeur b?; si c'est pour enregistrer dans le classeur a un Macro complémentaire (xla) suffit!

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

Discussions similaires

  1. Accéder a un classeur depuis un autre classeur
    Par lou57lou dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/01/2009, 17h23
  2. VBA : ouvrir une macro depuis une autre BDD
    Par crovette51101 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/05/2007, 08h09
  3. [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
  4. 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
  5. [VBA-E] executer code d'un userform depuis un autre
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 03/04/2006, 19h35

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