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

Sélection multiple manuelle : Multiple ActiveCell

14 réponses
Avatar
ben
Bonjour,

J'ai une commande qui s'étale sur plusieurs cellules.
J'aimerais lors de la sélection de celles-ci avec la souris lancer une
commande dos.

Je préfère une sélection manuelle que la concanténation des cellules.

Modèle sur une seule cellule :
> > Sub Nslookup()
>
> > ' Macro enregistre le 16/02/2009
> > ligne = ActiveCell.Row
> > colonne = ActiveCell.Column
> > cible = Cells(ligne, colonne)
> > 'MsgBox cible
> > toexe = "c:\winnt\system32\nslookup.exe" & " " & cible
> > retval = Shell(toexe, 1)
>
> > End Sub


Merci.

Cordialement.

4 réponses

1 2
Avatar
michdenis
Effectivement, après chaque boucle il faut vider le contenu
de la variable Valeur. Pour ce faire, tu attribues "" à Valeur
Valeur = "" correction apportée dans la procédure.

Pour copier la commande dans la fenêtre Cmd... si tu
trouves comment faire, j'espère que tu partageras ici ta découverte.

Si tu ne veux pas avoir plusieurs fenêtre Dos ouverte, modifie ces lignes
de code dans la procédure.
toexe = "cmd.exe /k" & valeur
RetVal = Shell(toexe, 1)
Par
toexe = "cmd.exe /c " & valeur
RetVal = Shell(toexe, vbHide)
Tu ne verras rien !

'--------------------------------
Sub addResrv_ip()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
Dim Cell As Range, Ligne As Range, Valeur

'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
toexe = "cmd.exe /k" & valeur
RetVal = Shell(toexe, 1)
Valeur = ""
Next
End if
End Sub
'--------------------------------




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

Bonjour,

J'ai fais le test sur 2 ligne2.
La premier ligne est bien exécuter.
Cependant à la 2ème il additionne la première, et là c'est pas bon...

Aussi il ouvre une fénêtre dos par ligne, c'est pas possible d'avoir tous le
traitement sur une seule fenêtre ?.

Je me disais c'était pas mieux de faire un copie des cellules et lignes et
de les coller dans le cmd, car manuellement il traite ligne par ligne :
Ex:Je n'ai pas encore trouvé comment faire un coller dans cmd (DOS)
*********************
Sub addResrv_ip3()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
' " " = espace
' pour additionner des nombres mettre + au lieu &
Dim Cell As Range
Dim Valeur
Dim rngCell As Range

For Each rngCell In Selection.Cells
Selection.Copy
'paste
Next rngCell
'toexe = "cmd.exe /k " & Paste....????? Syntaxe ou commande
coller ?.
'RetVal = Shell(toexe, 1)

End Sub
*********************************
"michdenis" wrote:



| Cela marche pour une ligne, cependant j'aimerais
| le faire en sélectionnant plusieurs lignes ?.

Sub addResrv_ip()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
Dim Cell As Range, Ligne As Range, Valeur

'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
toexe = "cmd.exe /k" & valeur
RetVal = Shell(toexe, 1)
Next
End if

End Sub






Avatar
ben
Bonjour,

Il faut que je laisse la fenêtre dos visibles afin que je vois le résultats.
A moins qu'il y a un moyen d'afficher le résultat via une msg box ?.

Concernant le coller dans dos, il faut trouver l'astuce pour récupérer les
données du presse-papier ?.

Merci.

Cordialement.

"michdenis" wrote:

Effectivement, après chaque boucle il faut vider le contenu
de la variable Valeur. Pour ce faire, tu attribues "" à Valeur
Valeur = "" correction apportée dans la procédure.

Pour copier la commande dans la fenêtre Cmd... si tu
trouves comment faire, j'espère que tu partageras ici ta découverte.

Si tu ne veux pas avoir plusieurs fenêtre Dos ouverte, modifie ces lignes
de code dans la procédure.
toexe = "cmd.exe /k" & valeur
RetVal = Shell(toexe, 1)
Par
toexe = "cmd.exe /c " & valeur
RetVal = Shell(toexe, vbHide)
Tu ne verras rien !

'--------------------------------
Sub addResrv_ip()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
Dim Cell As Range, Ligne As Range, Valeur

