Excel a cessé de fonctionner suite a l'execution d'un code
Bonjour à tous,
Tout d'abord désolé pour le titre du poste, mais je n'ai pas trouvé de titre plus explicite.
Le contexte est le suivant :
Je cherche à mettre un bouton "actions" sur les feuilles d'un classeur, au clic sur ce bouton, un pop-up s'ouvre et offre plusieurs actions possibles.
Mes feuilles sont en fait des fiches à remplir et les actions possible sont : Valider, Modifier, Imprimer, Supprimer, ...
Mon problème :
Une action en particulière fait passer l'application Excel dans un "drôle d'état" (la encore je ne trouve pas d'autres mots).
L'action en question est : Supprimer (son but est tout simplement de supprimer la feuille).
Je vous décris brièvement le "drôle d'état" :
- La croix "fermer le classeur" est inopérante de même que celle "fermer l'application"
- La navigation dans le ruban est possible mais aucun bouton ne fonctionne
- Les autres contrôles du ruban font planter Excel
- La navigation dans la feuille (sélection de cellules) fonction à la souris mais plante si faite via le clavier (ex : Ctrl + Fin)
- Pleins d'autres choses étranges
J'ai minimisé le code en ne laissant que la création de la commandBar et du bouton Supprimer pour pouvoir vous le présenter.
Voici le code :
Création, suppression et alimentation de la Pop-up :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Const CmdBarName = "Menu Actions"
Private Sub DeleteCommandBar()
On Error Resume Next
Application.CommandBars(CmdBarName).Delete
End Sub
Private Sub CreateCommandBar()
Dim objCommandBar As CommandBar
Set objCommandBar = Application.CommandBars.Add(CmdBarName, msoBarPopup, False, True)
Call AjouterBouton("Supprimer", 1088, "Supprimer", objCommandBar, True)
fin:
Set objCommandBar = Nothing
End Sub
Private Sub AjouterBouton(ButtonName As String, ButtonFace As Long, ButtonOnAction As String, ByRef objCommandBar As CommandBar, bEnab As Boolean)
With objCommandBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
.Caption = ButtonName
.FaceId = ButtonFace
.OnAction = ButtonOnAction
.Enabled = bEnab
End With
End Sub |
Le code de l'action Supprimer :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Sub Supprimer(): Call SupprimerFiche(ActiveSheet): End Sub
Sub SupprimerFiche(ByRef objWorksheet As Worksheet)
Dim sPrompt$
sPrompt = "Message de confirmation"
Select Case MsgBox(Prompt:=sPrompt, Buttons:=vbExclamation + vbYesNo, Title:="Supprimer fiche pédagogique")
Case vbYes
Application.DisplayAlerts = False
objWorksheet.Delete
Application.DisplayAlerts = True
Case Else
'Rien
End Select
End Sub |
Et enfin, la macro associée à mon bouton Actions :
Code:
1 2 3 4 5
| Sub ShowPopUp()
Call DeleteCommandBar
Call CreateCommandBar
Application.CommandBars(CmdBarName).ShowPopUp
End Sub |
Je supprime le pop-up pour la recréer à chaque clic car le pop-up est en fait dynamique (Nombre de bouton et propriété Enabled des boutons). Notamment en fonction de l'utilisateur sur le fichier et du contenue de la fiche.
Le code fonctionne lorsqu'il est lancé depuis l'éditeur VBA. Mais provoque ce drôle d'état lorsqu'il l'est depuis le pop-up.
J'ai trouvé deux solutions pour sortir de cet état :
- Changer de feuille et prendre le focus sur un Shape (les Shapes de la feuille active après suppression sont eux aussi inopérants)
- Ajouter une feuille et la supprimer
Les deux solutions ne fonctionnent que manuellement.
Avez-vous des idées sur ce qui provoque cet état ? Des Solutions ?
S'il vous prend l'envie de tester le code, il vous suffit de copier les 3 morceaux de codes dans un module, de créer plusieurs feuilles et d'y ajouter un bouton en lui associant la macro ShowPopUp.
Merci d'avoir pris le temps de me lire et merci d'avance pour vos réponses.