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 :

Choisir sur quel fichier aller faire travailler sa macro avec un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut Choisir sur quel fichier aller faire travailler sa macro avec un UserForm
    Bonjour,

    Je sèche pour trouver le bout de code me permettant de définir manuellement, une fois ma macro lancée, le nom du fichier sur lequel aller chercher des info.

    J'ai un fichier de suivi, avec disont des notes de frais, qui me sont envoyées par mail, et toujours avec des noms différents. Ma macro va chercher les info dans les notes de frais pour les mettre dans mon fichier de suivi. Seulement, je ne sais pas comment mettre en place un InputBox par exemple, qui me demanderait au début du lancement de ma macro quels sont les premiers mots du nom du fichier de la note de frais, et qui comprendrait sur quel fichier aller chercher mes info.

    Merci d'avance pour votre aide. Voici le bout de code que j'ai commencé à essayer de taper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     'Selectionner le fichier travel request (la "note de frais")
            Dim wb1 As Workbook
            For Each wb1 In Application.Workbooks
            'Ma tentative infructueuse pour qu'un InputBox vienne me demander quels sont les premiers mots du nom du fichier de la note de frais
            If wb1.Name Like Name = InputBox("Name? : ") Then wb1.Activate:
            Next wb1
     
    'Nomme ce workbook WbTravel pour pouvoir l'appeler plus tard dans le code
            Set wbtravel = ActiveWorkbook

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Pas besoin d'une InputBox. Tu peux utiliser les boîtes de dialogues d'Excel

    Tu utilise la collection Dialogs

    Et tu choisis la bonne boîte avec cette énumération (XlDialogOpen dans ce cas)


    P.S. Je ne sais pas si c'est vraiment ce que tu veux; mais cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each wb1 In Application.Workbooks
    ne fonctionne que pour les classeurs déjà ouverts dans la session d'Excel active. Elle ne peut rien faire pour les fichiers qui ne sont pas déjà ouverts. Ma réponse fonctionne plutôt avec les fichiers non ouverts.

    Si, si tu veux choisir un fichier parmi les fichiers déjà ouverts, tu es probablement mieux de les afficher dans un ListBox, soit sur une feuille, soit sans dans un UserForm

    Et pour faciliter la vie des autres répondeurs, ce ne serait pas une mauvaise chose que tu précises si tu veux retrouver et ouvrir un fichier fermé, ou si tu veux choisir un fichier déjà ouvert. Comme tu peux le constater, ce sont plutôt deux approches différentes.

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonsoir Clément,

    pour ton post.

    Au demeurant, j'ai quelque difficulté à ouvrir le lien énumération.

    A toute fin utile, j'ai trouvé cet espace sur l'argumentation de la collection Dialogs.

    Bonne soirée à tous.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par MarcelG Voir le message
    Bonsoir Clément,

    pour ton post.

    Au demeurant, j'ai quelque difficulté à ouvrir le lien énumération.
    Même chose chez-moi. Pourtant cela marchait au moment où je l'ai mis. Mais, il n'y avait pas les valeurs numériques, juste les noms

    Ceci dit, je ne suis pas vraiment surpris. MS est en train de "convertir" MSDN en Docs. Des fois c'est l'enfer. Par exemple quand il veut absolument connecter le compte Microsoft avant de chercher et qu'il ne réussit pas à trouver le compte Microsoft.

    Pour info, la parade que j'utilise c'est de préfixer les recherches dans Bing! avec Msdn; comme par exemple: Msdn excel dialogs

    Quand à savoir si la marche avec Google, je ne sais pas...

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Si tu veux choisir un fichier parmi les fichiers déjà ouverts, tu es probablement mieux de les afficher dans un ListBox, soit sur une feuille, soit dans un UserForm
    Merci pour ta réponse Clément! Je vais essayer de partir sur un ListBox qui m'affiche les fichiers qui sont actuellement ouverts alors. Une petite idée du code peut-être haha ? Car pour préciser, comme tu le conseille, je souhaite en effet retrouver un fichier ouvert au moment où ma macro tourne

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    (Si tu permets, Clement.)

    Pour lister les classeurs ouverts dans une session Excel, il suffit de parcourir la collection Workbooks.
    Pour alimenter un contrôle Listbox, autrement dit alimenter la collection de ses items, voir cet espace sur le contrôle Listbox.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    Bonjour Marcel,

    Merci à toi aussi pour ta réponse. Cependant, je suis désolé mais j'ai du mal à voir comment se code concrètement les solutions dont vous me parler. Si j'en reviens à mon code de départ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Selectionner le fichier travel request (la "note de frais")
            Dim wb1 As Workbook
            For Each wb1 In Application.Workbooks
            'Ma tentative infructueuse pour qu'un InputBox vienne me demander quels sont les premiers mots du nom du fichier de la note de frais
            If wb1.Name Like Name = InputBox("Name? : ") Then wb1.Activate:
            Next wb1
    Par quoi dois-je remplacer ma ligne en rouge qui ne fonctionne pas, pour pouvoir dire à ma macro sur quel fichier ouvert aller chercher mes info ?

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Par quoi dois-je remplacer ma ligne en rouge qui ne fonctionne pas, pour pouvoir dire à ma macro sur quel fichier ouvert aller chercher mes info ?
    As-tu consulté le tutoriel que je t'ai indiqué?
    Le contrôle Listbox (ou Combobox) sera alimenté par le nom des classeurs ouverts.
    La boucle que tu as reportée est exacte. Il te reste à procéder à l'alimentation de la Listbox.
    Un exemple est donné dans le tutoriel.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    Oui je suis devant le lien que tu m'a envoyé, c'est la première fois que je travaille avec un UserForm, alors j'y vais pas à pas. J'ai créé ma ListBox, mais je n'arrive pas à trouver le code qui "alimente" la ListBox comme tu dis. Je me trompe quelque part mais je ne sais pas où. Voici le code que j'ai essayé pour afficher la liste des classeurs ouverts (qui ne marche pas, ma ListBox s'ouvre, mais vide) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ListBox1_Click()
     
    Dim wk As Workbook
    For Each wk In Workbooks 'Parcours tous les classeurs ouvert
    ListBox1.AddItem wk.Name
    Next
     
    End Sub

  10. #10
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Ici, le choix est unique (un classeur) donc le contrôle Combobox est plus approprié.

    Au préalable, je te recommanderais de bien nommer tes contrôles par un préfixe notant sa nature et un suffixe évoquant son contenu.
    Exemple:
    Cbx_lesclasseurs
    Cela parait être un détail mais prend toute son importance, par exemple lors de la gestion de la feuille informée.

    Pourquoi cette alimentation est-elle générée par l'évènement Click?
    Elle peut l'être lors de l'initialisation du formulaire, donc liée à l'évènement Initialize.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
     
    Dim wk As Workbook
     
    With Cbx_lesclasseurs
      .Clear
      For Each wk In Workbooks 'Parcours tous les classeurs ouvert
        .AddItem wk.Name
      Next wk
    End with
     
    End Sub
    N'oublie pas d'ajouter un bouton de commande à ton formulaire dont l'activation va:
    1 - Alimenter une feuille dans une cellule et/ou lancer une procédure (celle qui t'occupe)
    2 - Fermer ton formulaire

    Code en ce sens (en adaptant si nécessaire) et reviens.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    Merci beaucoup pour le temps que tu prends pour m'aider, malheureusement, il y a trop de notions que je n'ai pas pour comprendre toutes les consignes que tu m'indique (et pas le temps de fouiller comme il le faudrait...). Est-ce qu'il serait possible que tu me montre comment faire, en codant directement sur les deux fichiers exemples que je te met en PJ ?

    Encore merci!

    Note de frais.xlsx
    Suivi.xlsm

  12. #12
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Désolé. Ce ne serait pas te rendre service.

    S'il te plaît
    Il te faut créer un formulaire tout simple avec seulement 2 contrôles
    - Une combobox Cbx_lesclasseurs
    - Un bouton de commande Btn_Valid
    Code associé à ce dernier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Btn_Valid_Click()
            Msgbox Cbx_lesclasseurs.Value
            Unload Me
    End Sub
    Pour ce faire, 2 documentations fondamentales
    Les formulaires
    Les contrôles

    Tu charges le formulaire.
    Tu choisis un classeur
    Tu actives le bouton de commande

    Tout ce que j'indique est reporté dans la documentation.

    Puis tu reviens

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    J'adore, merci pour ta patience et ta pédagogie!

    J'y suis presque, j'ai appliqué tes codes, tout fonctionne, reste que le résultat de tout ça est une petite fenêtre d'information qui me dit quel est le nom de fichier sur lequel je vient de cliquer dans ma Combobox (note de frais en l'occurence). Il me reste donc à comprendre comment placer dans ma macro principale ce nom de fichier, résultat de ma Combobox, pour que mon code aille travailler dessus. Un tout dernier petit effort d'explication avant que je ne cesse de t'embêter!

    Suivi v2.xlsm

  14. #14
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Eh bien.
    Pour reprendre la terminologie de ton post initial

    Toujours dans le code associé au bouton de commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbtravel = Workboks(Cbx_lesclasseurs.Value)
    Remarque.
    En fin de procédure, il est de bon aloi de libérer une variable affectée à un objet.


  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    Il y a toujours quelque chose que je ne comprends pas dans cet UserForm, c'est comment "l'intégrer" à ma macro.

    J'ai en effet d'une part dans un module le code suivant :

    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
    39
    40
    41
    Sub Suivi()
    
    Dim wbRequest As Workbook
    Set wbRequest = ActiveWorkbook
    
    Call UserForm1 (ma tentative ne fonctionnant pas)
    
            'Dim wb1 As Workbook
            'For Each wb1 In Application.Workbooks
            'If wb1.Name Like "Note de frais*" Then wb1.Activate:
            'Next wb1
            'Set wbtravel = ActiveWorkbook
    
    'Prénom
    wbtravel.Activate
    Range("B1").Copy
    'Coller en valeur
    wbRequest.Activate
    Range("A1").End(xlDown).Offset(1, 0).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
    'Nom
    wbtravel.Activate
    Range("B2").Copy
    'Coller en valeur
    wbRequest.Activate
    Range("B1").End(xlDown).Offset(1, 0).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            
    'Montant
    wbtravel.Activate
    Range("B3").Copy
    'Coller en valeur
    wbRequest.Activate
    Range("C1").End(xlDown).Offset(1, 0).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
    End Sub
    Et d'autre part dans mon UserForm le code suivant :

    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
    Private Sub UserForm_Initialize()
     
    Dim wk As Workbook
     
    With Cbx_lesclasseurs
      .Clear
      For Each wk In Workbooks 'Parcours tous les classeurs ouvert
        .AddItem wk.Name
      Next wk
     
    End With
    End Sub
     
    Private Sub Btn_Valid_Click()
     
            MsgBox Cbx_lesclasseurs.Value
            Set wbtravel = Workbooks(Cbx_lesclasseurs.Value)
            Unload Me
     
    End Sub
    Je n'ai toujours pas saisi comment faire intervenir mon UserForm au début de ma macro afin de lui stipuler le nom du fichier qui m'intéresse. Est-ce que je doit "appeler" mon UserForm dans ma macro, ou alors directement placer tout le code dans un seul et même endroit ?

  16. #16
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    2 choses
    - Montrer le formulaire.
    Une seule ligne de code dans une procédure elle-même placée dans un module standard.
    - Le traitement suite à la saisie
    C'est le bouton de commande qui
    soit affectera propriétés et méthodes
    soit lancera une procédure placée dans un module standard
    et déchargera le formulaire

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    2 choses
    - Montrer le formulaire.
    Une seule ligne de code dans une procédure elle-même placée dans un module standard.
    Ok sur ce point-ci je suis bon.


    Citation Envoyé par MarcelG Voir le message
    - Le traitement suite à la saisie
    C'est le bouton de commande qui
    soit affectera propriétés et méthodes
    soit lancera une procédure placée dans un module standard
    et déchargera le formulaire
    Pour ce point-là, j'ai essayé le code suivant, avec un GoTo pour retourner à ma macro dans un module standard, après avoir déterminé quel était mon wbTravel, mais ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Btn_Valid_Click()
     
            MsgBox Cbx_lesclasseurs.Value
            Set wbtravel = Workbooks(Cbx_lesclasseurs.Value)
            Unload Me
            GoTo CheckPoint1
     
    End Sub
    Comment puis-je donc retourner à ma procédure dans un module standard, celle qui fait tout le travail de récupération des info ?

  18. #18
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Pour ce point-là, j'ai essayé le code suivant, avec un GoTo pour retourner à ma macro dans un module standard
    Pourquoi GoTo?
    Une procédure s'appelle par la méthode Call
    Si tu considères une procédure, il faut l'informer du classeur choisi.
    Tu peux donc
    Ouvrir le classeur depuis le bouton de commande
    Lancer ensuite la procédure en utilisant dès le début ActiveWorkbook qui définira ce classeur choisi.

    Dans la procédure le plus tôt possible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim wkbactiv
    Set wkbactiv  = ActiveWorkbook
    Cette instruction Set sera placée dans cette procédure plutôt que dans le code du formulaire.
    Ensuite, tu utiliseras toutes les méthodes et propriétés d'un classeur sur cette variable.

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 39
    Par défaut
    Mon classeur de travail, mon fichier "Suivi" est déjà défini comme classeur choisi, et ce dès le début de la procédure.

    Si je récapitule:

    1 - Ma macro se lance et détermine mon fichier de suivi comme classeur actif. Elle lance ensuite mon UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Suivi()
     
    Dim wbRequest As Workbook
    Set wbRequest = ActiveWorkbook
     
    UserForm1.Show
    2 - Mon UserForm me permet de déterminer quel est mon fichier sur lequel aller chercher les informations, ma note de frais. Il détermine ce nom de fichier comme valeur de wbtravel :
    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
    Private Sub UserForm_Initialize()
     
    Dim wk As Workbook
     
    With Cbx_lesclasseurs
      .Clear
      For Each wk In Workbooks 'Parcours tous les classeurs ouvert
        .AddItem wk.Name
      Next wk
     
    End With
    End Sub
     
    Private Sub Btn_Valid_Click()
     
            MsgBox Cbx_lesclasseurs.Value
            Set wbtravel = Workbooks(Cbx_lesclasseurs.Value)
            Unload Me
     
    End Sub
    3 - Mon UserForm se ferme. Ma Macro principal continue, mais ne fonctionne pas pour retrouver la valeur de wbtravel que j'avais défini dans mon UserForm, code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Prénom
    wbtravel.Activate
    J'ai une erreur sur cette ligne de code. Quel est donc le moyen de faire communiquer à ma macro quelle est la valeur de la variable wbtravel définie dans mon UserForm ? C'est la toute dernière étape que je ne comprends pas avant que tout fonctionne...

    Le reste de mon code, dans ma procédure principale, ira chercher les info dans ma note de frais (wbtravel) en les renseignants dans mon fichier de suivi (wbRequest).

  20. #20
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    J'ai du mal m'exprimer.

    Une procédure d'un module standard active le formulaire
    Dans le formulaire, le code associé au bouton de commande va ouvrir le classeur choisi

    Private Sub Btn_Valid_Click()
    Workbooks.Open Filename:=Cbx_lesclasseurs.Value 'A adapter quant au répertoire si différent
    Unload Me
    End Sub


    Dans une 2ème procédure d'un module standard, le code va s'effectuer sur le dernier classeur ouvert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub laproc()
     
    Dim...
    'Dès la déclaration des variables effectuée
    Set wkbactiv  = ActiveWorkbook
    'suite du code
     
    End Sub
    Ainsi, la variable wkbactiv sera affectée au dernier classeur ouvert depuis le formulaire.
    Tu pourras donc, par la suite de ce dernier code, écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wkbactiv.Close SaveChanges:=....
    Set wkbactiv = Nothing
    Personnellement, je préfère argumenter la procédure par le nom du classeur car ce genre de manipulation peut être risquée. Nous pourrons y revenir.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [debutant][struts] Définir le nom dune composante html
    Par pmartin8 dans le forum Struts 1
    Réponses: 1
    Dernier message: 05/05/2006, 14h38
  2. [VBA-E]Définir un nom au classeur créé
    Par LeSqual dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/05/2006, 09h37
  3. [FPDF] définir le nom du pdf créé
    Par fabrice1596 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/04/2006, 09h40
  4. Réponses: 21
    Dernier message: 18/08/2005, 16h06
  5. Réponses: 7
    Dernier message: 07/09/2004, 14h16

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