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

(vba) vérifier lancement application

13 réponses
Avatar
j-pascal
Bonjour,

Depuis un UF, je lance un programme externer comme ceci :

'-------------
Private Sub Progr_Click()
Shell ("C:\MonProgramme.exe")
End Sub
'-------------

Question 1 :
Est-il possible d'ajouter une ou deux lignes de code pour vérifier si le
programme est déjà lancé ?

Question 2 :
Si le chemin d'accès au programme a été modifié, j'ai ajouté un "On error
resume Next", la forme qui suit est-elle correcte (j'ai un doute entre l'
ExitSub et le EndSub) ?

Question subsidiaire : Je vois que vous utiliser souvent CrLf (ou qqch du
genre) à la place de Chr (10).
Avantages / Inconvénients d'une forme plutôt que de l'autre ? Que veut dire
CrLf... (impossible à mémoriser pour moi !) ?

Merci d'avance pour vos lumières,

'--------
Private Sub Progr_Click()

On Error Resume Next
Shell ("C:\MonProgramme.exe")

MsgBox "Option invalide depuis votre session !" & Chr(10) & Chr(10) & _
"(Ouvrez MonProgramme autrement...)", vbOKOnly + vbInformation,
"Echec"
Unload MenuPublic
Exit Sub

End Sub
'--------

Cordialement,

JP

3 réponses

1 2
Avatar
j-pascal
Bonsoir Philippe,

Merci pour cette dernière précision.

A bientôt,

JP

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de news:

Bonjour,
L'erreur 1004 n'est prise ici qu'à titre d'exemple (facile à produire).
L'utilisation du numéro de l'erreur n'a bien sur d'intérêt par rapport à
une simple instruction On Error Resume Next que si différentes erreurs
sont susceptibles de se produire lors du déroulement de la procédure et
qu'on entends appliquer un traitement particulier à chacune d'elles.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"j-pascal" a écrit dans le message de
news:
Bonsoir Philippe,

Merci pour cette explication. Néanmoins je reviens à ma remarque
précédente : A quoi sert de gérer une erreur en particulier (1004 en
l'occurence) alors que, sauf erreur de ma part, le code se comporte de la
même façon si on supprime : "If Err() = 1004 Then" (et le "End If" !) ?
J'imagine que si par hasard un code génére plusieurs erreurs (??), il
doit y avoir une préséance dans le traitement de ces dernières donc ne
vaut-il pas mieux traiter l'erreur à sa "racine" (je veux dire : pas par
rapport à un numéro précis, pas avec un test conditionnel sur le 1004
...) ?

@+

JP


"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
news: Oa%
Bonsoir,
Voici un exemple de gestion d'erreur sur son numéro :

Sub Macro1()
'
On Error Resume Next
Workbooks.Open Filename:= _
"C:RauletDocumentsExcelMPFE71205_essais.xls"
If Err() = 1004 Then

MsgBox "y'a de la mille quatre dans l'air"

End If
End Sub

Le chemin et le fichier n'existant pas, je génère une erreur 1004 (c'est
le message standard d'Excel qui le dit en l'absence de l'instruction On
Error Resume Next)
On neutralise ce message standard avec la fameuse instruction On Error
Resume Next, puis on indique au programme quoi faire dans le cas où
cette erreur est générée.

Pour les GoTo, AMHA, ce sont surtout les instructions de type imbriquées
qui sont redoutables ; un GoTo ça va, deux GoTo, commencent les dégâts !
--
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonsoir Philippe,

Merci ;-)

Je note ta réponse concernant le "Exit Sub" (je me doutais qu'il y
avait qqch qui n'allait pas dans mon code peut-être parce qu'en général
je traite la deuxième condition !).

Pour la gestion d'erreur, j'ai effectivement inséré un test
conditionnel vérifiant la validité du chemin d'accès. Je ne l'ai pas
mis pour faire plus "léger"...
Par contre, je ne comprends pas ta proposition d'identifier le numéro
d'erreur !
Initialement j'avais mis un "on error resume next" mais j'ai eu un
doute, car je voulais mettre 2 instructions derrière (Un MsgBox et un
Exit Sub) et finalement j'ai opté pour un On error GoTo ... Il paraît
que c'est plus lourd et que ça complique la lecture du code ??

Pour revenir à ton numéro d'erreur, si le chemin n'existe pas, ça
génère une erreur, donc pour moi, un On Error "devrait" suffire !?

@+

