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

VBA et fermeture automatique de Windows et du PC

8 réponses
Avatar
M41
Bonjour

Un programme Excel - VBA doit fonctionner très longtemps puis sauvegarder
ses données avant de se fermer tout seul.

Problème : pour se fermer ce programme doit aussi lancer la fermeture totale
du PC.

Comment avec VBA lancer la fermeture automatique (fin de calculs ou suite à
une erreur détectée) de Windows et du PC avec fermeture sans sauvegarde
(elle a été faite avant pour les donnnées) de tous les logiciels ouverts
dont Excel ?

Lancement d'API ou d'un script par VBA ? Comment ?

Cordialement

M41

8 réponses

Avatar
LSteph
Bonjour,

par là:

http://jacxl.free.fr/cours_xl/cours_xl_jac.html#exemples_api

--
lSteph

M41 a écrit :
Bonjour

Un programme Excel - VBA doit fonctionner très longtemps puis sauvegarder
ses données avant de se fermer tout seul.

Problème : pour se fermer ce programme doit aussi lancer la fermeture totale
du PC.

Comment avec VBA lancer la fermeture automatique (fin de calculs ou suite à
une erreur détectée) de Windows et du PC avec fermeture sans sauvegarde
(elle a été faite avant pour les donnnées) de tous les logiciels ouverts
dont Excel ?

Lancement d'API ou d'un script par VBA ? Comment ?

Cordialement

M41




Avatar
MichDenis
Bonjour,

Voici comment faire pour fermer l'ordinateur à la fin d'une procédure.
Observe la structure que doit avoir ta macro : tu as un exemple avec
Sub Exemple_Macro

La ligne de code suivante affiche un message laissant moins d'une minute
à l'usager le cas échéant pour tout fermer :
Chemin = CheminSystem & "shutdown.exe /s"

Si tu désires que tout se ferme sans délai et sans message, remplace /s par /p
Chemin = CheminSystem & "shutdown.exe /p"



Place ce qui suit dans un module standard :

'Dans le haut d'un module Standard, Déclaration de l'api
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'------------------------------------------------------
Function CheminSystem()
Dim RetVal As Long
Dim SysDir As String

SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))

If RetVal <> 0 Then
CheminSystem = Left$(SysDir, RetVal)
End If
End Function
'------------------------------------------------------
Sub Fermeture_Ordinateur()
Dim Chemin As String

Chemin = CheminSystem & "shutdown.exe /s"
Shell Chemin, vbHide
End Sub
'------------------------------------------------------
Sub Exemple_Macro()
Dim Gestion_Erreur As String

On Error GoTo Gestion_Erreur

'Tout le code a exécuté

'Et en dernière ligne appel de la fermeture de l'ordinateur
Call Fermeture_Ordinateur
Exit Sub
Gestion_Erreur:
Call Fermeture_Ordinateur
End Sub
'------------------------------------------------------



"M41" a écrit dans le message de groupe de discussion :
4a6c1096$0$12623$
Bonjour

Un programme Excel - VBA doit fonctionner très longtemps puis sauvegarder
ses données avant de se fermer tout seul.

Problème : pour se fermer ce programme doit aussi lancer la fermeture totale
du PC.

Comment avec VBA lancer la fermeture automatique (fin de calculs ou suite à
une erreur détectée) de Windows et du PC avec fermeture sans sauvegarde
(elle a été faite avant pour les donnnées) de tous les logiciels ouverts
dont Excel ?

Lancement d'API ou d'un script par VBA ? Comment ?

Cordialement

M41
Avatar
M41
Re

J'ai condensé un peu. Merci
Question : qu'apporte la ligne ?
Dim Gestion_Erreur As String


'--------------
...API

Private Sub FermetureOrdinateur(Optional ByVal Modalité As Variant = "s")
'fermer sans délai ni message : remplacer /s par /p
Dim RetVal As Long, SysDir As String, Chemin As String
SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))
If RetVal > 0 Then
Chemin = Left$(SysDir, RetVal) & "shutdown.exe /" & Modalité
Shell Chemin, vbHide
End If
End Sub
'
Sub ToutFermer()
' ? Dim Gestion_Erreur As String
On Error GoTo Gestion_Erreur
'Tout le code a exécuté
'
FermetureOrdinateur "p"
Exit Sub
Gestion_Erreur:
FermetureOrdinateur
End Sub
'--------------