'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
toexe = "cmd.exe /k" & valeur
RetVal = Shell(toexe, 1)
Valeur = ""
Next
End if
End Sub
'--------------------------------




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

Bonjour,

J'ai fais le test sur 2 ligne2.
La premier ligne est bien exécuter.
Cependant à la 2ème il additionne la première, et là c'est pas bon...

Aussi il ouvre une fénêtre dos par ligne, c'est pas possible d'avoir tous le
traitement sur une seule fenêtre ?.

Je me disais c'était pas mieux de faire un copie des cellules et lignes et
de les coller dans le cmd, car manuellement il traite ligne par ligne :
Ex:Je n'ai pas encore trouvé comment faire un coller dans cmd (DOS)
*********************
Sub addResrv_ip3()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
' " " = espace
' pour additionner des nombres mettre + au lieu &
Dim Cell As Range
Dim Valeur
Dim rngCell As Range

For Each rngCell In Selection.Cells
Selection.Copy
'paste >
Next rngCell
'toexe = "cmd.exe /k " & Paste....????? Syntaxe ou commande
coller ?.
'RetVal = Shell(toexe, 1)

End Sub
*********************************
"michdenis" wrote:

>
>
> | Cela marche pour une ligne, cependant j'aimerais
> | le faire en sélectionnant plusieurs lignes ?.
>
> Sub addResrv_ip()
> ' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
> Dim Cell As Range, Ligne As Range, Valeur
>
> '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
> toexe = "cmd.exe /k" & valeur
> RetVal = Shell(toexe, 1)
> Next
> End if
>
> End Sub
>
>
>
>


Avatar
michdenis
Non mais tu peux afficher le résultat dans un fichier texte
pour consultation future.
Un fichier texte par exécution de la commande.
Dans la procédure : le fichier est à la racine de c:denis. x .txt

'-------------------------------------
Sub addResrv_ip()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
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:>Denis" & A & ".txt"
RetVal = Shell(toexe, vbHide)
Valeur = ""
Next
End If
End Sub
'-------------------------------------





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

Bonjour,

Il faut que je laisse la fenêtre dos visibles afin que je vois le résultats.
A moins qu'il y a un moyen d'afficher le résultat via une msg box ?.

Concernant le coller dans dos, il faut trouver l'astuce pour récupérer les
données du presse-papier ?.

Merci.

Cordialement.

"michdenis" wrote:

Effectivement, après chaque boucle il faut vider le contenu
de la variable Valeur. Pour ce faire, tu attribues "" à Valeur
Valeur = "" correction apportée dans la procédure.

Pour copier la commande dans la fenêtre Cmd... si tu
trouves comment faire, j'espère que tu partageras ici ta découverte.

Si tu ne veux pas avoir plusieurs fenêtre Dos ouverte, modifie ces lignes
de code dans la procédure.
toexe = "cmd.exe /k" & valeur
RetVal = Shell(toexe, 1)
Par
toexe = "cmd.exe /c " & valeur
RetVal = Shell(toexe, vbHide)
Tu ne verras rien !

'--------------------------------
Sub addResrv_ip()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
Dim Cell As Range, Ligne As Range, Valeur

'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
toexe = "cmd.exe /k" & valeur
RetVal = Shell(toexe, 1)
Valeur = ""
Next
End if
End Sub
'--------------------------------




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

Bonjour,

J'ai fais le test sur 2 ligne2.
La premier ligne est bien exécuter.
Cependant à la 2ème il additionne la première, et là c'est pas bon...

Aussi il ouvre une fénêtre dos par ligne, c'est pas possible d'avoir tous le
traitement sur une seule fenêtre ?.

Je me disais c'était pas mieux de faire un copie des cellules et lignes et
de les coller dans le cmd, car manuellement il traite ligne par ligne :
Ex:Je n'ai pas encore trouvé comment faire un coller dans cmd (DOS)
*********************
Sub addResrv_ip3()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
' " " = espace
' pour additionner des nombres mettre + au lieu &
Dim Cell As Range
Dim Valeur
Dim rngCell As Range

For Each rngCell In Selection.Cells
Selection.Copy
'paste >
Next rngCell
'toexe = "cmd.exe /k " & Paste....????? Syntaxe ou commande
coller ?.
'RetVal = Shell(toexe, 1)

End Sub
*********************************
"michdenis" wrote:

>
>
> | Cela marche pour une ligne, cependant j'aimerais
> | le faire en sélectionnant plusieurs lignes ?.
>
> Sub addResrv_ip()
> ' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
> Dim Cell As Range, Ligne As Range, Valeur
>
> '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
> toexe = "cmd.exe /k" & valeur
> RetVal = Shell(toexe, 1)
> Next
> End if
>
> End Sub
>
>
>
>


Avatar
ben
Bonjour,
Merci pour votre aide.

Aussi, j'aimerais ouvrir automatiquement le fichier txt à la fin du
traitement.La commande doit être Openfile...???.

Concernant le copier/coller dans dos, connaissez-vous la commande "SendKey"
du click droit de la souris, car le coller dans une fenêtre dos se fait au
click droit...

Cordialement.


"michdenis" wrote:

Non mais tu peux afficher le résultat dans un fichier texte
pour consultation future.
Un fichier texte par exécution de la commande.
Dans la procédure : le fichier est à la racine de c:denis. x .txt

'-------------------------------------
Sub addResrv_ip()
' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
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:>Denis" & A & ".txt"
RetVal = Shell(toexe, vbHide)
Valeur = ""
Next
End If
End Sub
'-------------------------------------





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

Bonjour,

Il faut que je laisse la fenêtre dos visibles afin que je vois le résultats.
A moins qu'il y a un moyen d'afficher le résultat via une msg box ?.

Concernant le coller dans dos, il faut trouver l'astuce pour récupérer les
données du presse-papier ?.

Merci.

Cordialement.

"michdenis" wrote:

> Effectivement, après chaque boucle il faut vider le contenu
> de la variable Valeur. Pour ce faire, tu attribues "" à Valeur
> Valeur = "" correction apportée dans la procédure.
>
> Pour copier la commande dans la fenêtre Cmd... si tu
> trouves comment faire, j'espère que tu partageras ici ta découverte.
>
> Si tu ne veux pas avoir plusieurs fenêtre Dos ouverte, modifie ces lignes
> de code dans la procédure.
> toexe = "cmd.exe /k" & valeur
> RetVal = Shell(toexe, 1)
> Par
> toexe = "cmd.exe /c " & valeur
> RetVal = Shell(toexe, vbHide)
> Tu ne verras rien !
>
> '--------------------------------
> Sub addResrv_ip()
> ' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
> Dim Cell As Range, Ligne As Range, Valeur
>
> '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
> toexe = "cmd.exe /k" & valeur
> RetVal = Shell(toexe, 1)
> Valeur = ""
> Next
> End if
> End Sub
> '--------------------------------
>
>
>
>
> "ben" a écrit dans le message de groupe de discussion :
>
> Bonjour,
>
> J'ai fais le test sur 2 ligne2.
> La premier ligne est bien exécuter.
> Cependant à la 2ème il additionne la première, et là c'est pas bon...
>
> Aussi il ouvre une fénêtre dos par ligne, c'est pas possible d'avoir tous le
> traitement sur une seule fenêtre ?.
>
> Je me disais c'était pas mieux de faire un copie des cellules et lignes et
> de les coller dans le cmd, car manuellement il traite ligne par ligne :
> Ex:Je n'ai pas encore trouvé comment faire un coller dans cmd (DOS)
> *********************
> Sub addResrv_ip3()
> ' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
> ' " " = espace
> ' pour additionner des nombres mettre + au lieu &
> Dim Cell As Range
> Dim Valeur
> Dim rngCell As Range
>
> For Each rngCell In Selection.Cells
> Selection.Copy
> 'paste > >
> Next rngCell
> 'toexe = "cmd.exe /k " & Paste....????? Syntaxe ou commande
> coller ?.
> 'RetVal = Shell(toexe, 1)
>
> End Sub
> *********************************
> "michdenis" wrote:
>
> >
> >
> > | Cela marche pour une ligne, cependant j'aimerais
> > | le faire en sélectionnant plusieurs lignes ?.
> >
> > Sub addResrv_ip()
> > ' il faut sélectionner plusieurs valeurs de la ligne 5 et/ou 6
> > Dim Cell As Range, Ligne As Range, Valeur
> >
> > '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
> > toexe = "cmd.exe /k" & valeur
> > RetVal = Shell(toexe, 1)
> > Next
> > End if
> >
> > End Sub
> >
> >
> >
> >


1 2