[VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Staple1600

XLDnaute Barbatruc
Bonjour à tous

PREAMBULE: ce fil est liè a celui-ci:
Firefox 3 -places.sqlite

Je suis coincé à ce niveau:
La macro suivante crée le batch et le lance (ça c'est OK)

Code:
Sub cree_bat()
Open "c:\temp\Ftest.bat" For Output As #1
Print #1, "cd\"
Print #1, "cd c:\sqlite3"
Print #1, "sqlite3 places.sqlite"
Print #1, ".dump txt"
Print #1, ".output test.txt"
Print #1, "select url,title from moz_places;"
Print #1, ".exit"
Close #1
Shell "c:\temp\Ftest.bat", vbNormalFocus
End Sub
Sauf que le batch lui ne fonctionne pas

Je cherche un moyen par VBA, d'envoyer les instructions (contenues dans le batch) dans l'invite MSDos et de simuler à chaque fin de chaine l'appui sur la touche ENTER.

Les instructions quand on les passe manuellement à partir de l'invite MSDos , une par une et qu'on appuie sur ENTER fonctionne.

Avez-vous une idée sur la façon de s 'y prendre ?
 

Staple1600

XLDnaute Barbatruc
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Re

EDITION DEUX: Pareil, même loggé en Administrateur, la simulation d'appui sur une touche
ne se fait pas lors qu'apparait [Appuyer sur une touche pour continuer]


Hasco
Quand je dis que cela ne fonctionne voila ce que je veux dire:

Code:
Sub Test__OK()
Shell "cmd", vbNormalFocus 'ok
[COLOR=Green]'l'invite MSDOS apparait OK[/COLOR]
Application.Wait Time + TimeSerial(0, 0, 3)
SendKeys "dir /?"
[COLOR=Green]'dir /? s'incrit et s'exécute OK[/COLOR]
Application.Wait Time + TimeSerial(0, 0, 3)
[COLOR=Green]'le temps s'écoule tic tac tic tac OK[/COLOR]
SendKeys Chr(13)
[COLOR=Green]' et il se passe rien
'Appuyez sur une touche maintenant reste affiché
'et aucune frappe de touche n'est simulé[/COLOR]
End Sub
EDITION: Ah mais j'y pense !!!

Je me reloggue en admin et je réessaye
 
Dernière édition:
G

Guest

Guest
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

JM,

Ok, j'ai compris,

Avec ceci cela le fait:
Sub Test_OK()
Shell "cmd", vbNormalFocus
Application.Wait Time + TimeSerial(0, 0, 3)
SendKeys "dir /?"
Application.Wait Time + TimeSerial(0, 0, 3)
SendKeys Chr(13)
Application.Wait Time + TimeSerial(0, 0, 3)
SendKeys Chr(32) 'Touche espace affiche le reste de la page et revient au prompt
End Sub

A+
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Re JM,

Une autre façon de faire qui demande moins d'attente:

Code:
Sub Test_OK()
    Dim id As Variant
   id = Shell("cmd", vbNormalFocus)
   Application.Wait Time + TimeSerial(0, 0, 3)
   AppActivate id 'Active la fenêtre dos
    SendKeys "dir /?"
    SendKeys Chr(13)
   Application.Wait Time + TimeSerial(0, 0, 1) 'Attent l'affichage de la première page
    SendKeys Chr(32) 'Affiche la deuxième
End Sub

Mettre une attente entre les commandes dos qui demande du temps pour effectuer leur tâche.

A+
 

Staple1600

XLDnaute Barbatruc
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Re


Merci encore Hasco voici le script fonctionnel

Une petit question: Peut-on réduire le temps en utilisant des milliseconds
en utilisant GetTickCount ?
Code:
Sub Test_OK()
Dim id As Variant
id = Shell("cmd", vbNormalFocus)
Application.Wait Time + TimeSerial(0, 0, 2)
AppActivate id 'Active la fenêtre dos
SendKeys "cd c:\sqlite3"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "~"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "sqlite3 places.sqlite" '
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "~"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys ".dump txt"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "~"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys ".output hhhtest.txt"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "~"
SendKeys "select url,title from moz_places;"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "~"
SendKeys ".q"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "~"
SendKeys "exit"
Application.Wait Time + TimeSerial(0, 0, 1)
SendKeys "~"
End Sub
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Bonjour à tous,

N'apporte rien au fil...

Ah ben sur ce coup là, tu m'as, ENCORE, étonné mon ami Hasco...

Code:
[B]=REPT("Bravo * ";10)[/B]

A+ à tous

Edition : Oups, toutes mes excuses l'Agrafe... Salut !!!!
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Re

EDITION: Bonsoir JCGL, t' avais point vu passé :eek:

Hip Hip Hourra :p

Hasco: Puisque ce ce fil concerne un fil ou tu m'avais dit avoir un problème
(voir ton message : Lien supprimé )

Une question s'impose:
As-tu toujours ce problème ?


En tout cas merci, Hasco ;)

Nous voici avec 3 solutions fonctionnelles (cf le post FireFox)
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Bonjour à tous

Ouah! Goople, tu viens de passer un cap, c'est plus un cap (7000 posts), c'est une péninsule. Que dis-je un continent, voire le monde , l'univers, la galaxie. Mais attention au trou noir!

Bonne continuation et continue avec tes problèmes métaphysiques ou mégaphysiques.
 
G

Guest

Guest
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Hello tous,

Staple, il me semblait bien qu'hier j'oubliais quelque chose.
Cela m'est revenu ce matin au révéil!!!!!!!:D

L'utilisation du second paramètre de SendKeys pour attendre que les touches soient traitées avant que vba ne reprennent la main.

Avec l'exemple d'hier cela donne:

Code:
Sub Test_OK()
    Dim id As Variant
    id = Shell("cmd", vbNormalFocus)
    Application.Wait Time + TimeSerial(0, 0, 1)
    AppActivate id                                    'Active la fenêtre dos
    Application.Wait Time + TimeSerial(0, 0, 1)
    SendKeys "dir", True
    SendKeys Chr(32), True
    SendKeys "/?", True
    SendKeys Chr(13), True
    SendKeys Chr(32)                                  'Affiche la deuxième
End Sub
A+
 
Dernière modification par un modérateur:

Staple1600

XLDnaute Barbatruc
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

Bonjour à tous, MJ13, Hasco

Merci Hasco de ta méticulosité VBAiste.

Est-ce qu'on peut chercher du côté de GetTickCount

Peut-on réduire le temps en utilisant des milliseconds
en utilisant GetTickCount ?
Ou 1 seconde est le temps minimal pour que la macro reste fonctionnelle?
 
Dernière édition:
G

Guest

Guest
Re : [VBA][MSDOS][BAT] [Comment?] Envoyer Strings dans invite MsDos à un *.exe ?

JM,

Effectivement, tu peux utiliser GetTickCount, mais cela dépend plus de la machine sur laquelle va se dérouler ta macro, et de la vélocité de la fenêtre dos à repondre aux différentes commandes.

D'autant plus que ce temps peut varier également suivant l'exécution de tous les process en cours.

Comme j'ai une machine plus lente que la tienne, au départ il faut plus de 2 secondes avant de lancer le 1er sendKeys.

A toi de juger, ce dont tu as besoin et si ta macro doit tourner sur d'autres machines, prévois des temps plus long.

A+