OVH Cloud OVH Cloud

Démarrage excel

1 réponse
Avatar
serge
Bonjour à tous,

je cherche à faire apparaitre une box au démarrage d'excel me demandant si
je souhaite exécuter la les macros qui se charge tout seul au démarrage ou
travailler sans les macros? (le tout avec un timer de 3 secondes).
Mon problème se situe donc dans la création du timer, et comment si réponse
"oui" continuer l'éxécution du VBA et si "non" comment éviter l'éxécution.

merci d'avance :)

1 réponse

Avatar
anomymousA
bonjour,

je ne suis pas sur d'avoir absolument compris ce que tu veux. Je te signale
qu'à l'ouverture d'un fichier Excel , si tu as des macros dans ce fichier,
l'application te demande d'elle-même si tu veux exécuter les macros ou pas
sauf si le fichier est un .xla déclaré dans les macros complémentaires ou bie
que la sécurité Macros est au niveau bas s'il s'agit d'un fichier .xls.
C'est une précaution élémentaire que te signale l'application pour éviter
que tu recoives unemacro qui s'exécute sans que tu le saches et qui te colle
un virus.

Ceci dit, j'ai interprété ta demande à ma sauce. Ce que je te propose est
alors la chose suivante.
Tu crées un fichier Excel que tu enregistreras en Macro complémentaire (
.xla) et que tu déclareras dans Excel comme étant une macro complémentaire
(par Outils/Macros complémentaires/Parcourir) .

l'exemple que je te donne fait la chose suivante:
A l'ouverture d'Excel, il apparait un Userform dont j'ai enlevé la croix de
fermeture pour obliger l'utilisateur à utiliser les bouton "Continuer"
(identifié sur le userform comme CommandButton1) ou le boutons "Arrêter"
(identifié sur le userform comme CommandButton2).
Si l'utilisateur clique sur le bouton Continuer, on agit sur le controle
"Sécurité des Macros" et on le passe au niveau bas ce qui implique que
désormais la session d'Excel n'a plus de sécurité macros, donc que quelque
soit le fichier que tu ouvres ensuite les macros s'exécuteront sans même te
poser la question. Attention , il faut bien que tu prennes conscience de ce
fait.
De + si jamais une quelconque procédure dans le courant de la session Excel
se plante et que tu ne la réinitialises pas ou que tu utilises
Application.enableventsúlse et que tu oublies de le remettre à true ou bien
voire qu'Excel lui-même se plante (quoiuque pour ce dernier item j'en sois
moins sur) , la session d'Excel sera fermée avec le niveau de sécurité bas
bien que dans l'exemple que je te communique j'ai pris la précaution de
remettre la sécurité à Moyen lors de la fermeture du.xla (quand tu quittes
Excel)

Bon reprenons. SI l'utilisiteur clique sur Continuer le niveau de sécurité
des macros passe à Bas, s'il clique sur Arreter, le niveau de sécurité des
macros reste à ce qu'il était. Si au bout de 5 secondes l'utilisateur n'a
rien fait, le programme renvoie le message "le temps imparti est écoulé.les
macros ne seront pas exécutées" et le niveau de sécurité des macros reste à
ce qu'il était.

Pour utiliser le programme, Il faut que tu crées un Userform avec 2 boutons
de commandes (voir texte ci-dessus pour savoir quel commandbutton correspond
à continuer ou arreter) et un label avec du texte pour expliquer ce que tu
souhaites que l'utilisateur fasse.

Dans le module du userform tu écris les instructions suivantes

'déclarations API nécessaires pour empêcher l'affichage de la
'croix de fermeture du userform

Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub CommandButton1_Click()

ThisWorkbook.StopIt = True
ThisWorkbook.arret = False
Unload Me
Call ThisWorkbook.suiteprog

End Sub

Private Sub CommandButton2_Click()

ThisWorkbook.StopIt = True
ThisWorkbook.arret = True
Unload Me
Call ThisWorkbook.suiteprog

End Sub

Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API
'déclarées en début de module

Dim hwnd As Long
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF

End Sub

Dans le module Thisworkbook de ton fichier .xla tu écris


Private Sub Workbook_Open()

arret = True
StopIt = False
depart = Now + TimeValue("00:00:05")
Application.OnTime depart, "Thisworkbook.MyProg"
UserForm1.Show
Cells(1, 1).Activate

End Sub
Function MyProg() As Boolean

On Error Resume Next
Unload UserForm1

If StopIt = True Then
Else
MsgBox "le temps imparti est écoulé.les macros ne seront pas exécutées"
End If

On Error GoTo 0

End Function
Sub suiteprog()

If arret = True Then
MsgBox "vous avez décidé de ne pas exécuter les macros"
Else
MsgBox "vous avez décidé d'exécuter les macros"
On Error Resume Next
With Application
.SendKeys ("{TAB}+%b+{TAB}+{ENTER}")
.CommandBars.FindControl(ID:627).Execute
End With
On Error GoTo 0
End If

End Sub

Voilà, tu peux adapter ce code en fonction de ce que tu souhaites réellement.

A+


Bonjour à tous,

je cherche à faire apparaitre une box au démarrage d'excel me demandant si
je souhaite exécuter la les macros qui se charge tout seul au démarrage ou
travailler sans les macros? (le tout avec un timer de 3 secondes).
Mon problème se situe donc dans la création du timer, et comment si réponse
"oui" continuer l'éxécution du VBA et si "non" comment éviter l'éxécution.

merci d'avance :)