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 :

Userform pilotant un autre Userform


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Userform pilotant un autre Userform
    Bonjour tous,

    J'ai recherché et pas trouvé de solution.
    J'ai deux classeur ouvert chacun contenant un Userform. Admettons :
    Classeur 1 contient Userform1
    Classeur 2 contient Userform2

    Je voudrais que les données que je mets dans les TextBox de Userform1 soit reportées dans les TextBox de Userform2.
    du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Userform2.Textbox1.Value = Userform1.Textbox1.Value
    Mais ça ne marche pas (objet requis)... Comment faire?
    Merci d'avance,
    Marc

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Il ne trouve pas le 2ème UserForm parce qu'il le cherche dans le même classeur si tu ne précise rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("NomClasseur.xls").Userform2.Textbox1.Value = Userform1.Textbox1.Value
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  3. #3
    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
    Comment appelles-tu Usf2 et comment décharges-tu Usf1 ?
    Pour aller dans usf2, tu dois mettre "Usf1.hide" et non pas "unload Usf1"
    Enfin, ta ligne de code doit se trouver dans Usf2

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Re
    Merci de vos réponses

    fring : j'avais déjà essayé mais ça marchait pas

    ousk : ok, je vois le truc, je vais essayer!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Je une vraiment une tanche avec les Userforms... Voilà mon code dans le Classeur 2 (qui se lance quand je clique sur un bouton de l'Usf1):

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub Workbook_Open()
     
    ' Associe le classeur de recherche au nom RECH
    Dim RECH As Workbook
    Set RECH = ActiveWorkbook
    RECH.Sheets("CR").Activate
     
        ' Mémorise le chemin du fichier
        Dim ProjectPath$
        ProjectPath = ActiveWorkbook.Path
     
    ' Lance le Userform
     
    RECH.Sheets("Résultats").Activate
    INDEX.Show False
    UserForm1.Hide
    ' Report des données
            INDEX.Mot.Value = UserForm1.MotT.Value
     
        If UserForm1.MotEx.Value = True Then
            INDEX.MotEx.Value = True
        End If
     
        If UserForm1.Casse.Value = True Then
            INDEX.Casse.Value = True
        End If
     
        If UserForm1.Casse2.Value = True Then
            INDEX.Casse2.Value = True
        End If
     
        If UserForm1.BtEx.Value = True Then
            INDEX.BtEx.Value = True
            INDEX.Mot2.Value = UserForm1.Mot2.Value
        End If
     
     
    End Sub
    à UserForm1.Hide, il me dit "objet requis"
    si je mais pas la ligen même erreur à INDEX.Mot.Value = UserForm1.MotT.Value
    en gros il reconnait pas mon Usf1 si le l'évoque dans le Classeur2?

    PS : INDEX est le nom de mon Usf2

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par ML0808 Voir le message
    Merci de vos réponses

    fring : j'avais déjà essayé mais ça marchait pas
    Oui tu as raison, sorry j'avais balancé le code sans tester, c'est pourtant bien là qu'est l'os...il ne trouve pas l'objet requis puisqu'il est dans un autre classeur
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  7. #7
    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
    A moins que INDEX.Show ouvre Userform1, si Userform1 n'est pas chargé, et donc tu ne peux pas lire ce qu'il y a dedans. Tu dois d'abord l'ouvrir, le renseigner et, une fois renseigné, le masquer avec Hide, puis, dans Userform2 chargé, alors seulement tu peux lire ce qu'il y a dans Userform1.
    Tu dis ce que fait INDEX.Show ?

    A+

    Edit
    Je viens de relire ta question : Tu ne peux pas ainsi lire depuis l'userform d'un classeur ce qu'il y a dans l'userform d'un autre classeur : Tu dois passer par une variable.
    Je regarde plus précisément

  8. #8
    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
    Les idées qui me viennent (pour lire dans l'usf d'un autre classeur)
    J'essaierais en créant une instance du ficher2, celui contenant userform1 (pas INDEX)
    Avec Application.run, tu pourras ouvrir userform1.
    Comme je n'ai jamais fait ça, j'ignore si une instance d'userform1 arrangerait les choses. Par contre, en passant par une variable déclarée dans le classeur2...
    J'en suis là. Après il faut rester...
    Bon courage.
    Comme la question est intéressante, je regarde de mon côté.
    A+

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    lol, je suis complétement largué!

    j'ai une idée de solution très moche qui me satisfait pas des masses :

    - les donénes sont rentrée dans le Usf1
    - on clique sur le bouton Valider
    - ca lance une copie des données de l'Usf1 dans une feuille de classeur 1
    - ca lance le classeur 2 et l'Usf 2 (INDEX)
    - là il faudrait décharger l'Usf1 (je sais pas si le Usf1.Hide marcherait s'il est dans le classeur 2)
    - il trouve les données inscrites dans la feuille du classeur 1 (pas évident car je dois déclarer le classeur 1 dans le classeur 2 et que dans mon cas à partir du ProjectPath, il faudrait que je recule d'un dossier, encore qu'avec un Left(ProjectPath, nbCaracDuDossier) ça doit marcher)
    - il reprend les données dans les champs de l'Usf2...

    Bon d'un ça m'a pas l'air simple cette idée (aussi tordue que moi j'ai l'impression) et de deux c'est particulièrement sale puisque ça me pourrie une feuille de mon classeur 1 pour y mettre des données et ça j'aimerais bien éviter...
    Néanmoins ton idée d'instances d'userform a l'air séduisante mais dépasse de loin mes capacités je crains...

    Bon je vais pleurer dehors, je reviens plus tard!

    A+

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    pour ma part, je n'ai pas trouvé d'alternative hormis un petit bricolage...

    pour le userform1 du classeur 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
    Workbooks("Classeur2").Sheets(1).Range("IV1") = Me.TextBox1.Value
    Unload Me
    End Sub
    et pour le userform2 du classeur 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
    Me.TextBox1.Value = Sheets(1).Range("IV1")
    Sheets(1).Range("IV1").ClearContents
    End Sub
    c'est pas très pro mais pas mieux
    Ousk va sûrement te sortir un lapin de son chapeau et te trouver LA solution

    @+
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  11. #11
    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
    Citation Envoyé par fring Voir le message
    Ousk va sûrement te sortir un lapin de son chapeau et te trouver LA solution
    Pas brillant le lapin. Je n'ai pas mieux que toi.
    @ML0808
    Je te joins deux fichiers "INDEX.xls" & "USERFORM1.xls"
    Tu les places dans le même répertoire et tu ouvres INDEX.
    Dans un textbox de Userform1, j'ai placé un texte
    Pour le retrouver dans TextBox1 de l'userform INDEX, tu fais un clic sur le bouton.
    Juste pour le principe

    Pièce jointe 26701

    Edit
    Le problème qui se pose est que si tu crées une instance d'un fichier et que tu t'y places (ici, par l'intermédiaire de l'userform1) la macro qui ouvre ce fichier s'interrompt. Donc, depuis la macro d'INDEX, tu ne peux pas lire ce qu'il y a dans Userform1.
    Sans instance, je te laisse essayer.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    je vous remercie de votre aide!
    j'ai préféré passer par un système un peu plus lourd en lignes de codes mais n'employant qu'un seul userform... moins joli mais plus basique

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

Discussions similaires

  1. [XL-2003] Données d'un UserForm dans un autre USerForm
    Par Nospam54 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/05/2015, 09h47
  2. Réponses: 10
    Dernier message: 15/05/2015, 10h03
  3. Déclenchement d'un USERFORM dans un autre USERFORM
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 27/02/2014, 13h51
  4. Réponses: 3
    Dernier message: 31/01/2013, 21h17
  5. [XL-2007] Activer bouton userform depuis un autre userform
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/10/2012, 21h45

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