Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ShellWait - erreur de compilation...

17 réponses
Avatar
ben
Bonjour,

J'ai un soucis avec la commaNde ShellWait :

Erreur de compilation:
Variable ou procédure attendue, et non un module

Ma déclaration :
*********************************************
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess
As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess
As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400

Public Sub ShellWait(ByVal JobToDo As String)
Dim hProcess As Long, RetVal As Long

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(JobToDo,
vbMinimizedNoFocus))
Do
GetExitCodeProcess hProcess, RetVal
DoEvents
Sleep 100
Loop While RetVal = STILL_ACTIVE

*******************************************
Ma macro :

Sub addResrv_multi_line()
' il faut sélectionner plusieurs valeurs de la ligne
Dim Cell As Range, Ligne As Range, Valeur, A As Integer

'vérifier si Selection est une plage de cellules
If TypeName(Selection) = "Range" Then
'Boucle sur chaque ligne de la sélection
For Each Ligne In Selection.Rows
'Boucle sur chaque cellule de la ligne
For Each Cell In Ligne.Cells
Valeur = Valeur & " " & Cell.Value
' résultats intermédiaires
' msgbox valeur
Next Cell
'MsgBox Valeur
'A = A + 1
'toexe = "cmd.exe /c" & Valeur & ">>C:\addResrv_multi_line" & A & ".txt"
'toexe = "cmd.exe /c" & Valeur & ">>C:\addResrv_multi_line.txt"
toexe = "cmd.exe /c" & Valeur & " | clip "
MsgBox toexe
RetVal = ShellWait(toexe, vbHide)
Valeur = "" 'après chaque boucle il vide le contenu de la variable Valeur
Next
End If
'Open "C:\addResrv_multi_line.txt" For Input As #1
MsgBox "end"
End Sub
*****************************************************
Merci d'avance.
Cordialement.

7 réponses

1 2
Avatar
ben
Bonjour,

Est-possible d'ouvrir un cmd.exe et faire un senkeys de cette combinaison
de touche : ALT+SPACE+E+P ?.

Merci.

Cordialement.

"michdenis" wrote:

Voici quelques explications sur cette ligne de commande :
ShellAndWait "cmd.exe /c " & Valeur & ">>C:addResrv_multi_line.txt", 1

L'utilisation des ">>" permet d'ajouter le résultat d'une commande DOS
à l'information du fichier déjà existant si le fichier n'est pas vide.
tu peux si tu le désires effacer et écrire le résultat de la
commande en utilisant un seul ">" dans la commande.
ShellAndWait "cmd.exe /c " & Valeur & ">C:addResrv_multi_line.txt", 1

On pourrait aussi le faire de cette façon en détournant un peu le rôle
de la commande "Echo off" en DOS comme ceci :
Dans votre programme, cela se traduit de façon suivante
Commande = commande = "cmd.exe /c echo off >C:addResrv_multi_line.txt"
Shell commande, vbHide
Vous insérez ces 2 lignes de code avant le début de la boucle. Cela videra
complètement le contenu du fichier existant.

Pour supprimer un fichier existant
Kill C:addResrv_multi_line.txt

Attention, le fichier est totalement détruit, il ne se
retrouve pas à la poubelle de Windows.

Pour effacer le contenu du fichier texte, vous pouvez utiliser
la même commande :



"ben" a écrit dans le message de groupe de discussion :

Bonjour,

Et merci infiniment pour votre aide.

J'aimerais pour finaliser le projet faire au cas ou, un clear du fichier
txt ?.
Ou bien la suppression du fichier s'il existe avant l'execution.

Merci de me faire les 2 propositions.

Cordialement.



"michdenis" wrote:

> Les 2 lignes ajoutées vont s'exécuter pour tous les items
> contenus dans la boucle. Si tu ne désires inscrire une date
> que pour l'ensemble du code contenu dans la boucle,
> place ces 2 lignes de code avant le début de la ligne For ...
> de la même procédure.
>
> commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> Shell commande, vbHide
>
>
> "michdenis" a écrit dans le message de groupe de discussion :
> #
> Attention aux coupures de lignes de code par le service de messagerie.
>
> N.B. Semble-t-il que la solution retenue s'est éloignée de ta
> demande initiale !
>
> Dans ton code, avant cette ligne de la procédure: Test
> ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
>
> Tu inscris les commandes dans cet ordre :
> Tu peux aussi modifier le format date que tu désires dans "dd/mmm/yyyy H:MM:SS"
> commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> Shell commande, vbHide
> ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
>
> P.S- Tu dois ajouter à la déclaration des variables en début de procédure
> Dim Commande As String
>
>
> "ben" a écrit dans le message de groupe de discussion :
>
> Bonjour michdenis,
>
> Voici ma solution, cependant j'aimerais juste rajouter la date d'exécution
> pour chaque traitement, car j'ai qu'un seule fichier.
> ************************************************
> Declare Function OpenProcess Lib "kernel32" _
> (ByVal dwDesiredAccess As Long, _
> ByVal bInheritHandle As Long, _
> ByVal dwProcessId As Long) As Long
>
> Declare Function GetExitCodeProcess Lib "kernel32" _
> (ByVal hProcess As Long, _
> lpExitCode As Long) As Long
>
> Public Const PROCESS_QUERY_INFORMATION = &H400
> Public Const STILL_ACTIVE = &H103
>
> 'Sub Test()
> 'Dim StartTime As Double
> 'StartTime = Now
> 'ShellAndWait "ping.exe", 1
> 'MsgBox "Gone " & Format(Now - StartTime, "s") & " seconds"
> 'End Sub
> Sub addResrv_multi_line_test()
> ' il faut sélectionner plusieurs valeurs de la ligne
> Dim Cell As Range, Ligne As Range, Valeur, A As Integer
> Dim LogFile As String
> 'vérifier si Selection est une plage de cellules
> If TypeName(Selection) = "Range" Then
> 'Boucle sur chaque ligne de la sélection
> For Each Ligne In Selection.Rows
> 'Boucle sur chaque cellule de la ligne
> For Each Cell In Ligne.Cells
> Valeur = Valeur & " " & Cell.Value
> ' résultats intermédiaires
> 'MsgBox valeur
> Next Cell
> 'MsgBox Valeur
> 'A = A + 1
> 'toexe = "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line" & A & ".txt"
>
> ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> 'ShellAndWait "cmd.exe /c" & Valeur & " | clip ", 1
> Valeur = "" 'après chaque boucle il vide le contenu de la variable Valeur
> Next
> End If
>
> Dim wshShell
> Set wshShell = CreateObject("wscript.shell")
> 'Execution du fichier - ouverture d'un fichier txt
> wshShell.Run "C:addResrv_multi_line.txt"
>
> End Sub
>
>
> 'Window States (Per Help for Shell function):
> ' 1, 5, 9 Normal with focus.
> ' 2 Minimized with focus.
> ' 3 Maximized with focus.
> ' 4, 8 Normal without focus.
> ' 6, 7 Minimized without focus.
> Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
> Dim hProg As Long
> Dim hProcess As Long, ExitCode As Long
>
> 'fill in the missing parameter and execute the program
> If IsMissing(WindowState) Then WindowState = 1
> hProg = Shell(PathName, WindowState)
> 'hProg is a "process ID under Win32. To get the process handle:
> hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
> Do
> 'populate Exitcode variable
> GetExitCodeProcess hProcess, ExitCode
> DoEvents
> Loop While ExitCode = STILL_ACTIVE
> End Sub
>
>
> ************************************************
>
> Cordialement.
>
>
> "michdenis" wrote:
>
> > Cette procédure fait exactement ce que tu désires.
> > Avec celle-ci, tu ne dois pas mettre la commande
> > "nslookup" dans la cellule, tu n'as comme tu désires
> > à saisir la valeur de la variable que tu veux tester.
> >
> > Tu sélectionnes ta liste et tu lances la procédure.
> >
> > P.S- N'oublie pas de modifier le chemin et le
> > nom du batchFile que tu vas créer .
> >
> > '------------------------------------------
> > Sub Créer_Et_Exécuter_Un_BatFile()
> > Dim Fichier As String, Chemin As String
> > Dim X As Long, C As Range, Texte As String
> > X = FreeFile
> >
> > '******* À RENSEIGNER ********
> > 'Où tu veux que le fichier soit créer
> > Chemin = "C:UsersPoweruser"
> > 'Nom du batchfile à créer
> > Fichier = "Denis.bat"
> > '*******************************
> > On Error Resume Next
> > 'Supprimer le fichier si il existe déjà
> > Kill Chemin & Fichier
> > 'supprime l'erreur au cas où le fichier n'exite pas
> > Err.Clear
> > 'S'assure que la selection est une plage de cellule
> >
> > If TypeName(Selection) = "Range" Then
> > 'Ce qui suit met dans la variable "texte" la
> > 'composition des lignes de code du BatchFile
> > Texte = "Echo on " & vbCrLf
> > Texte = "cd" & vbCrLf
> > Texte = texte & "c:" & vbCrLf
> > Texte = texte & "Cls" & vbCrLf
> > For Each C In Selection.Cells
> > If C <> "" Then
> > texte = Texte & "nslookup.exe " & C & vbCrLf
> > texte = Texte & "Pause" & vbCrLf
> > End If
> > Next
> > Texte = Texte & "exit"
> > End If
> > 'Création du fichier lui-même
> > Open Chemin & Fichier For Append As #X
> > 'Copie de la variable dans le fichier
> > Print #X, Texte
> > 'Fermeture du fichier batchfile
> > Close #X
> > 'Exécution du BatchFile
> > Shell "Cmd.exe /K " & Chemin & Fichier, vbNormalFocus
> > End Sub
> > '------------------------------------------
> >
> >
> >
> >
> >


Avatar
michdenis
Que veux-tu dire par "ouvrir un cmd.exe" ?
C'est un exécutable et non un fichier texte...

Que veux-tu faire par la commande sendkeys ?
"ALT+SPACE+E+P " ceci n'est pas une réponse...

Tu expliques ?


"ben" a écrit dans le message de groupe de discussion :

Bonjour,

Est-possible d'ouvrir un cmd.exe et faire un senkeys de cette combinaison
de touche : ALT+SPACE+E+P ?.

Merci.

Cordialement.

"michdenis" wrote:

Voici quelques explications sur cette ligne de commande :
ShellAndWait "cmd.exe /c " & Valeur & ">>C:addResrv_multi_line.txt", 1

L'utilisation des ">>" permet d'ajouter le résultat d'une commande DOS
à l'information du fichier déjà existant si le fichier n'est pas vide.
tu peux si tu le désires effacer et écrire le résultat de la
commande en utilisant un seul ">" dans la commande.
ShellAndWait "cmd.exe /c " & Valeur & ">C:addResrv_multi_line.txt", 1

On pourrait aussi le faire de cette façon en détournant un peu le rôle
de la commande "Echo off" en DOS comme ceci :
Dans votre programme, cela se traduit de façon suivante
Commande = commande = "cmd.exe /c echo off >C:addResrv_multi_line.txt"
Shell commande, vbHide
Vous insérez ces 2 lignes de code avant le début de la boucle. Cela videra
complètement le contenu du fichier existant.

Pour supprimer un fichier existant
Kill C:addResrv_multi_line.txt

Attention, le fichier est totalement détruit, il ne se
retrouve pas à la poubelle de Windows.

Pour effacer le contenu du fichier texte, vous pouvez utiliser
la même commande :



"ben" a écrit dans le message de groupe de discussion :

Bonjour,

Et merci infiniment pour votre aide.

J'aimerais pour finaliser le projet faire au cas ou, un clear du fichier
txt ?.
Ou bien la suppression du fichier s'il existe avant l'execution.

Merci de me faire les 2 propositions.

Cordialement.



"michdenis" wrote:

> Les 2 lignes ajoutées vont s'exécuter pour tous les items
> contenus dans la boucle. Si tu ne désires inscrire une date
> que pour l'ensemble du code contenu dans la boucle,
> place ces 2 lignes de code avant le début de la ligne For ...
> de la même procédure.
>
> commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> Shell commande, vbHide
>
>
> "michdenis" a écrit dans le message de groupe de discussion :
> #
> Attention aux coupures de lignes de code par le service de messagerie.
>
> N.B. Semble-t-il que la solution retenue s'est éloignée de ta
> demande initiale !
>
> Dans ton code, avant cette ligne de la procédure: Test
> ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
>
> Tu inscris les commandes dans cet ordre :
> Tu peux aussi modifier le format date que tu désires dans "dd/mmm/yyyy H:MM:SS"
> commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> Shell commande, vbHide
> ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
>
> P.S- Tu dois ajouter à la déclaration des variables en début de procédure
> Dim Commande As String
>
>
> "ben" a écrit dans le message de groupe de discussion
> :
>
> Bonjour michdenis,
>
> Voici ma solution, cependant j'aimerais juste rajouter la date d'exécution
> pour chaque traitement, car j'ai qu'un seule fichier.
> ************************************************
> Declare Function OpenProcess Lib "kernel32" _
> (ByVal dwDesiredAccess As Long, _
> ByVal bInheritHandle As Long, _
> ByVal dwProcessId As Long) As Long
>
> Declare Function GetExitCodeProcess Lib "kernel32" _
> (ByVal hProcess As Long, _
> lpExitCode As Long) As Long
>
> Public Const PROCESS_QUERY_INFORMATION = &H400
> Public Const STILL_ACTIVE = &H103
>
> 'Sub Test()
> 'Dim StartTime As Double
> 'StartTime = Now
> 'ShellAndWait "ping.exe", 1
> 'MsgBox "Gone " & Format(Now - StartTime, "s") & " seconds"
> 'End Sub
> Sub addResrv_multi_line_test()
> ' il faut sélectionner plusieurs valeurs de la ligne
> Dim Cell As Range, Ligne As Range, Valeur, A As Integer
> Dim LogFile As String
> 'vérifier si Selection est une plage de cellules
> If TypeName(Selection) = "Range" Then
> 'Boucle sur chaque ligne de la sélection
> For Each Ligne In Selection.Rows
> 'Boucle sur chaque cellule de la ligne
> For Each Cell In Ligne.Cells
> Valeur = Valeur & " " & Cell.Value
> ' résultats intermédiaires
> 'MsgBox valeur
> Next Cell
> 'MsgBox Valeur
> 'A = A + 1
> 'toexe = "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line" & A & ".txt"
>
> ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> 'ShellAndWait "cmd.exe /c" & Valeur & " | clip ", 1
> Valeur = "" 'après chaque boucle il vide le contenu de la variable Valeur
> Next
> End If
>
> Dim wshShell
> Set wshShell = CreateObject("wscript.shell")
> 'Execution du fichier - ouverture d'un fichier txt
> wshShell.Run "C:addResrv_multi_line.txt"
>
> End Sub
>
>
> 'Window States (Per Help for Shell function):
> ' 1, 5, 9 Normal with focus.
> ' 2 Minimized with focus.
> ' 3 Maximized with focus.
> ' 4, 8 Normal without focus.
> ' 6, 7 Minimized without focus.
> Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
> Dim hProg As Long
> Dim hProcess As Long, ExitCode As Long
>
> 'fill in the missing parameter and execute the program
> If IsMissing(WindowState) Then WindowState = 1
> hProg = Shell(PathName, WindowState)
> 'hProg is a "process ID under Win32. To get the process handle:
> hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
> Do
> 'populate Exitcode variable
> GetExitCodeProcess hProcess, ExitCode
> DoEvents
> Loop While ExitCode = STILL_ACTIVE
> End Sub
>
>
> ************************************************
>
> Cordialement.
>
>
> "michdenis" wrote:
>
> > Cette procédure fait exactement ce que tu désires.
> > Avec celle-ci, tu ne dois pas mettre la commande
> > "nslookup" dans la cellule, tu n'as comme tu désires
> > à saisir la valeur de la variable que tu veux tester.
> >
> > Tu sélectionnes ta liste et tu lances la procédure.
> >
> > P.S- N'oublie pas de modifier le chemin et le
> > nom du batchFile que tu vas créer .
> >
> > '------------------------------------------
> > Sub Créer_Et_Exécuter_Un_BatFile()
> > Dim Fichier As String, Chemin As String
> > Dim X As Long, C As Range, Texte As String
> > X = FreeFile
> >
> > '******* À RENSEIGNER ********
> > 'Où tu veux que le fichier soit créer
> > Chemin = "C:UsersPoweruser"
> > 'Nom du batchfile à créer
> > Fichier = "Denis.bat"
> > '*******************************
> > On Error Resume Next
> > 'Supprimer le fichier si il existe déjà
> > Kill Chemin & Fichier
> > 'supprime l'erreur au cas où le fichier n'exite pas
> > Err.Clear
> > 'S'assure que la selection est une plage de cellule
> >
> > If TypeName(Selection) = "Range" Then
> > 'Ce qui suit met dans la variable "texte" la
> > 'composition des lignes de code du BatchFile
> > Texte = "Echo on " & vbCrLf
> > Texte = "cd" & vbCrLf
> > Texte = texte & "c:" & vbCrLf
> > Texte = texte & "Cls" & vbCrLf
> > For Each C In Selection.Cells
> > If C <> "" Then
> > texte = Texte & "nslookup.exe " & C & vbCrLf
> > texte = Texte & "Pause" & vbCrLf
> > End If
> > Next
> > Texte = Texte & "exit"
> > End If
> > 'Création du fichier lui-même
> > Open Chemin & Fichier For Append As #X
> > 'Copie de la variable dans le fichier
> > Print #X, Texte
> > 'Fermeture du fichier batchfile
> > Close #X
> > 'Exécution du BatchFile
> > Shell "Cmd.exe /K " & Chemin & Fichier, vbNormalFocus
> > End Sub
> > '------------------------------------------
> >
> >
> >
> >
> >


Avatar
ben
Bonjour,

Plus clairement :

Sub Command2_Click()
Shell "CMD.EXE", vbNormalFocus
SendKeys "% ep", 1 'paste en dos : ALT+SPACE+E+P

End Sub

PS : ne fonction pas encore...uniquement le ALT mais pas au niveau
dosCordialement.

"michdenis" wrote:

Que veux-tu dire par "ouvrir un cmd.exe" ?
C'est un exécutable et non un fichier texte...

Que veux-tu faire par la commande sendkeys ?
"ALT+SPACE+E+P " ceci n'est pas une réponse...

Tu expliques ?


"ben" a écrit dans le message de groupe de discussion :

Bonjour,

Est-possible d'ouvrir un cmd.exe et faire un senkeys de cette combinaison
de touche : ALT+SPACE+E+P ?.

Merci.

Cordialement.

"michdenis" wrote:

> Voici quelques explications sur cette ligne de commande :
> ShellAndWait "cmd.exe /c " & Valeur & ">>C:addResrv_multi_line.txt", 1
>
> L'utilisation des ">>" permet d'ajouter le résultat d'une commande DOS
> à l'information du fichier déjà existant si le fichier n'est pas vide.
> tu peux si tu le désires effacer et écrire le résultat de la
> commande en utilisant un seul ">" dans la commande.
> ShellAndWait "cmd.exe /c " & Valeur & ">C:addResrv_multi_line.txt", 1
>
> On pourrait aussi le faire de cette façon en détournant un peu le rôle
> de la commande "Echo off" en DOS comme ceci :
> Dans votre programme, cela se traduit de façon suivante
> Commande = commande = "cmd.exe /c echo off >C:addResrv_multi_line.txt"
> Shell commande, vbHide
> Vous insérez ces 2 lignes de code avant le début de la boucle. Cela videra
> complètement le contenu du fichier existant.
>
> Pour supprimer un fichier existant
> Kill C:addResrv_multi_line.txt
>
> Attention, le fichier est totalement détruit, il ne se
> retrouve pas à la poubelle de Windows.
>
> Pour effacer le contenu du fichier texte, vous pouvez utiliser
> la même commande :
>
>
>
> "ben" a écrit dans le message de groupe de discussion :
>
> Bonjour,
>
> Et merci infiniment pour votre aide.
>
> J'aimerais pour finaliser le projet faire au cas ou, un clear du fichier
> txt ?.
> Ou bien la suppression du fichier s'il existe avant l'execution.
>
> Merci de me faire les 2 propositions.
>
> Cordialement.
>
>
>
> "michdenis" wrote:
>
> > Les 2 lignes ajoutées vont s'exécuter pour tous les items
> > contenus dans la boucle. Si tu ne désires inscrire une date
> > que pour l'ensemble du code contenu dans la boucle,
> > place ces 2 lignes de code avant le début de la ligne For ...
> > de la même procédure.
> >
> > commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> > & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> > Shell commande, vbHide
> >
> >
> > "michdenis" a écrit dans le message de groupe de discussion :
> > #
> > Attention aux coupures de lignes de code par le service de messagerie.
> >
> > N.B. Semble-t-il que la solution retenue s'est éloignée de ta
> > demande initiale !
> >
> > Dans ton code, avant cette ligne de la procédure: Test
> > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> >
> > Tu inscris les commandes dans cet ordre :
> > Tu peux aussi modifier le format date que tu désires dans "dd/mmm/yyyy H:MM:SS"
> > commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> > & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> > Shell commande, vbHide
> > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> >
> > P.S- Tu dois ajouter à la déclaration des variables en début de procédure
> > Dim Commande As String
> >
> >
> > "ben" a écrit dans le message de groupe de discussion
> > :
> >
> > Bonjour michdenis,
> >
> > Voici ma solution, cependant j'aimerais juste rajouter la date d'exécution
> > pour chaque traitement, car j'ai qu'un seule fichier.
> > ************************************************
> > Declare Function OpenProcess Lib "kernel32" _
> > (ByVal dwDesiredAccess As Long, _
> > ByVal bInheritHandle As Long, _
> > ByVal dwProcessId As Long) As Long
> >
> > Declare Function GetExitCodeProcess Lib "kernel32" _
> > (ByVal hProcess As Long, _
> > lpExitCode As Long) As Long
> >
> > Public Const PROCESS_QUERY_INFORMATION = &H400
> > Public Const STILL_ACTIVE = &H103
> >
> > 'Sub Test()
> > 'Dim StartTime As Double
> > 'StartTime = Now
> > 'ShellAndWait "ping.exe", 1
> > 'MsgBox "Gone " & Format(Now - StartTime, "s") & " seconds"
> > 'End Sub
> > Sub addResrv_multi_line_test()
> > ' il faut sélectionner plusieurs valeurs de la ligne
> > Dim Cell As Range, Ligne As Range, Valeur, A As Integer
> > Dim LogFile As String
> > 'vérifier si Selection est une plage de cellules
> > If TypeName(Selection) = "Range" Then
> > 'Boucle sur chaque ligne de la sélection
> > For Each Ligne In Selection.Rows
> > 'Boucle sur chaque cellule de la ligne
> > For Each Cell In Ligne.Cells
> > Valeur = Valeur & " " & Cell.Value
> > ' résultats intermédiaires
> > 'MsgBox valeur
> > Next Cell
> > 'MsgBox Valeur
> > 'A = A + 1
> > 'toexe = "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line" & A & ".txt"
> >
> > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> > 'ShellAndWait "cmd.exe /c" & Valeur & " | clip ", 1
> > Valeur = "" 'après chaque boucle il vide le contenu de la variable Valeur
> > Next
> > End If
> >
> > Dim wshShell
> > Set wshShell = CreateObject("wscript.shell")
> > 'Execution du fichier - ouverture d'un fichier txt
> > wshShell.Run "C:addResrv_multi_line.txt"
> >
> > End Sub
> >
> >
> > 'Window States (Per Help for Shell function):
> > ' 1, 5, 9 Normal with focus.
> > ' 2 Minimized with focus.
> > ' 3 Maximized with focus.
> > ' 4, 8 Normal without focus.
> > ' 6, 7 Minimized without focus.
> > Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
> > Dim hProg As Long
> > Dim hProcess As Long, ExitCode As Long
> >
> > 'fill in the missing parameter and execute the program
> > If IsMissing(WindowState) Then WindowState = 1
> > hProg = Shell(PathName, WindowState)
> > 'hProg is a "process ID under Win32. To get the process handle:
> > hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
> > Do
> > 'populate Exitcode variable
> > GetExitCodeProcess hProcess, ExitCode
> > DoEvents
> > Loop While ExitCode = STILL_ACTIVE
> > End Sub
> >
> >
> > ************************************************
> >
> > Cordialement.
> >
> >
> > "michdenis" wrote:
> >
> > > Cette procédure fait exactement ce que tu désires.
> > > Avec celle-ci, tu ne dois pas mettre la commande
> > > "nslookup" dans la cellule, tu n'as comme tu désires
> > > à saisir la valeur de la variable que tu veux tester.
> > >
> > > Tu sélectionnes ta liste et tu lances la procédure.
> > >
> > > P.S- N'oublie pas de modifier le chemin et le
> > > nom du batchFile que tu vas créer .
> > >
> > > '------------------------------------------
> > > Sub Créer_Et_Exécuter_Un_BatFile()
> > > Dim Fichier As String, Chemin As String
> > > Dim X As Long, C As Range, Texte As String
> > > X = FreeFile
> > >
> > > '******* À RENSEIGNER ********
> > > 'Où tu veux que le fichier soit créer
> > > Chemin = "C:UsersPoweruser"
> > > 'Nom du batchfile à créer
> > > Fichier = "Denis.bat"
> > > '*******************************
> > > On Error Resume Next
> > > 'Supprimer le fichier si il existe déjà
> > > Kill Chemin & Fichier
> > > 'supprime l'erreur au cas où le fichier n'exite pas
> > > Err.Clear
> > > 'S'assure que la selection est une plage de cellule
> > >
> > > If TypeName(Selection) = "Range" Then
> > > 'Ce qui suit met dans la variable "texte" la
> > > 'composition des lignes de code du BatchFile
> > > Texte = "Echo on " & vbCrLf
> > > Texte = "cd" & vbCrLf
> > > Texte = texte & "c:" & vbCrLf
> > > Texte = texte & "Cls" & vbCrLf
> > > For Each C In Selection.Cells
> > > If C <> "" Then
> > > texte = Texte & "nslookup.exe " & C & vbCrLf
> > > texte = Texte & "Pause" & vbCrLf
> > > End If
> > > Next
> > > Texte = Texte & "exit"
> > > End If
> > > 'Création du fichier lui-même
> > > Open Chemin & Fichier For Append As #X
> > > 'Copie de la variable dans le fichier
> > > Print #X, Texte
> > > 'Fermeture du fichier batchfile
> > > Close #X
> > > 'Exécution du BatchFile
> > > Shell "Cmd.exe /K " & Chemin & Fichier, vbNormalFocus
> > > End Sub
> > > '------------------------------------------
> > >
> > >
> > >
> > >
> > >


Avatar
ben
Rebonjour,

Info supllémentaire qui devrait fonctionner dans visual basic :
http://support.microsoft.com/kb/77394/fr


Sub Command1_Click()
progname = "Microsoft Visual Basic"
clipboard.Clear
clipboard.SetText DosKeys.Text + Chr$(13) ' Append a <CR>.
AppActivate DosTitle.Text
SendKeys "% ep", 1
AppActivate progname
End Sub

Si on pouvait l'adapter à excel...?.

Cordialement.

"ben" wrote:

Bonjour,

Plus clairement :

Sub Command2_Click()
Shell "CMD.EXE", vbNormalFocus
SendKeys "% ep", 1 'paste en dos : ALT+SPACE+E+P

End Sub

PS : ne fonction pas encore...uniquement le ALT mais pas au niveau
dosCordialement.

"michdenis" wrote:

> Que veux-tu dire par "ouvrir un cmd.exe" ?
> C'est un exécutable et non un fichier texte...
>
> Que veux-tu faire par la commande sendkeys ?
> "ALT+SPACE+E+P " ceci n'est pas une réponse...
>
> Tu expliques ?
>
>
> "ben" a écrit dans le message de groupe de discussion :
>
> Bonjour,
>
> Est-possible d'ouvrir un cmd.exe et faire un senkeys de cette combinaison
> de touche : ALT+SPACE+E+P ?.
>
> Merci.
>
> Cordialement.
>
> "michdenis" wrote:
>
> > Voici quelques explications sur cette ligne de commande :
> > ShellAndWait "cmd.exe /c " & Valeur & ">>C:addResrv_multi_line.txt", 1
> >
> > L'utilisation des ">>" permet d'ajouter le résultat d'une commande DOS
> > à l'information du fichier déjà existant si le fichier n'est pas vide.
> > tu peux si tu le désires effacer et écrire le résultat de la
> > commande en utilisant un seul ">" dans la commande.
> > ShellAndWait "cmd.exe /c " & Valeur & ">C:addResrv_multi_line.txt", 1
> >
> > On pourrait aussi le faire de cette façon en détournant un peu le rôle
> > de la commande "Echo off" en DOS comme ceci :
> > Dans votre programme, cela se traduit de façon suivante
> > Commande = commande = "cmd.exe /c echo off >C:addResrv_multi_line.txt"
> > Shell commande, vbHide
> > Vous insérez ces 2 lignes de code avant le début de la boucle. Cela videra
> > complètement le contenu du fichier existant.
> >
> > Pour supprimer un fichier existant
> > Kill C:addResrv_multi_line.txt
> >
> > Attention, le fichier est totalement détruit, il ne se
> > retrouve pas à la poubelle de Windows.
> >
> > Pour effacer le contenu du fichier texte, vous pouvez utiliser
> > la même commande :
> >
> >
> >
> > "ben" a écrit dans le message de groupe de discussion :
> >
> > Bonjour,
> >
> > Et merci infiniment pour votre aide.
> >
> > J'aimerais pour finaliser le projet faire au cas ou, un clear du fichier
> > txt ?.
> > Ou bien la suppression du fichier s'il existe avant l'execution.
> >
> > Merci de me faire les 2 propositions.
> >
> > Cordialement.
> >
> >
> >
> > "michdenis" wrote:
> >
> > > Les 2 lignes ajoutées vont s'exécuter pour tous les items
> > > contenus dans la boucle. Si tu ne désires inscrire une date
> > > que pour l'ensemble du code contenu dans la boucle,
> > > place ces 2 lignes de code avant le début de la ligne For ...
> > > de la même procédure.
> > >
> > > commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> > > & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> > > Shell commande, vbHide
> > >
> > >
> > > "michdenis" a écrit dans le message de groupe de discussion :
> > > #
> > > Attention aux coupures de lignes de code par le service de messagerie.
> > >
> > > N.B. Semble-t-il que la solution retenue s'est éloignée de ta
> > > demande initiale !
> > >
> > > Dans ton code, avant cette ligne de la procédure: Test
> > > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> > >
> > > Tu inscris les commandes dans cet ordre :
> > > Tu peux aussi modifier le format date que tu désires dans "dd/mmm/yyyy H:MM:SS"
> > > commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> > > & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> > > Shell commande, vbHide
> > > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> > >
> > > P.S- Tu dois ajouter à la déclaration des variables en début de procédure
> > > Dim Commande As String
> > >
> > >
> > > "ben" a écrit dans le message de groupe de discussion
> > > :
> > >
> > > Bonjour michdenis,
> > >
> > > Voici ma solution, cependant j'aimerais juste rajouter la date d'exécution
> > > pour chaque traitement, car j'ai qu'un seule fichier.
> > > ************************************************
> > > Declare Function OpenProcess Lib "kernel32" _
> > > (ByVal dwDesiredAccess As Long, _
> > > ByVal bInheritHandle As Long, _
> > > ByVal dwProcessId As Long) As Long
> > >
> > > Declare Function GetExitCodeProcess Lib "kernel32" _
> > > (ByVal hProcess As Long, _
> > > lpExitCode As Long) As Long
> > >
> > > Public Const PROCESS_QUERY_INFORMATION = &H400
> > > Public Const STILL_ACTIVE = &H103
> > >
> > > 'Sub Test()
> > > 'Dim StartTime As Double
> > > 'StartTime = Now
> > > 'ShellAndWait "ping.exe", 1
> > > 'MsgBox "Gone " & Format(Now - StartTime, "s") & " seconds"
> > > 'End Sub
> > > Sub addResrv_multi_line_test()
> > > ' il faut sélectionner plusieurs valeurs de la ligne
> > > Dim Cell As Range, Ligne As Range, Valeur, A As Integer
> > > Dim LogFile As String
> > > 'vérifier si Selection est une plage de cellules
> > > If TypeName(Selection) = "Range" Then
> > > 'Boucle sur chaque ligne de la sélection
> > > For Each Ligne In Selection.Rows
> > > 'Boucle sur chaque cellule de la ligne
> > > For Each Cell In Ligne.Cells
> > > Valeur = Valeur & " " & Cell.Value
> > > ' résultats intermédiaires
> > > 'MsgBox valeur
> > > Next Cell
> > > 'MsgBox Valeur
> > > 'A = A + 1
> > > 'toexe = "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line" & A & ".txt"
> > >
> > > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> > > 'ShellAndWait "cmd.exe /c" & Valeur & " | clip ", 1
> > > Valeur = "" 'après chaque boucle il vide le contenu de la variable Valeur
> > > Next
> > > End If
> > >
> > > Dim wshShell
> > > Set wshShell = CreateObject("wscript.shell")
> > > 'Execution du fichier - ouverture d'un fichier txt
> > > wshShell.Run "C:addResrv_multi_line.txt"
> > >
> > > End Sub
> > >
> > >
> > > 'Window States (Per Help for Shell function):
> > > ' 1, 5, 9 Normal with focus.
> > > ' 2 Minimized with focus.
> > > ' 3 Maximized with focus.
> > > ' 4, 8 Normal without focus.
> > > ' 6, 7 Minimized without focus.
> > > Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
> > > Dim hProg As Long
> > > Dim hProcess As Long, ExitCode As Long
> > >
> > > 'fill in the missing parameter and execute the program
> > > If IsMissing(WindowState) Then WindowState = 1
> > > hProg = Shell(PathName, WindowState)
> > > 'hProg is a "process ID under Win32. To get the process handle:
> > > hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
> > > Do
> > > 'populate Exitcode variable
> > > GetExitCodeProcess hProcess, ExitCode
> > > DoEvents
> > > Loop While ExitCode = STILL_ACTIVE
> > > End Sub
> > >
> > >
> > > ************************************************
> > >
> > > Cordialement.
> > >
> > >
> > > "michdenis" wrote:
> > >
> > > > Cette procédure fait exactement ce que tu désires.
> > > > Avec celle-ci, tu ne dois pas mettre la commande
> > > > "nslookup" dans la cellule, tu n'as comme tu désires
> > > > à saisir la valeur de la variable que tu veux tester.
> > > >
> > > > Tu sélectionnes ta liste et tu lances la procédure.
> > > >
> > > > P.S- N'oublie pas de modifier le chemin et le
> > > > nom du batchFile que tu vas créer .
> > > >
> > > > '------------------------------------------
> > > > Sub Créer_Et_Exécuter_Un_BatFile()
> > > > Dim Fichier As String, Chemin As String
> > > > Dim X As Long, C As Range, Texte As String
> > > > X = FreeFile
> > > >
> > > > '******* À RENSEIGNER ********
> > > > 'Où tu veux que le fichier soit créer
> > > > Chemin = "C:UsersPoweruser"
> > > > 'Nom du batchfile à créer
> > > > Fichier = "Denis.bat"
> > > > '*******************************
> > > > On Error Resume Next
> > > > 'Supprimer le fichier si il existe déjà
> > > > Kill Chemin & Fichier
> > > > 'supprime l'erreur au cas où le fichier n'exite pas
> > > > Err.Clear
> > > > 'S'assure que la selection est une plage de cellule
> > > >
> > > > If TypeName(Selection) = "Range" Then
> > > > 'Ce qui suit met dans la variable "texte" la
> > > > 'composition des lignes de code du BatchFile
> > > > Texte = "Echo on " & vbCrLf
> > > > Texte = "cd" & vbCrLf
> > > > Texte = texte & "c:" & vbCrLf
> > > > Texte = texte & "Cls" & vbCrLf
> > > > For Each C In Selection.Cells
> > > > If C <> "" Then
> > > > texte = Texte & "nslookup.exe " & C & vbCrLf
> > > > texte = Texte & "Pause" & vbCrLf
> > > > End If
> > > > Next
> > > > Texte = Texte & "exit"
> > > > End If
> > > > 'Création du fichier lui-même
> > > > Open Chemin & Fichier For Append As #X
> > > > 'Copie de la variable dans le fichier
> > > > Print #X, Texte
> > > > 'Fermeture du fichier batchfile
> > > > Close #X
> > > > 'Exécution du BatchFile
> > > > Shell "Cmd.exe /K " & Chemin & Fichier, vbNormalFocus
> > > > End Sub
> > > > '------------------------------------------
> > > >
> > > >
> > > >
> > > >
> > > >


Avatar
michdenis
Ce n'est pas du code que je veux obtenir ?
mais savoir ce que tu veux faire ?

Si tu sais comment faire, ne pose pas de question, fais-le !



"ben" a écrit dans le message de groupe de discussion :

Rebonjour,

Info supllémentaire qui devrait fonctionner dans visual basic :
http://support.microsoft.com/kb/77394/fr


Sub Command1_Click()
progname = "Microsoft Visual Basic"
clipboard.Clear
clipboard.SetText DosKeys.Text + Chr$(13) ' Append a <CR>.
AppActivate DosTitle.Text
SendKeys "% ep", 1
AppActivate progname
End Sub

Si on pouvait l'adapter à excel...?.

Cordialement.

"ben" wrote:

Bonjour,

Plus clairement :

Sub Command2_Click()
Shell "CMD.EXE", vbNormalFocus
SendKeys "% ep", 1 'paste en dos : ALT+SPACE+E+P

End Sub

PS : ne fonction pas encore...uniquement le ALT mais pas au niveau
dosCordialement.

"michdenis" wrote:

> Que veux-tu dire par "ouvrir un cmd.exe" ?
> C'est un exécutable et non un fichier texte...
>
> Que veux-tu faire par la commande sendkeys ?
> "ALT+SPACE+E+P " ceci n'est pas une réponse...
>
> Tu expliques ?
>
>
> "ben" a écrit dans le message de groupe de discussion
> :
>
> Bonjour,
>
> Est-possible d'ouvrir un cmd.exe et faire un senkeys de cette combinaison
> de touche : ALT+SPACE+E+P ?.
>
> Merci.
>
> Cordialement.
>
> "michdenis" wrote:
>
> > Voici quelques explications sur cette ligne de commande :
> > ShellAndWait "cmd.exe /c " & Valeur & ">>C:addResrv_multi_line.txt", 1
> >
> > L'utilisation des ">>" permet d'ajouter le résultat d'une commande DOS
> > à l'information du fichier déjà existant si le fichier n'est pas vide.
> > tu peux si tu le désires effacer et écrire le résultat de la
> > commande en utilisant un seul ">" dans la commande.
> > ShellAndWait "cmd.exe /c " & Valeur & ">C:addResrv_multi_line.txt", 1
> >
> > On pourrait aussi le faire de cette façon en détournant un peu le rôle
> > de la commande "Echo off" en DOS comme ceci :
> > Dans votre programme, cela se traduit de façon suivante
> > Commande = commande = "cmd.exe /c echo off >C:addResrv_multi_line.txt"
> > Shell commande, vbHide
> > Vous insérez ces 2 lignes de code avant le début de la boucle. Cela videra
> > complètement le contenu du fichier existant.
> >
> > Pour supprimer un fichier existant
> > Kill C:addResrv_multi_line.txt
> >
> > Attention, le fichier est totalement détruit, il ne se
> > retrouve pas à la poubelle de Windows.
> >
> > Pour effacer le contenu du fichier texte, vous pouvez utiliser
> > la même commande :
> >
> >
> >
> > "ben" a écrit dans le message de groupe de
> > discussion :
> >
> > Bonjour,
> >
> > Et merci infiniment pour votre aide.
> >
> > J'aimerais pour finaliser le projet faire au cas ou, un clear du fichier
> > txt ?.
> > Ou bien la suppression du fichier s'il existe avant l'execution.
> >
> > Merci de me faire les 2 propositions.
> >
> > Cordialement.
> >
> >
> >
> > "michdenis" wrote:
> >
> > > Les 2 lignes ajoutées vont s'exécuter pour tous les items
> > > contenus dans la boucle. Si tu ne désires inscrire une date
> > > que pour l'ensemble du code contenu dans la boucle,
> > > place ces 2 lignes de code avant le début de la ligne For ...
> > > de la même procédure.
> > >
> > > commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> > > & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> > > Shell commande, vbHide
> > >
> > >
> > > "michdenis" a écrit dans le message de groupe de
> > > discussion :
> > > #
> > > Attention aux coupures de lignes de code par le service de messagerie.
> > >
> > > N.B. Semble-t-il que la solution retenue s'est éloignée de ta
> > > demande initiale !
> > >
> > > Dans ton code, avant cette ligne de la procédure: Test
> > > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> > >
> > > Tu inscris les commandes dans cet ordre :
> > > Tu peux aussi modifier le format date que tu désires dans "dd/mmm/yyyy H:MM:SS"
> > > commande = "cmd.exe /c Echo La date et l'heure de l'exécution est : " _
> > > & Format(Now, "dd/mmm/yyyy H:MM:SS") & ">>C:addResrv_multi_line.txt"
> > > Shell commande, vbHide
> > > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> > >
> > > P.S- Tu dois ajouter à la déclaration des variables en début de procédure
> > > Dim Commande As String
> > >
> > >
> > > "ben" a écrit dans le message de groupe de
> > > discussion
> > > :
> > >
> > > Bonjour michdenis,
> > >
> > > Voici ma solution, cependant j'aimerais juste rajouter la date d'exécution
> > > pour chaque traitement, car j'ai qu'un seule fichier.
> > > ************************************************
> > > Declare Function OpenProcess Lib "kernel32" _
> > > (ByVal dwDesiredAccess As Long, _
> > > ByVal bInheritHandle As Long, _
> > > ByVal dwProcessId As Long) As Long
> > >
> > > Declare Function GetExitCodeProcess Lib "kernel32" _
> > > (ByVal hProcess As Long, _
> > > lpExitCode As Long) As Long
> > >
> > > Public Const PROCESS_QUERY_INFORMATION = &H400
> > > Public Const STILL_ACTIVE = &H103
> > >
> > > 'Sub Test()
> > > 'Dim StartTime As Double
> > > 'StartTime = Now
> > > 'ShellAndWait "ping.exe", 1
> > > 'MsgBox "Gone " & Format(Now - StartTime, "s") & " seconds"
> > > 'End Sub
> > > Sub addResrv_multi_line_test()
> > > ' il faut sélectionner plusieurs valeurs de la ligne
> > > Dim Cell As Range, Ligne As Range, Valeur, A As Integer
> > > Dim LogFile As String
> > > 'vérifier si Selection est une plage de cellules
> > > If TypeName(Selection) = "Range" Then
> > > 'Boucle sur chaque ligne de la sélection
> > > For Each Ligne In Selection.Rows
> > > 'Boucle sur chaque cellule de la ligne
> > > For Each Cell In Ligne.Cells
> > > Valeur = Valeur & " " & Cell.Value
> > > ' résultats intermédiaires
> > > 'MsgBox valeur
> > > Next Cell
> > > 'MsgBox Valeur
> > > 'A = A + 1
> > > 'toexe = "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line" & A & ".txt"
> > >
> > > ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
> > > 'ShellAndWait "cmd.exe /c" & Valeur & " | clip ", 1
> > > Valeur = "" 'après chaque boucle il vide le contenu de la variable Valeur
> > > Next
> > > End If
> > >
> > > Dim wshShell
> > > Set wshShell = CreateObject("wscript.shell")
> > > 'Execution du fichier - ouverture d'un fichier txt
> > > wshShell.Run "C:addResrv_multi_line.txt"
> > >
> > > End Sub
> > >
> > >
> > > 'Window States (Per Help for Shell function):
> > > ' 1, 5, 9 Normal with focus.
> > > ' 2 Minimized with focus.
> > > ' 3 Maximized with focus.
> > > ' 4, 8 Normal without focus.
> > > ' 6, 7 Minimized without focus.
> > > Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
> > > Dim hProg As Long
> > > Dim hProcess As Long, ExitCode As Long
> > >
> > > 'fill in the missing parameter and execute the program
> > > If IsMissing(WindowState) Then WindowState = 1
> > > hProg = Shell(PathName, WindowState)
> > > 'hProg is a "process ID under Win32. To get the process handle:
> > > hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
> > > Do
> > > 'populate Exitcode variable
> > > GetExitCodeProcess hProcess, ExitCode
> > > DoEvents
> > > Loop While ExitCode = STILL_ACTIVE
> > > End Sub
> > >
> > >
> > > ************************************************
> > >
> > > Cordialement.
> > >
> > >
> > > "michdenis" wrote:
> > >
> > > > Cette procédure fait exactement ce que tu désires.
> > > > Avec celle-ci, tu ne dois pas mettre la commande
> > > > "nslookup" dans la cellule, tu n'as comme tu désires
> > > > à saisir la valeur de la variable que tu veux tester.
> > > >
> > > > Tu sélectionnes ta liste et tu lances la procédure.
> > > >
> > > > P.S- N'oublie pas de modifier le chemin et le
> > > > nom du batchFile que tu vas créer .
> > > >
> > > > '------------------------------------------
> > > > Sub Créer_Et_Exécuter_Un_BatFile()
> > > > Dim Fichier As String, Chemin As String
> > > > Dim X As Long, C As Range, Texte As String
> > > > X = FreeFile
> > > >
> > > > '******* À RENSEIGNER ********
> > > > 'Où tu veux que le fichier soit créer
> > > > Chemin = "C:UsersPoweruser"
> > > > 'Nom du batchfile à créer
> > > > Fichier = "Denis.bat"
> > > > '*******************************
> > > > On Error Resume Next
> > > > 'Supprimer le fichier si il existe déjà
> > > > Kill Chemin & Fichier
> > > > 'supprime l'erreur au cas où le fichier n'exite pas
> > > > Err.Clear
> > > > 'S'assure que la selection est une plage de cellule
> > > >
> > > > If TypeName(Selection) = "Range" Then
> > > > 'Ce qui suit met dans la variable "texte" la
> > > > 'composition des lignes de code du BatchFile
> > > > Texte = "Echo on " & vbCrLf
> > > > Texte = "cd" & vbCrLf
> > > > Texte = texte & "c:" & vbCrLf
> > > > Texte = texte & "Cls" & vbCrLf
> > > > For Each C In Selection.Cells
> > > > If C <> "" Then
> > > > texte = Texte & "nslookup.exe " & C & vbCrLf
> > > > texte = Texte & "Pause" & vbCrLf
> > > > End If
> > > > Next
> > > > Texte = Texte & "exit"
> > > > End If
> > > > 'Création du fichier lui-même
> > > > Open Chemin & Fichier For Append As #X
> > > > 'Copie de la variable dans le fichier
> > > > Print #X, Texte
> > > > 'Fermeture du fichier batchfile
> > > > Close #X
> > > > 'Exécution du BatchFile
> > > > Shell "Cmd.exe /K " & Chemin & Fichier, vbNormalFocus
> > > > End Sub
> > > > '------------------------------------------
> > > >
> > > >
> > > >
> > > >
> > > >


