J'ai un programme VBA qui relie un syst=E8me d'aquisition de=20
donn=E9e =E0 un fichier excel. De nouvelles donn=E9es=20
s'affichent sur la feuille excel =E0 interval r=E9gulier (10=20
sec. par exemple). Je voudrais r=E9cup=E9rer ces donn=E9es dans=20
un autre fichier excel qui se trouve sur un autre=20
ordinateur du r=E9seau local et ce, =E0 chaque fois qu'il y a=20
une nouvelle acquisition.
J'ai essay=E9 la commande "GetObject" ainsi que "paste=20
special; paste link", mais =E7a ne fonctionne que pour des=20
fichiers ouverts sur le m=EAme poste.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Denis,
As-tu essayé d'importer tes données en utilisant ADO.
Pour exécuter cette macro, tu dois d'abord charger la référence suivante :
Dans l'éditeur de vba, barre de menus / outils / références et tu coches : "Microsoft Activex Data Object 2.0 Librairy"
Attention : Je n'ai jamais testé ceci sur un réseau.
Dans la procédure qui suit : tu dois modifier :
A ) File = "C:testQuery.xls" pour le chemin de ton fichier File = " ......."
B ) NomFeuille = "denis" , Modifie "denis" pour le nom de la feuille où sont tes données dans ton classeur.
C ) With Worksheets("Feuil1") Modifie le nom de la feuille où seront copiés les données ...
D ) la requête telle qu'elle est écrite importe tout le contenu de la feuille
'----------------------------------------------- Sub MaRequêteAvecADO()
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset Dim Requete As String, NomFeuille As String, Rg As Range Dim File As String, C As Integer, Ok As Integer
'Fichier sur lequel se fera la requête : File = "C:testQuery.xls"
'Nom de la feuille du fichier où sont les données 'Dans la requête, j'utilise la variable. NomFeuille = "denis"
'Défini la première cellule où seront copiées les 'données des requêtes ADO With Worksheets("Feuil1") If .Range("A1") = "" Then Set Rg = .Range("A1") Else Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2) Ok = 1 End If End With
Set Conn = New ADODB.Connection Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & File & ";" & _ "Extended Properties=""Excel 8.0;HDR=YES;"""
'La requête qui sera exécutée. Requete = "SELECT * From [" & NomFeuille & "$]"
'Copie les étiquettes du recordset vers Excel If Ok <> 1 Then Do Rg.Offset(, C) = Rst.Fields(C).Name C = C + 1 x = x + 1 Loop Until x = Rst.Fields.Count Rg.Offset(1).CopyFromRecordset Rst Else Rg.CopyFromRecordset Rst End If
Rst.Close: Conn.Close Set Rst = Nothing: Set Conn = Nothing
End Sub '-----------------------------------------------
Salutations!
"Denis" a écrit dans le message de news:f39001c3f175$47ec1df0$ Bonjour
J'ai un programme VBA qui relie un système d'aquisition de donnée à un fichier excel. De nouvelles données s'affichent sur la feuille excel à interval régulier (10 sec. par exemple). Je voudrais récupérer ces données dans un autre fichier excel qui se trouve sur un autre ordinateur du réseau local et ce, à chaque fois qu'il y a une nouvelle acquisition.
J'ai essayé la commande "GetObject" ainsi que "paste special; paste link", mais ça ne fonctionne que pour des fichiers ouverts sur le même poste.
Comment faire? Merci
Denis
Bonjour Denis,
As-tu essayé d'importer tes données en utilisant ADO.
Pour exécuter cette macro, tu dois d'abord charger la référence suivante :
Dans l'éditeur de vba, barre de menus / outils / références
et tu coches : "Microsoft Activex Data Object 2.0 Librairy"
Attention : Je n'ai jamais testé ceci sur un réseau.
Dans la procédure qui suit : tu dois modifier :
A ) File = "C:testQuery.xls" pour le chemin de ton fichier
File = "\ ......."
B ) NomFeuille = "denis" , Modifie "denis" pour le nom de
la feuille où sont tes données dans ton classeur.
C ) With Worksheets("Feuil1") Modifie le nom de la feuille
où seront copiés les données ...
D ) la requête telle qu'elle est écrite importe tout le contenu de la feuille
'-----------------------------------------------
Sub MaRequêteAvecADO()
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, NomFeuille As String, Rg As Range
Dim File As String, C As Integer, Ok As Integer
'Fichier sur lequel se fera la requête :
File = "C:testQuery.xls"
'Nom de la feuille du fichier où sont les données
'Dans la requête, j'utilise la variable.
NomFeuille = "denis"
'Défini la première cellule où seront copiées les
'données des requêtes ADO
With Worksheets("Feuil1")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2)
Ok = 1
End If
End With
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
'La requête qui sera exécutée.
Requete = "SELECT * From [" & NomFeuille & "$]"
'Copie les étiquettes du recordset vers Excel
If Ok <> 1 Then
Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count
Rg.Offset(1).CopyFromRecordset Rst
Else
Rg.CopyFromRecordset Rst
End If
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------------------------
Salutations!
"Denis" <Refpaca@NRCan.gc.ca> a écrit dans le message de news:f39001c3f175$47ec1df0$a401280a@phx.gbl...
Bonjour
J'ai un programme VBA qui relie un système d'aquisition de
donnée à un fichier excel. De nouvelles données
s'affichent sur la feuille excel à interval régulier (10
sec. par exemple). Je voudrais récupérer ces données dans
un autre fichier excel qui se trouve sur un autre
ordinateur du réseau local et ce, à chaque fois qu'il y a
une nouvelle acquisition.
J'ai essayé la commande "GetObject" ainsi que "paste
special; paste link", mais ça ne fonctionne que pour des
fichiers ouverts sur le même poste.
As-tu essayé d'importer tes données en utilisant ADO.
Pour exécuter cette macro, tu dois d'abord charger la référence suivante :
Dans l'éditeur de vba, barre de menus / outils / références et tu coches : "Microsoft Activex Data Object 2.0 Librairy"
Attention : Je n'ai jamais testé ceci sur un réseau.
Dans la procédure qui suit : tu dois modifier :
A ) File = "C:testQuery.xls" pour le chemin de ton fichier File = " ......."
B ) NomFeuille = "denis" , Modifie "denis" pour le nom de la feuille où sont tes données dans ton classeur.
C ) With Worksheets("Feuil1") Modifie le nom de la feuille où seront copiés les données ...
D ) la requête telle qu'elle est écrite importe tout le contenu de la feuille
'----------------------------------------------- Sub MaRequêteAvecADO()
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset Dim Requete As String, NomFeuille As String, Rg As Range Dim File As String, C As Integer, Ok As Integer
'Fichier sur lequel se fera la requête : File = "C:testQuery.xls"
'Nom de la feuille du fichier où sont les données 'Dans la requête, j'utilise la variable. NomFeuille = "denis"
'Défini la première cellule où seront copiées les 'données des requêtes ADO With Worksheets("Feuil1") If .Range("A1") = "" Then Set Rg = .Range("A1") Else Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2) Ok = 1 End If End With
Set Conn = New ADODB.Connection Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & File & ";" & _ "Extended Properties=""Excel 8.0;HDR=YES;"""
'La requête qui sera exécutée. Requete = "SELECT * From [" & NomFeuille & "$]"
'Copie les étiquettes du recordset vers Excel If Ok <> 1 Then Do Rg.Offset(, C) = Rst.Fields(C).Name C = C + 1 x = x + 1 Loop Until x = Rst.Fields.Count Rg.Offset(1).CopyFromRecordset Rst Else Rg.CopyFromRecordset Rst End If
Rst.Close: Conn.Close Set Rst = Nothing: Set Conn = Nothing
End Sub '-----------------------------------------------
Salutations!
"Denis" a écrit dans le message de news:f39001c3f175$47ec1df0$ Bonjour
J'ai un programme VBA qui relie un système d'aquisition de donnée à un fichier excel. De nouvelles données s'affichent sur la feuille excel à interval régulier (10 sec. par exemple). Je voudrais récupérer ces données dans un autre fichier excel qui se trouve sur un autre ordinateur du réseau local et ce, à chaque fois qu'il y a une nouvelle acquisition.
J'ai essayé la commande "GetObject" ainsi que "paste special; paste link", mais ça ne fonctionne que pour des fichiers ouverts sur le même poste.