JP

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
news:
Bonsoir Jean-Pascal,
Dans le cas d'espèce, s'il n'y a pas eu de réponse aux 2 principales
questions de ton message originel, c'est peut être tout simplement
parce que l'un ou l'autre se sentait le neurone un peu trop fatigué
pour se pencher dessus avec le sérieux que ça mérite.

pour la question 2, si ton code est bien de ce type :
'--------
Private Sub Progr_Click()

On Error Resume Next
Shell ("C:MonProgramme.exe")

MsgBox "Option invalide depuis votre session !" & Chr(10) & Chr(10)
& _
"(Ouvrez MonProgramme autrement...)", vbOKOnly + vbInformation,
"Echec"
Unload MenuPublic
Exit Sub

End Sub
'--------
l'instruction Exit Sub, parfaitement correcte par ailleurs pour sortir
de la procédure, est inutile puisqu'aucune ligne de code ne suit avant
le End Sub.

pour le 1, je ne connais pas vraiment de réponse formelle, mais je
chercherai du côté de l'interception de l'erreur provoquée quand le
chemin n'est pas le bon (tu peux par exemple faire un essai en
repérant le numéro d'erreur indiqué dans le message et faire un test
sur ce numéro pour ensuite proposer un deuxième mode de traitement)
--
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
"j-pascal" a écrit dans le message de
news:u0E$
Bonjour Philippe,

Merci ! J'ai déjà mobilisé qq neurones pour mémoriser l'acronyme
complet depuis la réponse de Modeste, mais je note quand même ta
proposition ;-)

Quand je pense que cela était la question "subsidiaire" :o)

@+

JP

PS : Quand il n'y a pas de réponse à une question (mes 3 derniers
posts n'ont pas eu bcp de succès ...), faut-il penser :
- Il n'y a pas de réponse.
- Il y en a une, mais, même les grosses pointures ne l'ont pas encore
trouvé ...
- La question est tellement stupide qu'il est inutile d'ajouter une
ligne au fil pour le faire comprendre à l'auteur ...
- L'auteur a fait une remarque jugée "indélicate" à son dernier
interlocuteur ... et par solidarité ...

?

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
news:
Bonsoir,
On peut aussi préférer à vbcrlf, vbnewline, comme équivalent plus
explicite.
--
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Modeste,

Merci beaucoup pour cette réponse dont j'apprécie la clarté et la
grande précision. Je pense avoir maintenant les moyens de me
souvenir de ces acronymes et de leur sens.

Bonne journée.

JP

"Modeste" a écrit dans le message de news:

Bonsour® j-pascal avec ferveur ;o))) vous nous disiez :

Question subsidiaire : Je vois que vous utiliser souvent CrLf (ou
qqch du genre) à la place de Chr (10).
Avantages / Inconvénients d'une forme plutôt que de l'autre ? Que
veut dire CrLf... (impossible à mémoriser pour moi !) ?


en fait on utilise les constantes vbCR, vbLF ou vbCRLF
vbCR est l'acronyme pour Carriage Return (Retour Chariot par
analogie aux anciennes machines à ecrire)
constante définie égale à chr(13)
vbLF est l'acronyme pour Line Feed (Saut de ligne analogie cf
ci-dessus)
constante définie égale à chr(10)
vbCRLF est la concaténation des deux (saut de ligne et retour au
début de ligne)

en VBA le saut de ligne ramene systématiquement le curseur en
début de ligne suivante
c'est pourquoi on utilise souvent seulement vbLF (chr(10))
il n'y a pas de différence à utiliser la constante (vbXX ou sa
valeur chr(n))

pour les utilisateurs de MAC, seul vbCRLF reste compatible entres
PC

si tu es anglophone l'acronyme est évidement une aide à la
mémorisation.

--
--
@+
;o)))





























Avatar
j-pascal
Bonsoir Michel,

Je vois que ma question subsidiaire ne cesse de nourrir ce fil ...
Quand j'ai vu qu'il y avait une nouvelle réponse, j'ai cru un instant que
j'allais enfin apprendre comment tester le lancement d'une application ;-)
Snif ...

A bientôt,

JP

"Michel Gaboly" a écrit dans le message de news:

Bonjour Modeste,

Je réagis tardivement, mais je viens à peine de lire ta prose, en fin de
citation du message de Philippe, aujourd'hui à
13h25.

Je ne suis pas d'accord pour la partie Mac (comme d'hab ;-)))

Sur Mac, Chr(10) ne s'emploie absolument pas, on n'utilise seulement Chr(13)
pour passer à la ligne. Pour avoir un code
compatible Mac et Win, il existe une constante, facile à mémoriser, et que
tu n'as pas citée, vbNewLine qui correspond à
Chr(13) sur un Mac et à Chr(10) avec Windows.

