Problème feuille classeur fermé

dONut

XLDnaute Nouveau
Bonjour tout le monde,

voilà je travaille actuellement sur des documents excel fermés, mais je rencontre un problème pour récupérer une feuille en particulier. Je m'explique :

Je souhaite copier l'intégralité des données de la 2eme feuille de mon classeur fermé, dans la 1er feuille de mon classeur actif (par exemple). Ce document de données est généré par un collègue, et donc je ne peux pas connaitre le nom qu'il donnera à cette 2eme feuille (et donc y acceder par le nom).

Or il peut être amener à créer, supprimer, déplacer les feuilles au sein du classeur, ce qui du coup m'empéche également d'y accéder par ID (la 2eme feuille du classeur ne correspond pas forcément à la 2eme feuille créée).

Voici mon code permettant de me connecter à mon classeur fermé, et à sélectionner une feuille (mais la mauvaise car mauvais ID) :

Code:
Function ADOcnx_XL_Close(chemin) As Integer

    Dim Cn As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim oCat As ADOX.Catalog
    Dim Fichier As String, Feuille As String, nomfeuille As String, req_SQL As String
    
    '------------------------------------
    ' Connection au classeur excel fermé
    '------------------------------------
    
    'Définit le classeur fermé 
    Fichier = chemin
    
    'Ouverture connection ADODB
    Set Cn = New ADODB.Connection
    
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & Fichier & _
        ";Extended Properties=Excel 8.0;"
        .Open
    End With
    
    'Choix de la feuille contenant les données
    Set oCat = New ADOX.Catalog
    Set oCat.ActiveConnection = Cn
    
    Feuille = oCat.Tables(1).Name
    
    '------------------------
    ' Extraction des données
    '------------------------   

    '---------------------------
    ' Fermeture des connections
    '---------------------------
    Cn.Close
    Set oCat = Nothing
    Set Cn = Nothing

End Function

oCat.Tables.count me renvoi le bon nombre de feuilles existantes, mais sans le nom et sans l'id de la feuille, comment l'atteindre ?

Merci pour votre aide, je vous tiendrais au courant si je trouve une solution.

Cdlt.
 

Pierrot93

XLDnaute Barbatruc
Re : Problème feuille classeur fermé

Bonjour,

une boucle qui te donnera le nom de tes feuilles dans la colonne A de la feuille active :

Code:
For i = 0 To oCat.Tables.Count - 1
    Cells(i + 1, 1).Value = Split(oCat.Tables(i).Name, "$")(0)
Next i

à insérer après ta ligne :
Code:
Feuille = oCat.Tables(0).Name

la variable i doit être déclarée en "long" :
Code:
Dim i As Long

bonne journée
@+
 

dONut

XLDnaute Nouveau
Re : Problème feuille classeur fermé

Bonjour Pierrot93,

merci pour ta réponse, mais elle ne régle pas mon problème.
oCat.Tables(0) ne me renvoit pas forcément la 1er feuille du classeur.

Par exemple imaginons 3 feuilles (Feuil1, Feuil2, Feuil3) :
oCat.Tables(0).Name me renverra donc Feuil1$. Si je supprime Feuil1, cette fonction me renverra encore et toujours Feuil1$ et non Feuil2$ (qui est pourtant la 1er feuille "physique" du classeur).

Une solution possible serait d'ouvrir le document directement (Workbook.Open), de faire mes traitement, et de le refermer. Mais bon, ce ne sera pas totalement transparent pour l'utilisateur.
 

dONut

XLDnaute Nouveau
Re : Problème feuille classeur fermé

Bonjour Pierrot93,

merci pour tes réponses, mais le problème de ces feuilles "fantômes" est incompréhensible. Mes fichiers excel fermés étant à l'origine des exports de requètes Business Object, peut-être que le problème vient de là.

En tout cas merci pour ton astuce ScreenUpdating, ça me sera bien utile.

Cdlt.
 

Discussions similaires

Réponses
9
Affichages
116

Statistiques des forums

Discussions
312 841
Messages
2 092 705
Membres
105 514
dernier inscrit
Hébera