Importer noms feuilles d'un classseur fermé
Bonjour,
J'ai besoin d'importer la liste des noms de feuilles de mon classeur fermé dans des cellules de mon classeur ouvert et pour cela j'ai fait ceci (je n'ai rien inventé...)
1.Private Sub CommandButton1_Click()
2.
3.Dim XlConnect As Object, XlCatalog As Object
4. Dim Fichier As String, Resultat As String
5. Dim Feuille As Object
6. Dim objCell As Range
7.
8.Fichier = "h:\monfichierferme.xls"
9.
10.Set XlConnect = CreateObject("ADODB.Connection" )
11. Set XlCatalog = CreateObject("ADOX.Catalog" )
12.
13.XlConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
14. ";Extended Properties=Excel 8.0;"
15. Set XlCatalog.ActiveConnection = XlConnect
16.
17.Cells(1, 1).Select
18.
19.'je ne récupére que les noms qui se terminent par "$"
20.
21.For Each Feuille In XlCatalog.Tables
22. If UCase(Right(Feuille.Name, 1)) = "$" Then
23. ActiveCell = Feuille.Name
24.
25.
26.'et suprime le "$"
27.
28.For Each objCell In Selection
29. If Right(objCell.Value, 1) = "$" Then
30. objCell.Value = Left(objCell.Value, Len(objCell.Value) - 1)
31. End If
32. Next objCell
33.
34.ActiveCell.Offset(1, 0).Select
35.
36.End If
37.
38.Next
39.
40.End Sub
ce code fonctionne parfaitement sous excel 2003 ou 2010 mais bug sous 2000 avec un message d'erreur:
"projet ou bibliothéque introuvable" et surligne de cette façon la ligne
If UCase(Right(Feuille.Name, 1)) = "$" Then
que me faut-il modifier pour que cela fonctionne svp ?
s' agit-il de Microsoft office 11.0 object library coché d'un coté et Microsoft office 9.0 object library de l'autre dans les références ?
puis-je contourner le pobléme ?
Un grand merci pour vos réponses
Bonsoir,
Merci Banzai pour cette info, je ne comprends pas trop l'action de décocher un manquant mais bon, j'essaye ça demain sur 2000 !
Merci encore Banzai, c'est sympa
Merci Banzai,
Le fait de décocher les manquants a bien résolu mon probléme
ce qui donne au final ceci:
Private Sub CommandButton1_Click()
Dim XlConnect As Object, XlCatalog As Object
Dim Fichier As String, Resultat As String
Dim Feuille As Object
Fichier = "h:\monfichierferme.xls"
Set XlConnect = CreateObject("ADODB.Connection")
Set XlCatalog = CreateObject("ADOX.Catalog")
XlConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
Set XlCatalog.ActiveConnection = XlConnect
Cells(1, 1).Select
'je teste si le nom de chaque feuille se termine par $ ou par $' et si oui l'importe dans ma ellule
For Each Feuille In XlCatalog.Tables
If UCase(Right(Feuille.Name, 1)) = "$" Or UCase(Right(Feuille.Name, 2)) = "$'" Then
ActiveCell.Value = nom
ActiveCell = Feuille.Name
'je reprend chaque valeur et si elle se termine par $ je suprime 1 caractére à la fin
'si elle se termine par $' je suprime 2 caractéres à la fin
Dim objCell As Range
For Each objCell In Selection
If Right(objCell.Value, 1) = "$" Then
objCell.Value = Left(objCell.Value, Len(objCell.Value) - 1)
End If
If Right(objCell.Value, 2) = "$'" Then
objCell.Value = Left(objCell.Value, Len(objCell.Value) - 2)
End If
Next objCell
ActiveCell.Offset(1, 0).Select
End If
Next
End Sub
reste un cas particulier à gérer qui est le suivant:
quand je lance ma macro fichier fermé tout est ok et j'ai bien la liste des feuilles visibles avec leur nom propre par contre si d'aventure le fichier se trouve être ouvert alors viennent aussi s'ajouter les feuilles cachées(en hidden), ce que je ne souhaite pas
Bonjour
Je ne connais pas ""ADODB.Connection" ni "ADOX.Catalog"
mais tu récupères les feuilles du classeurs
Et si tu testais la propriété visible de ces Feuilles
If (UCase(Right(Feuille.Name, 1)) = "$") Or (UCase(Right(Feuille.Name, 2)) = "$'") and (Feuille.Visible = xlSheetVisible) Then
Sinon moi je ne sais pas
Bonsoir Banzai,
ça ne fonctionne pas mais je te remerci beaucoup pour ton coup de pouce