Comment récupérer les références de variables par ADO dans un fichier fermé ?

Herdet

Nous a quitté
Repose en paix
Bonjour,
J'ai un petit blocage dans un utilitaire VBA pour lire un fichier fermé à l'aide d'une connexion par ADO
Pour récupérer les feuilles, les noms de variables les cellules et tableaux, pas de problème mais je bute sur le code permettant de récupérer la référence des variables définies dans le classeur

Ci-joint un fichier pour étayer ma demande.
Lancer "RD-FichierFermé-Lire variables.xlsm" qui ira lire dans "RD-FichierFermé-variables.xlsm" fermé

Merci bien
Robert
 

Pièces jointes

  • RD-FichierFermé-variables.zip
    31.8 KB · Affichages: 26

Staple1600

XLDnaute Barbatruc
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

Bonjour à tous


HERDET:
Je ne sais si cela changera quelque chose mais la norme voudrait que ceci:
Code:
Dim ii, jj, kk As Integer
   Dim intTblCnt As Integer, intTblFlds, intColCnt As Integer, intColFlds As Integer
   Dim strTbl, strCol, TblType As String
   Dim T_TEMP() As Variant
devienne cela
Code:
Dim ii As Integer, jj As Integer, kk As Integer
   Dim intTblCnt As Integer, intTblFlds, intColCnt As Integer, intColFlds As Integer
   Dim strTbl As String , strCol As String, TblType As String
   Dim T_TEMP() As Variant
ou cette écriture condensée
Code:
Dim ii%, jj%, kk%,intTblCnt%, intTblFlds%, intColCnt%, intColFlds%
Dim strTbl$, strCol$, TblType$
Dim T_TEMP() As Variant
 

david84

XLDnaute Barbatruc
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

Bonjour Herdet, Jean-Marie,

Je ne connais pas bien ADO mais comme le sujet est intéressant c'est l'occasion d'y regarder de plus près.

Si je comprends bien ta demande tu cherches à récupérer les références de tes plages nommées sans que celles-ci ne soient reportées préalablement dans un onglet de ton classeur fermé. Est-ce bien cela ?

Je n'ai pas solutionné ton problème et pour l'instant je ne vois pas pour le moment comment récupérer directement ces références.

La macro suivante te ramène le nom de ces plages en passant par la classe Catalog, mais pas leur référence. Je te la livre quand même peut-être que cela peut t'ouvrir des perspectives :
Code:
'http://silkyroad.developpez.com/VBA/ClasseursFermes/
Sub Liste_Feuilles_PlagesNommees_ClasseurFerme_V01()
'Nécéssite d'activer la référence Microsoft ADO ext x.x for DLL and Security
'Nécéssite d'activer la référence Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim oCat As ADOX.Catalog
Dim Fichier As String, Resultat As String
Dim Feuille As ADOX.Table
Fichier = ActiveWorkbook.Path & "\RD-FichierFermé-variables.xlsm"
Set Cn = New ADODB.Connection
Set oCat = New ADOX.Catalog
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & _
";Extended Properties=""Excel 12.0;HDR=YES;"""
Set oCat.ActiveConnection = Cn
For Each Feuille In oCat.Tables
  If Right(Feuille.Name, 1) <> "$" And Right(Feuille.Name, 2) <> "$'" Then _
  Resultat = Resultat & Feuille.Name & vbCrLf
Next

