Importer noms feuilles d'un classseur fermé

Importer noms feuilles d'un classseur fermé - VB/VBA/VBS - Programmation

Marsh Posté le 18-11-2012 à 09:40:00    

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é...)
 

Code :
  1. Private Sub CommandButton1_Click()
  2. Dim XlConnect As Object, XlCatalog As Object
  3. Dim Fichier As String, Resultat As String
  4. Dim Feuille As Object
  5. Dim objCell As Range
  6. Fichier = "h:\monfichierferme.xls"
  7. Set XlConnect = CreateObject("ADODB.Connection" )
  8. Set XlCatalog = CreateObject("ADOX.Catalog" )
  9. XlConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
  10. ";Extended Properties=Excel 8.0;"
  11. Set XlCatalog.ActiveConnection = XlConnect
  12. Cells(1, 1).Select
  13. 'je ne récupére que les noms qui se terminent par "$"
  14. For Each Feuille In XlCatalog.Tables
  15. If UCase(Right(Feuille.Name, 1)) = "$" Then
  16. ActiveCell = Feuille.Name
  17. 'et suprime le "$"
  18. For Each objCell In Selection
  19.      If Right(objCell.Value, 1) = "$" Then
  20.          objCell.Value = Left(objCell.Value, Len(objCell.Value) - 1)
  21.      End If
  22. Next objCell
  23. ActiveCell.Offset(1, 0).Select
  24. End If
  25. Next
  26. 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

Reply

Marsh Posté le 18-11-2012 à 09:40:00   

Reply

Marsh Posté le 19-11-2012 à 07:17:27    

Bonjour,
Tu as mis Right en gras, c'est lui qui pose problème ?
Si c'est le cas, essaye en remplaçant Right par vba.Right.
 
Sinon, essaye de voir qu'est-ce qui pose problème sur ta ligne en la remplaçant à chaque fois comme ça :
1) If Feuille.Name = "$" Then
2) If Right(Feuille.Name, 1) = "$" Then
3) If UCase(Feuille.Name) = "$" Then
 
Par élimination, tu saura ce qui pose problème.


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 19-11-2012 à 15:06:23    

Bonjour,
Merci oovaveoo , au final je suis arrivé à ce résultat qui fonctionne dans tous les cas de figure.
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.

Code :
  1. Private Sub CommandButton1_Click()
  2. Dim XlConnect As Object, XlCatalog As Object
  3. Dim Fichier As String, Resultat As String
  4. Dim Feuille As Object
  5. Fichier = "h:\monfichierferme.xls"
  6. Set XlConnect = CreateObject("ADODB.Connection" )
  7. Set XlCatalog = CreateObject("ADOX.Catalog" )
  8. XlConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
  9. ";Extended Properties=Excel 8.0;"
  10. Set XlCatalog.ActiveConnection = XlConnect
  11. Cells(1, 1).Select
  12. 'je teste si le nom de chaque feuille se termine par $ ou par $' et si oui l'importe dans ma ellule
  13. For Each Feuille In XlCatalog.Tables
  14. If UCase(Right(Feuille.Name, 1)) = "$" Or UCase(Right(Feuille.Name, 2)) = "$'" Then
  15. ActiveCell.Value = nom
  16. ActiveCell = Feuille.Name
  17. 'je reprend chaque valeur et si elle se termine par $ je suprime 1 caractére à la fin
  18. 'si elle se termine par $' je suprime 2 caractéres à la fin
  19. Dim objCell As Range
  20. For Each objCell In Selection
  21.     If Right(objCell.Value, 1) = "$" Then
  22.         objCell.Value = Left(objCell.Value, Len(objCell.Value) - 1)
  23.     End If
  24.     If Right(objCell.Value, 2) = "$'" Then
  25.         objCell.Value = Left(objCell.Value, Len(objCell.Value) - 2)
  26.     End If
  27.    
  28. Next objCell
  29. ActiveCell.Offset(1, 0).Select
  30. End If
  31. Next
  32. End Sub


 
 :hello:

Reply

Marsh Posté le 19-11-2012 à 15:11:05    

Tu peux tester si la feuille est visible :

Code :
  1. if sheets(Feuille.Name).visible then


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed