Bonjour à tou(te)s,
Je pense que mon problème est relativement simple mais à parcourir le forum et à me triturer les neurones, je n'y vois plus très clair (malgré la grande simplicité du code).
Objectif :
Proposer à l'utilisateur lors de la fermeture d'un UserForm de sauvegarder le fichier Excel, de ne pas le sauvegarder ou d'annuler l'opération.
Constat :
Cas d'un seul classeur ouvert :
A la commande de fermeture de l'UserForm (par la croix), toutes les options de sauvegarde et d'annulation fonctionnent, le classeur et Excel se ferment et l'UserForm s'ouvre parfaitement au coup d'après.
Cas de deux classeurs ouverts :
A la commande de fermeture de l'UserForm, toutes les options de sauvegarde et d'annulation semblent fonctionner, le classeur se ferme. A l'ouverture du fichier Excel (par Fichier-> Ouvrir), "l'auto open" m'ouvre ma boîte de dialogue mais aussitôt après j'ai l'erreur '429' ("Le composant ActiveX ne peut pas créer l'objet "), qui intervient au moment de la ligne "Saisie.Show". Cela me fait penser que VBA ne voit plus mon UserForm et qu'il essayait de le créer...
J'ai essayé plusieurs syntaxes, essayé de voir si cela ne venait pas de références manquantes, mais mes faibles connaissances en VBA m'empêchent d'aller plus loin. Je vous joint donc le fichier...
Aussi, je vous remercie vivement par avance pour les pistes que vous saurez me conseiller...
Code dans ThisWorkbook :
Code dans UserForm :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub Workbook_Open() ThisWorkbook.Activate Select Case MsgBox("Ouvrir l'interface de saisie ?", vbQuestion + vbYesNo, "Dossier CEP") Case vbYes Saisie.Show Case vbNo ActiveWindow.WindowState = xlMaximized End Select End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'Si fermeture ordonnée par la croix du UserForm If CloseMode = 0 Then Call Quitter 'Annule la fermeture de l'Userform si autres actions non abouties dans Quitter Cancel = True Saisie.Show 'Si fermeture ordonnée par le code ElseIf CloseMode = 1 Then Exit Sub End If End Sub Private Sub Quitter() 'Déclarations Dim num As Integer 'Initialisation(s) Saisie.Hide num = Workbooks.Count rep5 = MsgBox("Enregistrer les modifications ?", vbYesNoCancel + vbExclamation, "Demande de confirmation") If rep5 = vbYes Then If num = 1 Then Unload Saisie ThisWorkbook.Save Application.Quit ElseIf num > 1 Then Unload Saisie ThisWorkbook.Close True End If ElseIf rep5 = vbNo Then If num = 1 Then ThisWorkbook.Saved = True Unload Saisie Application.Quit ElseIf num > 1 Then Unload Saisie ThisWorkbook.Close False End If ElseIf rep5 = vbCancel Then Annule = 1 Exit Sub End If End Sub
Partager