Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
602 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer noms feuilles d'un classseur fermé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Importer noms feuilles d'un classseur fermé

n°2164459
seagull6
Posté le 18-11-2012 à 09:40:00  profilanswer
 

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

mood
Publicité
Posté le 18-11-2012 à 09:40:00  profilanswer
 

n°2164550
vave
Nice to meet me
Posté le 19-11-2012 à 07:17:27  profilanswer
 

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
n°2164602
seagull6
Posté le 19-11-2012 à 15:06:23  profilanswer
 

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:

n°2164607
vave
Nice to meet me
Posté le 19-11-2012 à 15:11:05  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer noms feuilles d'un classseur fermé

 

Sujets relatifs
imprimer des feuilles excel générées à partir d'une liste de données[VBA] Macro pour manipuler des valeurs entre 3 feuilles d'un classeur
Incrémenter les noms de variables (var1, var2, var3, ...)Récupérer tous les noms de fichier dans un dossier
Importer des données d'un autre classeur suivant une datecomment importer Base de données avec extension .frm
importer les dernieres données inseré dans une tablecopier toutes les feuilles d'un ensemble de fichiers Excel
formule pour copier la date sur plusieurs feuillesNoms de tables accentués sous Oracle
Plus de sujets relatifs à : Importer noms feuilles d'un classseur fermé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR