VBA - Ouverture intempestive d'un fichier excel
Bonjour à tous,
je m'empresse de détailler ce problème un peu étrange:
Je lance une macro dans un fichier 1, qui établit une connection ADODB avec un fichier 2, les fichiers sont placés sur le réseau.
Jusqu'ici rien de sorcier...
Le but est d'extraire le contenu du fichier 2 et de le placer dans une variable tableau pour ensuite traiter les données.
==> pour les tests j'ai laissé la variable tableau de coté, recopiant simplement les données du fichier 2 dans le 1.
Voici le
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| Sub Import()
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
Dim oCat As ADOX.Catalog
Dim Feuille As ADOX.Table
Set Cn = New ADODB.Connection
Set oCat = New ADOX.Catalog
'Définit le classeur fermé servant de base de données
Fichier = "Z:\Los Teques 2\Suivi retouches\Extraction global MLT2.xlsx"
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
Set oCat.ActiveConnection = Cn
'Nom de la feuille dans le classeur fermé
For Each Feuille In oCat.Tables
NomFeuille = Feuille.Name
Next Feuille
'il n'y aura qu'une feuille mais je n'ai pas trouvé d'autre moyen
'pour isoler le nom de cette feuille, d'ailleurs si quelqu'un a une idée...
'Définit la requête.
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 le fichier 1 à partir de la cellule A3
ActiveWorkbook.Sheets("Points").Range("A3").CopyFromRecordset Rst
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub |
Cas 1 - Qui marche :
Le fichier 2 est fermé, tranquille pépére sur le réseau, la macro s'éxécute, le fichier 2 ne s'ouvre pas, les données sont extraites.
Cas 2 - Qui ne marche pas :
Le fichier 2 est ouvert par quelqu'un sur le réseau, la macro s'exécute, le fichier 2 s'ouvre lors de l'exécution de cn.open !! (bien sûr en lecture seule)
Je pourrais simplement tester l'ouverture du fichier et le cas échéant le fermer, or mon but ici est d'extraire les données du fichier sans l'ouvrir...
Merci à tout ceux qui prêteront attention à ce post ! :pingoin2: