Récupérer le nom des feuilles d'un classeur sur un autre classeur

Bonjour,

Je cherche à récupérer dans une listbox les feuilles d'un classeur que j'ouvre à partir d'une macro depuis un autre classeur. J'ouvre le second classeur dont je veux récupérer le nom des feuilles en utilisant:

myfile = .SelectedItems(1)
            Set wbkc = ThisWorkbook
            Set wbks = Workbooks.Open(myfile)

Ensuite, depuis mon 1er classeur j'ouvre un userform avec une listbox, j'aimerais faire figurer dans cette listbox le nom des feuilles du classeur que je viens d'ouvrir: J'ai donc écrit:

For Each Ws In wbks.Worksheets
        If (Ws.Name <> "TEST1" And Ws.Name <> "TEST2" Then
            Listbox1.AddItem Ws.Name
        End If
    Next Ws

Le souci c'est que je change de "module" entre l'exécution des 2 macros donc la variable Set wbks = Workbooks.Open(myfile) n'est pas mémorisée. J'ai essayé d'écrire Public wbks As Workbook au début de la macro qui me permet d'ouvrir le fichier EXCEL mais ça ne change rien.

Auriez-vous une piste svp ?

Merci beaucoup !

JB

Pardon de vous avoir dérangé, j'ai remplacé

For Each Ws In wbks.Worksheets
        If (Ws.Name <> "TEST1" And Ws.Name <> "TEST2" Then
            Listbox1.AddItem Ws.Name
        End If
    Next Ws

par

For Each Ws In wbks.Sheets
        If (Ws.Name <> "TEST1" And Ws.Name <> "TEST2" Then
            Listbox1.AddItem Ws.Name
        End If
    Next Ws

et c'est ok !

Par contre j'ai une question:

j'ai mis une case à cocher qui me permet de sélectionner tous les items.

Si je la coche je sélectionne toutes les lignes de ma listbox.

Si je décoche je désélectionne toutes les lignes de ma listbox.

Par contre si je coche cette case et qu'ensuite je viens désélectionner une ligne, la case 'tout cocher" reste valide. Comment faire pour qu'elle passe à "False" si toutes les lignes ne sont pas cochées ? Voir ci-dessous:

tc ptc

Comment procéder svp ?

Merci beaucoup !

JB

Hello,

Quand tu cliques sur ta Listbox, il faut que tu vérifies si ton checkbox ALL est coché et si oui, tu boucles sur tous les items de ta listbox en testant que chaque items soient sélectionnés.

Si tu en as au minimum 1 item non sélectionné, alors tu décoches ta checkbox ALL

Bonsoir,

OK j'ai tenté cela mais ça ne fonctionne pas, où ai-je fait une erreur ?

Private Sub liste_ouvrages_Click()
 If CheckBox1 = True Then
    For i = liste_ouvrages.ListCount - 1 To 0 Step -1
        If liste_ouvrages.Selected(i) = False Then
            CheckBox1 = False
        End If
    Next
End If
End Sub

Merci beaucoup

JB

Hello,

Private Sub liste_ouvrages_Click()
 If CheckBox1 = True Then
    For i = 0 To  liste_ouvrages.ListCount - 1 
        If liste_ouvrages.Selected(i) = False Then
            CheckBox1 = False
        End If
    Next
End If
End Sub

OK je vais essayer votre code, merci beaucoup !

Par contre ma solution ne fonctionne pas finalement pour le problème d'initialisation du nom des feuilles du 2ème classeur dans la USF du 1er classeur :(

Est-ce que cette écriture est correcte ?

Private Sub UserForm_Initialize()
Dim Ws As Worksheet

For Each Ws In wbks
        If (Ws.Name <> "TEST1" And Ws.Name <> "TEST2" )Then
            liste_ouvrages.AddItem Ws.Name
        End If
    Next Ws
End Sub

sachant que:

myfile = .SelectedItems(1)
            Set wbkc = ThisWorkbook
            Set wbks = Workbooks.Open(myfile)

Auriez-vous une idée s'il vous plait ?

Merci beaucoup !

JB

BonjourRag02700,

J'ai essayé votre code pour la checkbox_all et cela ne fonctionne pas, je ne comprends pas. J'imagine que vous avez essayé le code avant mais je ne vois pas où ça peut poser problème :(

Auriez-vous une piste ? Je joins les classeurs. On ouvre le classeur 2 depuis le classeur 1.

PS: Mon problème de chargement du nom des feuilles du Classeur 2 dans le USF du Classeur 1 est ok, j'avais oublié de fermer le 1er USF avant d'ouvrir le 2ème

Merci beaucoup !

JB

5classeur1.xlsm (18.15 Ko)
2classeur2.xlsm (14.14 Ko)

Hello,

L'évènement Click de la listbox est inactif avec le multiselect ...

Je te conseille de faire 2 boutons, un qui sélectionne tout et 1 qui désélectionne tout.

T'auras pas à gérer la checkbox comme ça et ça sera tout aussi pratique.

Ok merci je vais procéder ainsi !

Et dernière question sur ce poste: Comment empêcher le click sur un bouton Cmd si aucun élément n'est sélectionné dans une listbox ?

J'ai essayé avec le code ci-dessous mais rien ne s'affiche

If ListBox1.ListCount = 0 Then

Merci pour votre aide !

JB

Hello,

Tu déclares une variable de type integer que tu définis à 0 en début de programme sur ton bouton.

Tu boucles sur les items de ta listbox.

A chaque item, si il est sélectionné tu ajoutes 1 à ta variable integer.

Une fois les items passés en revues, si ta variable est > 0 c'est que tu as au minimum 1 item selectionné et tu peux executer le reste de ton code.

Si ta variable =0 c'est que tu en as aucun alors il ne se passe rien.

Hello,

Ah oui bonne idée, je pensais qu'il existait une fonction pour vérifier cela mais je vais appliquer votre proposition. Je reviendrais clôturer le poste après avoir codé, même si je devrais pouvoir m'en sortir :)

Merci en tout cas

JB

Hello,

C'est ok, j'ai réussi à coder correctement, ça fonctionne. Merci pour votre aide !

Bonne journée :)

JB

Rechercher des sujets similaires à "recuperer nom feuilles classeur"