Impossible d'updater mes data avec mes liens à partir d'un fichier fermé
Bonjour à toute la communauté,
Dans le cadre d'un projet j'ai un fichier source contenant une liste de projets et 70 autres fichiers qui disposent tous de la même liste déroulante qui contient tous les projets.
Les fichiers sont distincts car la liste peut changer du jour au lendemain.
Il se peut que plusieurs utilisateurs utilisent leurs fichiers respectifs parmi les 70 dispo et piochent donc simultanément dans le même fichier source. (Ce qui m'empêche donc d'ouvrir le fichier source en fond pour permettre l'update de la liste).
J'ai donc bien réglé mes liens et quand je lance mon fichier et demande la mise à jour des données, cela fonctionne seulement si le fichier source est ouvert également.
Donc, après mes recherches sur le net je tombe sur un article sur silkyroad qui explique qu'à priori:
"Il existe deux types de connection disponibles pour lire et écrire dans un classeur fermé.
* OLE DB Microsoft Jet.
* OLE DB pour pilotes ODBC."
Donc je me dis top, sauf que voilà aucun des codes disponibles ne fonctionne pour moi
J'ai utilisé le code qu'il conseille pour les fichiers ".xlsx" comme je travaille sur Excel 2010.
J'obtiens :
Run-time error '-2147467259 (800004005)'
Could not find installable ISAM
sur la ligne : .Open
Voilà le code:
Sub RequeteClasseurFerme()
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
'Définit le classeur fermé servant de base de données
Fichier = "U:\Workarea\Ongoing\2018\2. My Time Tracking Tool\00. Buffer\ProjectList.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Sheet1"
Set Cn = New ADODB.Connection
'--- Connection ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
.Open
End With
'-----------------
'Définit la requête.
'/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End SubSi vous avez n'importe quelle idée / input, je vous en serai très reconnaissant!
Bon dimanche à toutes & à tous!
Signé LeNovice!
Edit : Je ne trouve pas la réponse à ce sujet sur le forum, chaque fois la discussion semble faire un flop puis est noyée et il n'y a pas de réponse. (Ex : https://forum.excel-pratique.com/viewtopic.php?f=2&t=58496)
Bonjour,
une seule idée.
U:\ ça sent un lecteur réseau. Essayer en utilisant le nom du serveur \\serveur\etc au lieu de la lettre lecteur
eric
Hello Eric,
Je vais tester demain parce que c'est sur un PC pro et je ne sais pas comment obtenir cette information sans demander au service IT qui gère nos réseaux.
Merci pour ta réponse!
Si quelqu'un voit une autre source d'erreur possible, qu'il/elle n'hésite pas
bonjour,
essaie ceci
Sub RequeteClasseurFerme()
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
'Définit le classeur fermé servant de base de données
Fichier = "U:\Workarea\Ongoing\2018\2. My Time Tracking Tool\00. Buffer\ProjectList.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "feuil1"
'--- Connection ---
Set Cn = CreateObject("ADODB.Connection")
Cn.Provider = "MSDASQL"
Cn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & Fichier & "; ReadOnly=False;"
'-----------------
'Définit la requête.
'/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open texte_SQL, Cn, 3
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub