Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/10/2011, 12h25   #1
Invité de passage
 
Arthur
Inscription : février 2011
Messages : 4
Détails du profil
Informations personnelles :
Nom : Arthur

Informations forums :
Inscription : février 2011
Messages : 4
Points : 0
Points : 0
Par défaut Traitement de commandes DOS sans externaliser de fichier

Bonjour à tous,

Je suis en train de mettre au point un programme qui se remplit automatiquement par le traitement de commandes DOS. Or pour ce faire, je génère un fichier TXT pour chaque commande, que je lis ligne par ligne et j'intègre les données dans ma base, puis je le supprime ensuite, cela pourrait se passer rapidement, seulement la plupart des fichier nécessitent un minimum de 2 sec de "Sleep" pour se générer, et sur une quantité de presque 1000, le temps d’exécution est évidemment très important.

Ma question est donc la suivante : Peut-on traiter, sous ACCESS par VBA, des résultats de commandes (de type netuser et netgroup) en intégrant le résultat la commande dans une variable et donc en "court-circuitant" le besoin de créer un fichier TXT. A savoir que ces commandes génèrent plusieurs lignes.

J'ai cru lire sur le site de Microsoft que l'on pouvait intégrer la commande Shell dans une variable (x = "Shell ("...")") mais je ne suis de toute évidence pas très à l'aise pour en sortir ce qu'il m'intéresse.

Merci d'avance pour votre retour
SweloMyli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 18h35   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 475
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 475
Points : 7 564
Points : 7 564
Non, le retour de la fonction Shell est un pointeur sur le processus qui est lancé pour éxécuter la commande Shell. Ce n'est pas le résultat d'une fonction.

Par contre peut-être pourrais-tu lancer la création de tes fichiers text en rafale puis les lires eu aussi en rafale.

Il existe peut-être une autre interface avec l'application que tu appèles avec Shell. As-tu regardé si elle ne fournissait pas une interface ODBC ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2011, 16h58   #3
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Peut-être une solution avec un code inspiré de ce que j'ai vu ici.

Code vba :
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
45
46
47
48
' ---------------------------------------------------------
' Exécution d'un programme type console et récupération
' de sa sortie standard
' ---------------------------------------------------------
' Référence VB :
' * Ajouter une référence à "Windows Script Host Object Model"
'   -> bibliothèque IWshRuntimeLibrary (c:\WINDOWS\system32\wshom.ocx)
'
' Arguments
'      sCmd : Ligne de commande
'   sStdOut : (ByRef) Chaîne de caractère sortie standard
'   sStdErr : (ByRef) Chaîne de caractère sortie erreur
' ---------------------------------------------------------
Sub ExecConsolePgm(sCmd As String, ByRef sStdOut As String, ByRef sStdErr As String)
Dim oShell As IWshRuntimeLibrary.WshShell
Dim oExec As IWshRuntimeLibrary.WshExec
Dim sOut As String, sErr As String
 
On Error GoTo Proc_Err_H
 
' Création objet Shell
Set oShell = New IWshRuntimeLibrary.WshShell
' Exécution de la ligne de commande
Set oExec = oShell.Exec(sCmd)
 
If Not oExec Is Nothing Then
   ' Attend la fin d'exécution
   Do While oExec.Status = 0 ' 0 = WshRunning
      DoEvents
   Loop
   ' Lit les sorties standard et erreur
   sOut = oExec.StdOut.ReadAll()
   sErr = oExec.StdErr.ReadAll()
End If
 
Proc_Exit:
' Met le résultat dans les variables des arguments passés par référence
sStdOut = sOut
sStdErr = sErr
' Libération des variables objet
Set oExec = Nothing
Set oShell = Nothing
Exit Sub
 
Proc_Err_H:
sErr = "Erreur VBA N° " & Err.Number & " : " & Err.Description
Resume Proc_Exit
End Sub

Exemple d'utilisation :
Code :
1
2
3
4
5
6
7
8
9
Sub tstExecConsolePgm()
Dim sCmd As String                 ' Ligne de commande,
Dim sOut As String, sErr As String ' Sortie standard et sortie erreur
 
sCmd = "NET USER toto"
ExecConsolePgm sCmd, sOut, sErr
 
Debug.Print sOut & sErr
End Sub
Le résultat de l'exécution de NET USER toto se retrouve dans les variables sOut et/ou sErr.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h28.


 
 
 
 
Partenaires

Hébergement Web