Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2012, 20h30   #1
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Par défaut Lister toutes les feuilles d'un classeur fermé

Bonsoir,

voilà plusieurs heures que je recherche la solution à mon problème, mais sans résultat.

Je recherche à lister la totalité des feuilles se trouvant sur un autre classeur que le classeur ouvert. Puis afficher le résultat dans des cellules définies du classeur courant.

Le choix du classeur se fera par l’indication du chemin situer dans une autre cellule.

Exemple en A1 : Chemin du fichier où je souhaite récupérer le nom des feuilles.

En C1 et suivant : la liste de toutes les feuilles.

Merci à tous pour votre aide.

J'avais trouvé le code ci-dessous, mais cela ne marche que pour le classeur courant :

Code :
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
Sub ListSheetTypes()
'd'après Rob Bovey, mpep
Dim objSheet As Object
Dim szType As String, sousType As String
 
 
 
  For Each objSheet In ActiveWorkbook.Sheets
    i = i + 1
    Cells(i, 1) = objSheet.Name
    szType = TypeName(objSheet)
    If szType = "Worksheet" Then
      Select Case objSheet.Type
        Case xlWorksheet
          sousType = szType
        Case xlExcel4MacroSheet
          sousType = "Excel4MacroSheet"
        Case xlExcel4IntlMacroSheet
          sousType = "Excel4IntlMacroSheet"
      End Select
      Cells(i, 2).Value = sousType
    Else
      Cells(i, 2).Value = szType
    End If
    Next objSheet
 
End Sub
J'ai essayé de le "bricoler" en rajoutant ça :

Code :
1
2
3
4
Workbooks.Open Filename:="C:\Users\David\Desktop\boulot\SUIVI SPB le 2811.xls"
 dep = ActiveWorkbook.Name
 
  For Each objSheet In Workbooks(dep).Sheets
Mais le résultat s'affichait alors dans le classeur actif et non dans le classeur de destination.

David
Ile de la Réunion
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 20h37   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
bonjour il faut ouvrir le classeur avant de lister les feuilles ...

il faut éviter d'utiliser les Active...Cell,Workbook....
il faut évite d'utiliser les objets range, Cells ... sans préciser la feuille/classeur..


Code :
1
2
3
4
5
6
7
 
dim objSheet as sheet
dim wk as workbook
set wk = workbooks.open("C:\monclasseru.xls")
  For Each objSheet In wk.Sheets
    ...
     ThisWorbook.Sheets("Mafeuille").Cells(i, 2).Value = sousType
bbil est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/01/2012, 20h52   #3
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Bonjour,

merci de cette réponse rapide.

A quel endroit dois-je mettre cette partie du code ?

Code :
ThisWorbook.Sheets("Mafeuille").Cells(i, 2).Value = sousType
Bien entendu j'ai changé le nom "Mafeuille" par ma référence

Merci

David
Ile de la Réunion
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 21h01   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
c'est juste pour le principe pour remplacer cela :
Code :
  Cells(i, 2).Value = sousType
bbil est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/01/2012, 21h08   #5
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
C'est ce que j'avais fait une première fois, mais cela me provoque une erreur :

N° 424
Objet requis
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 21h23   #6
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 715
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 715
Points : 3 655
Points : 3 655
Salut, à lire http://silkyroad.developpez.com/VBA/ClasseursFermes/#LV
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 21h27   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
c'est ThisWorkBook.
bbil est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/01/2012, 21h29   #8
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Bonsoir Kiki,

c'est ce que j'avais déjà tester, mais même en installant les bibliothèques j'ai cette erreur :

Erreur d'exécution '3706' :
Impossible de trouver le fournisseur....

C'est cette partie qui provoque cette erreur :

Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"

David
Ile de la Réunion
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 21h39   #9
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par kiki29 Voir le message
utiliser cette méthode c'est ce compliquer la vie pour rien ... si tu as excel utilise excel et pas ADO...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 07/01/2012, 21h40   #10
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
BBil,

merci, quel idiot je fais je ne l'avais pas vu non plus ;o)

Par contre si je n'ai plus d'erreur, j'ai un soucis d'affichage. En effet dans le classeur auquel je souhaite récupérer les noms de feuilles s’inscrive les noms demandés, et dans la feuille de mon classeur actif le type des feuilles (ici Worksheet).
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 21h42   #11
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
il ne faut pas travailler avec le classeur actif...

tu utilise ThisWorkbook pour le classeur contenant ton code ...

et ta variable wk pour l'autre classeur
bbil est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 07/01/2012, 21h53   #12
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Je m'embrouille un peu là.

Oui ThisWorkbook est bien pour le classeur où se trouve mon code et donc le classeur de destination des infos, et wk le classeur que je nommerais source.

Voici le code modifié :

Code :
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
Sub ListSheetTypes()
'd'après Rob Bovey, mpep
Dim objSheet As Object
Dim szType As String, sousType As String
  Dim wk As Workbook
Set wk = Workbooks.Open("C:\Users\David\Desktop\boulot\DOSSIER DIVERS CHANTIER\CBO BAMBOUS 1011- 10 -04\A MARCHE BAMBOUS\étude bambou PRO aout 2010.xls")
  For Each objSheet In wk.Sheets
    i = i + 1
    Cells(i, 1) = objSheet.Name
    szType = TypeName(objSheet)
    If szType = "Worksheet" Then
      Select Case objSheet.Type
        Case xlWorksheet
          sousType = szType
        Case xlExcel4MacroSheet
          sousType = "Excel4MacroSheet"
        Case xlExcel4IntlMacroSheet
          sousType = "Excel4IntlMacroSheet"
      End Select
      ThisWorkbook.Sheets("Feuil1").Cells(i, 2).Value = sousType
 
    Else
        Cells(i, 2).Value = szType
    End If
    Next objSheet
 
End Sub
A noter que j'ai gardé :

Dim objSheet As Object

parce que dim objSheet as sheet provoqué une erreur de compilation ("Type défini par l'utilisateur non défini")
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h51.


 
 
 
 
Partenaires

Hébergement Web