Utiliser un fichier exel sans l'ouvrir VB
vacilis
Messages postés
5
Statut
Membre
-
michel_m Messages postés 18903 Statut Contributeur -
michel_m Messages postés 18903 Statut Contributeur -
Bonjour,
Je reprends le code de quelqu'un, je dois l'omptimiser. On utilise une grande quantitée de fichier excel qui servent à effectuer des calculs . Le problème est qu'à chaque utilisation d'un fichier il est affiché ( une feuille excel apparaît). Il disparait une fois qu'il a finit d'être utilisé mais cela ralenti les calculs et bloque le pc pendant ce temps. Le bout de code pour ouvrir le fichier est :
If toto = tata Then
pathname = pathinit & "\titi.xlsx"
Workbooks.Open pathname
Sheets(Phase).Select
End If
J'ai essayé de placer un opendata mais je n'arrive pas à le faire fonctionner .
Merci.
Je reprends le code de quelqu'un, je dois l'omptimiser. On utilise une grande quantitée de fichier excel qui servent à effectuer des calculs . Le problème est qu'à chaque utilisation d'un fichier il est affiché ( une feuille excel apparaît). Il disparait une fois qu'il a finit d'être utilisé mais cela ralenti les calculs et bloque le pc pendant ce temps. Le bout de code pour ouvrir le fichier est :
If toto = tata Then
pathname = pathinit & "\titi.xlsx"
Workbooks.Open pathname
Sheets(Phase).Select
End If
J'ai essayé de placer un opendata mais je n'arrive pas à le faire fonctionner .
Merci.
A voir également:
- Importer des données d'un fichier excel sans l'ouvrir
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
- Ouvrir un fichier .dat - Guide
- Comment ouvrir un fichier docx ? - Guide
- Comment réduire la taille d'un fichier - Guide
6 réponses
J'ai pas fait de VBA depuis des siècles mais essai de remplacer :
Workbooks.Open pathname
Sheets(Phase).Select
par un truc du genre (pas sur que ça marche XD)
Workbooks("file.xls").Worksheets("Sheet1").select
Sinon pour activer une feuille y'a ça qui marche :
Workbooks("file.xls").Worksheets("Sheet1").Activate
puis comme c'est la feuille active, tu en fait ce que tu veux...
Sinon cherche là dedans : https://docs.microsoft.com/fr-fr/welcome-to-docs
Workbooks.Open pathname
Sheets(Phase).Select
par un truc du genre (pas sur que ça marche XD)
Workbooks("file.xls").Worksheets("Sheet1").select
Sinon pour activer une feuille y'a ça qui marche :
Workbooks("file.xls").Worksheets("Sheet1").Activate
puis comme c'est la feuille active, tu en fait ce que tu veux...
Sinon cherche là dedans : https://docs.microsoft.com/fr-fr/welcome-to-docs
Merci pour la réponse rapide !
Les lignes de code ci dessus ne fonctionnent pas pour mon projet. Cependant j'ai trouvé une astuce pour ne plus lui demander d'ouvrir la feuille. Cependant , il me faut tout de même activer le workbook et là je suis encore coincé.
Merci de me consacrer un peu de temps.
ps j'ai regardé sur le lien fournit mais mon problème n'est pas dans l'aide ni dans les forums.
Les lignes de code ci dessus ne fonctionnent pas pour mon projet. Cependant j'ai trouvé une astuce pour ne plus lui demander d'ouvrir la feuille. Cependant , il me faut tout de même activer le workbook et là je suis encore coincé.
Merci de me consacrer un peu de temps.
ps j'ai regardé sur le lien fournit mais mon problème n'est pas dans l'aide ni dans les forums.
Bonjour,
la méthode à utiliser est d'aller chercher les données sans ouvrir les classeurs sous certaines conditions
si tu as peu de données à chercher dans chaque classeur tu pourrais utiliser la macro dite de Walkenbach
voici un exemple
Range("E9") = ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R7C4")
renvoie dans E9 la valeur de D7 (R7C4)
démo:
https://www.cjoint.com/?mookudu5Zv
Autrement, tu as la méthode ADO: il faut que les zones sources soient sous forme de bases de données
ci joint petite démo basique
https://www.cjoint.com/?mooaiLOsGF
de toutes façons, évite d'utiliser select-selection ainsi que copy-paste
tu iras beaucoup + vite en insérant cette ligne au départ
application.screenupdating=false qui fige le défilement de l'écran (temps divisé par 10)
la méthode à utiliser est d'aller chercher les données sans ouvrir les classeurs sous certaines conditions
si tu as peu de données à chercher dans chaque classeur tu pourrais utiliser la macro dite de Walkenbach
voici un exemple
Range("E9") = ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R7C4")
renvoie dans E9 la valeur de D7 (R7C4)
démo:
https://www.cjoint.com/?mookudu5Zv
Autrement, tu as la méthode ADO: il faut que les zones sources soient sous forme de bases de données
ci joint petite démo basique
https://www.cjoint.com/?mooaiLOsGF
de toutes façons, évite d'utiliser select-selection ainsi que copy-paste
tu iras beaucoup + vite en insérant cette ligne au départ
application.screenupdating=false qui fige le défilement de l'écran (temps divisé par 10)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
je dois faire une application sous VB Excel, à chaque utilisation de cette application necessitera l'utilisation d'un nouveau fichier excel toujours avec le même mais pas le même contenu. Ce fichier à toujours 36 colonnes par contreles lignes peuvent aller jusqu'a 4000. Je ne peux pas contourner ce contraintes: utilisation de excel pour faire l'application. Comment puis je faire pour exploiter ce fichier sans l'ouvrir.
Merci de votre collaboration.
je dois faire une application sous VB Excel, à chaque utilisation de cette application necessitera l'utilisation d'un nouveau fichier excel toujours avec le même mais pas le même contenu. Ce fichier à toujours 36 colonnes par contreles lignes peuvent aller jusqu'a 4000. Je ne peux pas contourner ce contraintes: utilisation de excel pour faire l'application. Comment puis je faire pour exploiter ce fichier sans l'ouvrir.
Merci de votre collaboration.
Bonjour,
Il manque beaucoup de renseignements dans ta demande notamment dans la restitution dans ton classeur cible: feuille, emplacement de la restitution, compilation ou non des précédentes extractions...
macro ci dessous non testée sous XL<2007
si difficultés mettre un extrait du classeur source
Il manque beaucoup de renseignements dans ta demande notamment dans la restitution dans ton classeur cible: feuille, emplacement de la restitution, compilation ou non des précédentes extractions...
macro ci dessous non testée sous XL<2007
si difficultés mettre un extrait du classeur source
Const Camin As String = "D:\ledossierdufichier" 'CONSTANTES A ADAPTER AU CLASSEURSOURCE
Const Fichier As String = "monfichier.xls"
Const onglet As String = "Feuil1"
Const plage As String = "A1:AH4500"
Sub extraire()
Dim Source As Object, Requete As Object
Dim Col As String, Lig As Byte
Dim Texte_SQL As String
onglet = onglet & "$" ' le $ est obligatoire après le nom de l'onglet
'connexion ADO au fichier mensuel désigné par etape (1 à 255)
Set Source = CreateObject("ADODB.Connection")
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Camin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
'exerce la requete ADO sur la donnée à recopier
Texte_SQL = "SELECT * FROM [" & onglet & plage & "]"
Set Requete = CreateObject("ADODB.Recordset")
Set Requete = Source.Execute(Texte_SQL)
'restitue sur le classeur récap
Cells(2, "A").CopyFromRecordset Requete 'A ADAPTER AU CLASSEUR CIBLE
End Sub