MsgBox Resultat
Set Feuille = Nothing
Set oCat = Nothing
Cn.Close
Set Cn = Nothing
End Sub
Sinon, cela ne serait-il pas plus simple de reporter ces références dans la feuille de calcul de ton classeur fermé pour ensuite les récupérer (mais peut-être est-ce le cas mais je ne l'ai pas compris comme cela) ?

A+
 

Herdet

Nous a quitté
Repose en paix
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

Bonsoir JM,
Je ne vois pas ce que peuvent apporter Dim ii As Integer, jj As Integer, kk As Integer et Dim strTbl As String , strCol As String, TblType As String au lieu de Dim ii , jj , kk As Integer ou Dim strTbl, strCol, TblType As String à part alourdir le code.
La norme voudrait aussi que l'on écrive chaque variable sur une nouvelle ligne avec le commentaire la définissant mais bon c'est un peu lourdingue.
D'autre part, j'ai abandonné depuis de très nombreuses années la norme des premiers basic des années 80, genre % (integer), $(string)
A+
Robert
 

Staple1600

XLDnaute Barbatruc
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

Bonsoir à tous


Herdet
C'est simple pourtant
Dim ii, jj, kk As Integer
Ceci, tel quel veut dire:
Dim ii As Variant, jj As Variant, kk As Integer
et non pas
Dim ii As Integer, jj As Integer, kk As Integer

Voir l'aide VBA pour les détails.
ou ici ->
SOURCE
(car j'ai la fainénantise d'ouvrir Excel à cette heure)

Les informations de ce chapitre sont en grande partie issues de l'aide en ligne Excel.
Toutes les variables sont converties en type Variant si aucun autre type de données n'est explicitement déclaré.
En cas de déclaration de plusieurs variables avec le même Dim, vous devez préciser le type de donnée pour chaque variable.
Par exemple, si pour définir 3 variables des type String (strVar1, strVar2 et strVar3) vous écrivez:
Dim strVar1 , strVar2 , strVar3 As String
Dans ce cas strVar1 et strVar2 seront de type Variant.

Pour y remédier et obtenir 3 variables String, Il faut écrire:
Dim strVar1 As String , strVar2 As String , strVar3 As String


 
Dernière édition:

Herdet

Nous a quitté
Repose en paix
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

Bonjour Herdet, Jean-Marie,

Si je comprends bien ta demande tu cherches à récupérer les références de tes plages nommées sans que celles-ci ne soient reportées préalablement dans un onglet de ton classeur fermé. Est-ce bien cela ?

La macro suivante te ramène le nom de ces plages en passant par la classe Catalog, mais pas leur référence
...
Sinon, cela ne serait-il pas plus simple de reporter ces références dans la feuille de calcul de ton classeur fermé pour ensuite les récupérer (mais peut-être est-ce le cas mais je ne l'ai pas compris comme cela) ?

A+
Bonjour David,
Tu as bien compris ma question "ramener directement les références" ... mais sans écrire dans le classeur fermé.
Dans mon utilitaire en gestation, la récupération de tous les noms de feuilles et de variables est déjà faite à l'aide de la fonction Conn.OpenSchema(adSchemaTables) mais OpenSchema n'inclue pas les références.

"Sinon, cela ne serait-il pas plus simple de reporter ces références dans la feuille de calcul de ton classeur fermé pour ensuite les récupérer "
Dans ce cas, on doit faire de l'écriture dans le classeur fermé après avoir créée une nouvelle feuille, .. l'idée est à creuser !

A bientôt
Robert
 

Herdet

Nous a quitté
Repose en paix
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

Bonsoir à tous

Herdet
C'est simple pourtant
Dim ii, jj, kk As Integer
Ceci, tel quel veut dire:
Dim ii As Variant, jj As Variant, kk As Integer
et non pas
Dim ii As Integer, jj As Integer, kk As Integer

Voir l'aide VBA pour les détails.
ou ici ->
SOURCE
(car j'ai la fainénantise d'ouvrir Excel à cette heure)


Bonsoir JM,
Bien vu. Je viens de consulter le § II. Les types de données de ta SOURCE. Tu as parfaitement raison.

Donc dans pas mal de mes programmes seule la dernière variable est bien définie et toutes les précédentes sont en type variant. Comme mon code n'a jamais planté sur des problèmes de variables, je ne me suis jamais posé la question.
Si l'on gère bien toutes les affectations des nombres et textes, il est aussi simple de laisser tout en variant sauf peut être pour le type Double
A mes débuts en Basic de 1980, il fallait surveiller de près les types à cause de la très faible taille des mémoires disponibles en kOctets mais cela ne me parait plus nécessaire maintenant.

Merci bien
Robert
 

Staple1600

XLDnaute Barbatruc
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

RE

Herdet
j'avais bien précisé
Je ne sais si cela changera quelque chose mais la norme voudrait que ceci
J'ai du avoir un accès d'orthodoxie syntaxique, et c'est ce qui motiva mon message.
En tout cas, maintenant tu auras le choix entre la norme et oserai-je l'écrire, l'hérésie ;) pour déclarer tes variables.
 

Herdet

Nous a quitté
Repose en paix
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

RE

Herdet
J'ai du avoir un accès d'orthodoxie syntaxique, et c'est ce qui motiva mon message.
En tout cas, maintenant tu auras le choix entre la norme et oserai-je l'écrire, l'hérésie ;) pour déclarer tes variables.
OK, c'est un sacrilège ... mais si le code fonctionne parfaitement on peut faire un peu de résistance, non ?
A+
Robert
 

Staple1600

XLDnaute Barbatruc
Re : Comment récupérer les références de variables par ADO dans un fichier fermé ?

Re

Herdet
Mon précédent message n'était qu'un trait d'humour ;)
Pas le début d'une nouvelle Croisade ;)

PS: by the way, je sais toujours pas si cela change quelque chose le changement de déclaration de variables.
Tu as testé au moins ?
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 331
Membres
103 519
dernier inscrit
Thomas_grc11