OVH Cloud OVH Cloud

Liste des noms d'un classeur via ADO

1 réponse
Avatar
Christophe QUEVAL
Bonjour,

J'ai un classeur avec une liste de noms qui désignent un ensemble de plages
de mes différentes sheets.
Via Excel Automation, j'accède à ces noms et à leurs références depuis
l'objet "ExcelApplication.Names".
Après je peux récupérer le nom (propriété Name) et la référence (propriété
RefersTo).
Jusque là pas de problème.

Maintenant, l'automation Office côté serveur étant déconseillée par
Microsoft, je voudrais faire "la même chose", mais en accédant à cette liste
de noms via ADO.Net, mais je ne trouve aucune information à ce sujet.

Quelqu'un aurait-il une piste ?

Merci :-)

Christophe

1 réponse

Avatar
michdenis
Bonjour Chistophe,

Si c'est réellement avec ADO.Net ... oublie ce qui suit ....

Voici une procédure utilisant DAO qui retourne le nom de chaque feuille d'un classeur fermé + le "NOM" de toutes les plages de
cellules nommées de ce classeur.

Tu as besoin d'ajouter la référence suivante à ton projet :
"Microsoft Dao 3.6 objects librairy"
'-----------------------------------
Sub ListTables()
Dim db As Database, TableCount As Long, i As Long
Dim dPath As String
'Default location of Northwind.mdb
dPath = "C:ATravailClasseur1.xls"
'Open nwind.mdb
Set db = OpenDatabase(dPath, False, False, "excel 8.0")
'Set a variable to number of tables
TableCount = db.TableDefs.Count
'Loop through all tables
For i = 0 To TableCount - 1
'Display the table name
MsgBox db.TableDefs(i).Name
Next
'Close the database
db.Close
End Sub
'-----------------------------------

Pour obtenir l'équivalent avec ADO, tu as cette procédure :

Ajoute ces 2 références à ton projet :
'"Microsoft ActiveX Data Objects 2.1 Library"
'"Microsoft ADO Ext. 2.1 for DDL and Security "."

Sub ListTables()
Dim cnn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table

cnn.Open "Driver={Microsoft Excel Driver (*.xls)};" & _
"FIL=excel 8.0;" & _
"DefaultDir=C:ATravail;" & _
"MaxBufferSize 48;" & _
"PageTimeout=5;" & _
"DBQ=C:ATravailClasseur1.xls;"

cat.ActiveConnection = cnn
For Each tbl In cat.Tables
MsgBox Left$(tbl.Name, Len(tbl.Name) - 1)
Next tbl

Set cat = Nothing
cnn.Close
Set cnn = Nothing
End Sub
'-------------------------------------------


Salutations!



"Christophe QUEVAL" a écrit dans le message de news:
%
Bonjour,

J'ai un classeur avec une liste de noms qui désignent un ensemble de plages
de mes différentes sheets.
Via Excel Automation, j'accède à ces noms et à leurs références depuis
l'objet "ExcelApplication.Names".
Après je peux récupérer le nom (propriété Name) et la référence (propriété
RefersTo).
Jusque là pas de problème.

Maintenant, l'automation Office côté serveur étant déconseillée par
Microsoft, je voudrais faire "la même chose", mais en accédant à cette liste
de noms via ADO.Net, mais je ne trouve aucune information à ce sujet.

Quelqu'un aurait-il une piste ?

Merci :-)

Christophe