C'est celle-ci que j'utilise exclusivement. On peut oublier les 3 autres,
dont l'unique intérêt en pratique est
l'économie de quelques caractères.

A bientôt.


Bonsour® j-pascal avec ferveur ;o))) vous nous disiez :

Question subsidiaire : Je vois que vous utiliser souvent CrLf (ou
qqch du genre) à la place de Chr (10).
Avantages / Inconvénients d'une forme plutôt que de l'autre ? Que
veut dire CrLf... (impossible à mémoriser pour moi !) ?


en fait on utilise les constantes vbCR, vbLF ou vbCRLF
vbCR est l'acronyme pour Carriage Return (Retour Chariot par analogie aux
anciennes machines à ecrire)
constante définie égale à chr(13)
vbLF est l'acronyme pour Line Feed (Saut de ligne analogie cf ci-dessus)
constante définie égale à chr(10)
vbCRLF est la concaténation des deux (saut de ligne et retour au début de
ligne)

en VBA le saut de ligne ramene systématiquement le curseur en début de
ligne suivante
c'est pourquoi on utilise souvent seulement vbLF (chr(10))
il n'y a pas de différence à utiliser la constante (vbXX ou sa valeur
chr(n))

pour les utilisateurs de MAC, seul vbCRLF reste compatible entres PC

si tu es anglophone l'acronyme est évidement une aide à la mémorisation.

--
--
@+
;o)))





--
Cordialement,

Michel Gaboly
www.gaboly.com


Avatar
fetnat
Bonjour,

Garde le moral... Je viens de trouver ta réponse avec plusieures
variantes, ici:

http://frederic.sigonneau.free.fr/code/Fichiers/ApplicationsActives.txt

Si je peux reprendre ton désespoir à mon compte...J'ai trouvé ta réponse
en cherchant un script, que je ne trouve pas, pour lancer un programme
non office avec login et mot de passe ; le script devra partir avec le
scheduler. Donc sans passer par VBA excel ce serait mieux.

Les chemins sont tortueux ! Mon cerveau aussi.

fetnat


Bonsoir Michel,

Je vois que ma question subsidiaire ne cesse de nourrir ce fil ...
Quand j'ai vu qu'il y avait une nouvelle réponse, j'ai cru un instant
que j'allais enfin apprendre comment tester le lancement d'une
application ;-) Snif ...

A bientôt,

JP

"Michel Gaboly" a écrit dans le message de
news:
Bonjour Modeste,

Je réagis tardivement, mais je viens à peine de lire ta prose, en fin de
citation du message de Philippe, aujourd'hui à
13h25.

Je ne suis pas d'accord pour la partie Mac (comme d'hab ;-)))

Sur Mac, Chr(10) ne s'emploie absolument pas, on n'utilise seulement
Chr(13) pour passer à la ligne. Pour avoir un code
compatible Mac et Win, il existe une constante, facile à mémoriser, et
que tu n'as pas citée, vbNewLine qui correspond à
Chr(13) sur un Mac et à Chr(10) avec Windows.

C'est celle-ci que j'utilise exclusivement. On peut oublier les 3
autres, dont l'unique intérêt en pratique est
l'économie de quelques caractères.

A bientôt.


Bonsour® j-pascal avec ferveur ;o))) vous nous disiez :

Question subsidiaire : Je vois que vous utiliser souvent CrLf (ou
qqch du genre) à la place de Chr (10).
Avantages / Inconvénients d'une forme plutôt que de l'autre ? Que
veut dire CrLf... (impossible à mémoriser pour moi !) ?


en fait on utilise les constantes vbCR, vbLF ou vbCRLF
vbCR est l'acronyme pour Carriage Return (Retour Chariot par analogie
aux anciennes machines à ecrire)
constante définie égale à chr(13)
vbLF est l'acronyme pour Line Feed (Saut de ligne analogie cf ci-dessus)
constante définie égale à chr(10)
vbCRLF est la concaténation des deux (saut de ligne et retour au début
de ligne)

en VBA le saut de ligne ramene systématiquement le curseur en début de
ligne suivante
c'est pourquoi on utilise souvent seulement vbLF (chr(10))
il n'y a pas de différence à utiliser la constante (vbXX ou sa valeur
chr(n))

pour les utilisateurs de MAC, seul vbCRLF reste compatible entres PC

si tu es anglophone l'acronyme est évidement une aide à la mémorisation.

--
--
@+
;o)))









1 2