Cordialement

M41







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

Bonjour,

Voici comment faire pour fermer l'ordinateur à la fin d'une procédure.
Observe la structure que doit avoir ta macro : tu as un exemple avec
Sub Exemple_Macro

La ligne de code suivante affiche un message laissant moins d'une minute
à l'usager le cas échéant pour tout fermer :
Chemin = CheminSystem & "shutdown.exe /s"

Si tu désires que tout se ferme sans délai et sans message, remplace /s
par /p
Chemin = CheminSystem & "shutdown.exe /p"



Place ce qui suit dans un module standard :

'Dans le haut d'un module Standard, Déclaration de l'api
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As
Long
'------------------------------------------------------
Function CheminSystem()
Dim RetVal As Long
Dim SysDir As String

SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))

If RetVal <> 0 Then
CheminSystem = Left$(SysDir, RetVal)
End If
End Function
'------------------------------------------------------
Sub Fermeture_Ordinateur()
Dim Chemin As String

Chemin = CheminSystem & "shutdown.exe /s"
Shell Chemin, vbHide
End Sub
'------------------------------------------------------
Sub Exemple_Macro()
Dim Gestion_Erreur As String

On Error GoTo Gestion_Erreur

'Tout le code a exécuté

'Et en dernière ligne appel de la fermeture de l'ordinateur
Call Fermeture_Ordinateur
Exit Sub
Gestion_Erreur:
Call Fermeture_Ordinateur
End Sub
'------------------------------------------------------



"M41" a écrit dans le message de groupe de
discussion :
4a6c1096$0$12623$
Bonjour

Un programme Excel - VBA doit fonctionner très longtemps puis sauvegarder
ses données avant de se fermer tout seul.

Problème : pour se fermer ce programme doit aussi lancer la fermeture
totale
du PC.

Comment avec VBA lancer la fermeture automatique (fin de calculs ou suite
à
une erreur détectée) de Windows et du PC avec fermeture sans sauvegarde
(elle a été faite avant pour les donnnées) de tous les logiciels ouverts
dont Excel ?

Lancement d'API ou d'un script par VBA ? Comment ?

Cordialement

M41



Avatar
M41
Re

J'ai visité le site et tenté d'utiliser la fonction décrite contenant un
système optionnel (la 1ère de la liste) :
...
V = InputBox("choix du type de fermeture : " & _
Chr(13) & "0 pour fermer Windows" & _
Chr(13) & "1 pour fermer l'ordinateur" & _
Chr(13) & "2 pour rebooter" & _
Chr(13) & "4 pour fermer les applications récalcitrantes" & _
Chr(13) & "8 pour fermer l'alimentation du PC" & _
Chr(13) & "0+4+2 pour fermer les applications récalcitrantes et
rebooter")
...
mais celà ne fonctionne pas du tout... qqsoit le mode de saisie :
0+4+2 ou 042 ou 6

Cordialement

M41


"LSteph" a écrit dans le message de news:
us%
Bonjour,

par là:

http://jacxl.free.fr/cours_xl/cours_xl_jac.html#exemples_api

--
lSteph

M41 a écrit :
Bonjour

Un programme Excel - VBA doit fonctionner très longtemps puis sauvegarder
ses données avant de se fermer tout seul.

Problème : pour se fermer ce programme doit aussi lancer la fermeture
totale du PC.

Comment avec VBA lancer la fermeture automatique (fin de calculs ou suite
à une erreur détectée) de Windows et du PC avec fermeture sans sauvegarde
(elle a été faite avant pour les donnnées) de tous les logiciels ouverts
dont Excel ?

Lancement d'API ou d'un script par VBA ? Comment ?

Cordialement

M41




Avatar
MichDenis
| J'ai condensé un peu. Merci
| Question : qu'apporte la ligne ?
| Dim Gestion_Erreur As String

J'ai l'habitude de déclarer les variables d'une procédure... Et toi ?
Si tu l'enlèves, ça va fonctionner quand même !
Avatar
LE TROLL
Bonsoir,

Tu écris : "... pour se fermer ce programme doit aussi lancer la
fermeture totale
du PC... "

Quel est le rapport ? On ne ferme pas une application en fermant
l'ordinateur, bien que dans ce style on peu aussi retirer la batterie et
ouvrir le disjoncteur !

Fin du programme
reset
end

------------------
J'ai ça pour éteindre :

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long,
ByVal dwReserved As Long) As Long
Dim retour As Long
retour = ExitWindowsEx(1, 0)


Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"M41" a écrit dans le message de
news:4a6c1096$0$12623$
Bonjour

