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 :

Charger un Combo avec le nom des feuilles d'un autre classeur [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Charger un Combo avec le nom des feuilles d'un autre classeur
    Bonjour à tous,

    J'ai créé un UF dans un classeur qui se nomme "Factures". Dans cet UF un Combo (CmbFeuilles) et un bouton de commande (Ok).

    Le Combo doit être chargé par le nom des feuilles se trouvant dans le classeur "Recap prest". Ces noms de feuilles peuvent être alpha ou numériques.

    Donc, lorsque le Combo est chargé par le nom de ces feuilles, l'utilisateur fait son choix parmi la liste et ensuite clique sur Ok.

    L'événement à produire est l'ouverture de la feuille correspondant au nom choisi et uniquement celle-ci, les autres devant être non visible. (Exemple : l'utilisateur choisi 24, alors la feuille 24 du classeur "Recap prest" s'affiche).

    J'avais ce code, mais il ne fonctionne qu'à l'intérieur d'un même classeur et je ne sais pas l'adapter.

    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
     
    Private Sub UserForm_Initialize()
    Dim wksPass As Worksheet
    For Each wksPass In ThisWorkbook.Worksheets
       CmbFeuilles.AddItem wksPass.Name
    Next wksPass
    End Sub
     
    Private Sub CmbFeuilles_Change()
    Dim str As String
        str = CmbFeuilles
        Worksheets(str).Activate
     
    for x = 1 to sheets.count
    if sheets(x).name <> Cb1.Value
    sheets(x).visible = false
    next x
     
    End Sub
    Auriez-vous déjà fait quelque chose de semblable ?
    Pouvez-vous me proposer un exemple ?
    Je vous en remercie chaleureusement

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour NEC14,
    En admettant que ton classeur "Factures et ton classeur "Recap prest" soient tous les deux ouverts un exemple de code pour ton userform :
    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
    Private Sub UserForm_Initialize()
    Dim nbrfeuille as Long
    nbrfeuille = Workbooks("Recap prest.xls").Worksheets.Count
    For i = 1 To nbrfeuille
    Me.CmbFeuilles.AddItem (Workbooks("Recap prest.xls").Sheets(i).Name)
    Next i
    End Sub
     
    Private Sub CmbFeuilles_Change()
    Dim nomfeuille As String
     
    Application.ScreenUpdating = False
     
    'Je rend visible toutes les feuilles du classeurs
    For Each ws In Workbooks("Recap prest.xls").Worksheets
    ws.Visible = True
    Next ws
     
    'Je sélectionne la feuille du combo
    nomfeuille = Me.CmbFeuilles.Value
    Workbooks("Recap prest.xls").Sheets(nomfeuille).Activate
     
    'Je masque les autres feuilles
    For Each ws In Workbooks("Recap prest.xls").Worksheets
    If ws.Name <> nomfeuille Then ws.Visible = False
    Next ws
     
    Application.ScreenUpdating = False
    End Sub
    Ici pas besoin d'appuyer sur ok (sauf si tu veux faire d'autre choses) car lorsque l'utilisateur choisi un nom dans la liste il active tous de suite la feuille.
    Ce code n'est qu'un exemple simple, je le repete il faut que les deux classeurs soient ouvert. essaye déjà comme ceci...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour rvtoulon et merci pour ta proposition.

    Je mets ton code en place et je te dis ce qu'il en est. Dans mon application, le classeur "Recap prest" sera obligatoirement fermé.
    Mais je fais le test avec ton idée.

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    j'ai pas vu ta réponse entre temps j'ai édité dans mon message précédent le code de la combo pour rendre les feuilles visible ou non

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    J'ai mis en place ta première idée sans le masquage des autres feuilles et ça marche très bien. Je n'ai aucun doute sur le fait que le reste du code, le masquage des autres feuilles, fonctionne.

    Il me donc trouver la solution pour que cela fonctionne également si le fichier est fermé.

    Donc : Choix de la feuille, ouverture du classeur, masquage des autres feuilles.

    Merci pour ta précieuse aide

    J'ai mis en place ton 2ème code.
    Je rencontre un petit problème, après avoir fait le choix de la ligne dans le Combo, je suis obligé de cliquer sur l'Uf pour que la feuille apparaisse.

    Vois-tu d'où cela peut venir ?

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Pour remplir ta combo, une idée comme une autre, tu ouvre le fichier recap , tu remplis ta combo, et tu referme le fichier recap se sera transparent tu peux faire comme ceci :
    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
    Dim chemin As String, nomfichier As String
    Private Sub UserForm_Initialize()
    Dim nbrfeuille As Long
    Application.ScreenUpdating = False
    'Adapte les noms a tes besoins
    chemin = "C:\Documents and Settings\Atelier\Bureau\Essai\"
    nomfichier = "Fichier B.xls"
    'j'ouvre le fichier
    Application.Workbooks.Open chemin & nomfichier
    'je remplis ma combo
    nbrfeuille = Workbooks(nomfichier).Worksheets.Count
    For i = 1 To nbrfeuille
    Me.CmbFeuilles.AddItem (Workbooks(nomfichier).Sheets(i).Name)
    Next i
    'je ferme le classeur sans sauvegarder
    Application.Workbooks(nomfichier).Close False
    Application.ScreenUpdating = True
    End Sub
    Attention dans l'événement change il faudra Réouvrir le classeur recap. l'exemple ci dessous dans l'événement change de la combo :
    -Ouvre le fichier ou se trouve les feuilles (pour moi fichier B)
    -Sélectionne la feuille
    -masque les autres feuilles
    -ferme l'userform et le fichier sans sauvegarder
    -affiche le classeur recap avec la feuille sélectionnée
    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
    Private Sub CmbFeuilles_Change()
    Dim nomfeuille As String
     
    Application.ScreenUpdating = False
     
    'j'ouvre le fichier
    Application.Workbooks.Open chemin & nomfichier
     
    'Je rend visible toutes les feuilles du classeurs
    For Each ws In Workbooks(nomfichier).Worksheets
    ws.Visible = True
    Next ws
     
    'Je sélectionne la feuille du combo
    nomfeuille = Me.CmbFeuilles.Value
    Workbooks(nomfichier).Sheets(nomfeuille).Activate
     
    'Je masque les autres feuilles
    For Each ws In Workbooks(nomfichier).Worksheets
    If ws.Name <> nomfeuille Then ws.Visible = False
    Next ws
     
    'je ferme l'userform
    Unload Me
    'je garde le fichier B ouvert et ferme le fichier A sans sauvegarder
    Application.Workbooks("Fichier A.xls").Close False 'Adapte le nom de classeur
    Application.ScreenUpdating = False
    End Sub

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

Discussions similaires

  1. [XL-2010] liste déroulante dans userform avec les noms des feuilles
    Par sk8hunter dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/07/2015, 00h28
  2. [XL-2007] Incrementer des feuilles avec le nom des lignes d'une colonne + copie valeurs
    Par re dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/10/2010, 15h15
  3. liste déroulante avec les noms des feuilles d'un classeur fermé
    Par winclass dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/12/2008, 22h39
  4. Réponses: 3
    Dernier message: 03/11/2007, 18h44
  5. Comment remplir un ComboBox avec le nom des feuilles Excel ?
    Par libracom dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/06/2005, 15h14

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