OVH Cloud OVH Cloud

Echange de données sur un réseau

1 réponse
Avatar
Denis
Bonjour

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.

Comment faire?
Merci

Denis

1 réponse

Avatar
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 & "$]"

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic


'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