Avatar
ben
Bonjour cher ami,

Excusez-moi, je pensais qu'avec le code vous comprendriez ou je veux en
venir...

Ceci dit.

Comme le code l'indique :
Je veux coller ce que j'ai dans le presse-papier (copie d'un range) dans une
console dos via la command sendkeys.

ou une autre alternative, comment traiter tout le range dans une seul
fenêtre dos au lieu qu'il traite chaque ligne dans des fenêtres séparées.
******************************************************
If TypeName(Selection) = "Range" Then
'Boucle sur chaque ligne de la sélection
For Each Ligne In Selection.Rows
'Boucle sur chaque cellule de la ligne
For Each Cell In Ligne.Cells
Valeur = Valeur & " " & Cell.Value
' résultats intermédiaires
'MsgBox valeur
Next Cell
'MsgBox Valeur
'A = A + 1
'toexe = "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line" & A & ".txt"
ShellAndWait "cmd.exe /c" & Valeur & ">>C:addResrv_multi_line.txt", 1
'rajout
'ShellAndWait "cmd.exe /c" & Valeur & ">C:addResrv_multi_line.txt", 1
'éfface et insére la dernière cde
'ShellAndWait "cmd.exe /c" & Valeur & " | clip ", 1
Valeur = "" 'après chaque boucle il vide le contenu de la variable Valeur
Next
End If
**********************************************************