Un programme Excel - VBA doit fonctionner très longtemps puis sauvegarder
ses données avant de se fermer tout seul.

Problème : pour se fermer ce programme doit aussi lancer la fermeture
totale du PC.

Comment avec VBA lancer la fermeture automatique (fin de calculs ou suite
à une erreur détectée) de Windows et du PC avec fermeture sans sauvegarde
(elle a été faite avant pour les donnnées) de tous les logiciels ouverts
dont Excel ?

Lancement d'API ou d'un script par VBA ? Comment ?

Cordialement

M41



Avatar
M41
Bonsoir

Pourquoi sauver les données puis fermer le programme avec le PC sans
question ? Tout simplement parce que pouvant tourner pendant plusieurs jours
en mon absence (avec onduleurs au cas où) il est plus économique et
sécurisant de couper l'énergie quand ce long travail est achevé et
sauvegardé.

M41



"LE TROLL" <le a écrit dans le message de news:

Bonsoir,

Tu écris : "... pour se fermer ce programme doit aussi lancer la
fermeture totale
du PC... "

Quel est le rapport ? On ne ferme pas une application en fermant
l'ordinateur, bien que dans ce style on peu aussi retirer la batterie et
ouvrir le disjoncteur !

Fin du programme >
reset
end

------------------
J'ai ça pour éteindre :

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long,
ByVal dwReserved As Long) As Long
Dim retour As Long
retour = ExitWindowsEx(1, 0)


Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"M41" a écrit dans le message de
news:4a6c1096$0$12623$
Bonjour

Un programme Excel - VBA doit fonctionner très longtemps puis sauvegarder
ses données avant de se fermer tout seul.

Problème : pour se fermer ce programme doit aussi lancer la fermeture
totale du PC.

Comment avec VBA lancer la fermeture automatique (fin de calculs ou suite
à une erreur détectée) de Windows et du PC avec fermeture sans sauvegarde
(elle a été faite avant pour les donnnées) de tous les logiciels ouverts
dont Excel ?

Lancement d'API ou d'un script par VBA ? Comment ?

Cordialement

M41






Avatar
M41
Bonjour

En fait j'utilise toujours l'option explicite et déclare toutes mes
variables sauf exceptionnellement dans certains modules utilisant des
compléments....

Avec "on error goto" par habitude j'utilise une constante locale non
déclarée mais éventuellement un "select case" dans le programme de gestion
d'erreurs.
Intéret : regroupement dans une seule routine de toutes les situations à
traiter ; ça permet de réagir aussi non pas à une erreur mais à une
configuration d'erreurs (arborescence par conditions enboitées) et la
maintenance du bout de programme est plus facile.

A défaut de déclaration d'une variable de branchement vers des programmes de
traitements des erreurs différents, il m'arrive de déclarer une variable qui
s'incrémente dans le cours du programme afin de positionner le point de
déclanchement ; interêt : avoir l'avantage d'une variable de branchement
déclarée tout en conservant une unité de traitement des erreurs.

M41







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


| J'ai condensé un peu. Merci
| Question : qu'apporte la ligne ?
| Dim Gestion_Erreur As String

J'ai l'habitude de déclarer les variables d'une procédure... Et toi ?
Si tu l'enlèves, ça va fonctionner quand même !