PS : Les codes que je vous ai envoyé ne sont seulement des pistes, dont j'ai
déjà fait le test et qui ne fonction pas au travers de mes piètres
connaissances.
Merci.
Cordialement.
Avatar
michdenis
Sur ce fil, je t'ai donné une façon de faire pour créer un BatchFile
en plaçant seulement une variable de la commande dans
diverses cellules d'une feuille de calcul.

La procédure crée un fichier Denis.Bat (tu peux l'éditer avec notepad)
comportant toutes les commandes que ce dernier devrait exécuter.
à la fin de la procédure, le batchFile s'exécute et chaque commande
apparaît à l'écran d'une fenêtre DOS. Pour passer à l'exécution de la
commande suivante, tu n'as qu'à appuyer sur une touche quelconque
du clavier et toujours dans la même fenêtre, la commande suivante
est appelée et exécutée.

La commande qu'elle exécute à ta demande est :
"nslookup.exe + ValeurMiseDansLaCellule
et ce pour toutes les cellules de la sélection.

Je ne vois pas en quoi le copier-coller d'une ligne de code dans la
fenêtre DOS ajouterais quoi que ce soit à la solution. Comme la
procédure ne fait pas appel à des API, sa structure est beaucoup
plus simple de même que sa compréhension.

L'as-tu même essayé ? Si oui, qu'est-ce qui ne fonctionne pas ?

Voici un copier-coller de la réponse faite :

Cette procédure fait exactement ce que tu désires.
Avec celle-ci, tu ne dois pas mettre la commande
"nslookup" dans la cellule, tu n'as comme tu désires
à saisir la valeur de la variable que tu veux tester.

Tu sélectionnes ta liste et tu lances la procédure.

P.S- N'oublie pas de modifier le chemin et le
nom du batchFile que tu vas créer .

'------------------------------------------
Sub Créer_Et_Exécuter_Un_BatFile()
Dim Fichier As String, Chemin As String
Dim X As Long, C As Range, Texte As String
X = FreeFile

'******* À RENSEIGNER ********
'Où tu veux que le fichier soit créer
Chemin = "C:UsersPoweruser"
'Nom du batchfile à créer
Fichier = "Denis.bat"
'*******************************
On Error Resume Next
'Supprimer le fichier si il existe déjà
Kill Chemin & Fichier
'supprime l'erreur au cas où le fichier n'exite pas
Err.Clear
'S'assure que la selection est une plage de cellule

If TypeName(Selection) = "Range" Then
'Ce qui suit met dans la variable "texte" la
'composition des lignes de code du BatchFile
Texte = "Echo on " & vbCrLf
Texte = "cd" & vbCrLf
Texte = texte & "c:" & vbCrLf
Texte = texte & "Cls" & vbCrLf
For Each C In Selection.Cells
If C <> "" Then
texte = Texte & "nslookup.exe " & C & vbCrLf
texte = Texte & "Pause" & vbCrLf
End If
Next
Texte = Texte & "exit"
End If
'Création du fichier lui-même
Open Chemin & Fichier For Append As #X
'Copie de la variable dans le fichier
Print #X, Texte
'Fermeture du fichier batchfile
Close #X
'Exécution du BatchFile
Shell "Cmd.exe /K " & Chemin & Fichier, vbNormalFocus
End Sub
'------------------------------------------
1 2