Comment utiliser l'évènement queryclose

jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008 - 30 mai 2006 à 16:25
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008 - 6 juin 2006 à 12:15
Bonjour,
j'ai une userform dans laquelle il faut completer des textbox dont les données vont se classer dans une feuille excel.
Comment faire pour que ma croix en haut à droite de la userform suive certaines recommandations.
C'est à dire que je veux que lorsque je clique dessus elle me demande si je ve enregistrer les modifications ou pas ou si je veux annuler. J'ai trouvé dans l'aide l'évènement queryclose mais j'arrive pas à le faire fonctionner , j'ai aussi trouvé l'évènement beforeclose. Comment est ce que je doit utiliser ces évènements? Car actuellement quand je clique sur la croix même si mes données ont ete enregistrées avant elles disparaissent.
J'espère que vous pourrez m'aider.
Merci beaucoup
Jamelie

10 réponses

michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
30 mai 2006 à 18:45
bonsoir

tu peux tester

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim Reponse As String


If CloseMode = vbFormControlMenu Then
Reponse = MsgBox("voulez vous sauvegarder ? ", vbYesNo)


    If Reponse = vbYes Then
    '
    'la procedure de sauvegarde
    '
    '
    End If


End If
End Sub

bonne soiree
michel
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
30 mai 2006 à 22:13
Salut Jamélie,

Tu peux aussi créer un bouton "fermer" et enlever la croix en haut a droite de ta form.
Si ça t'interesse, dis le moi, je te mets le code.

Au fait, pour le module de classe que je t'ai fourni la dernère fois, c'est bon ou non ?

@ ++



  Mortalino 
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
30 mai 2006 à 22:52
Ben tiens, je te mets le code, me concernant, je trouve que ça fait + beau :

Tout en haut des codes du UserForm, dans les déclarations, mets ça :

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

Puis dans UserForm_Initialize()

  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

Comme je te le disais dans le Post précédant, t'as plus qu'à créer un bouton "Valider" ou "Fermer"

















Sub CommandButton1_Click()
   Reponse = MsgBox("voulez vous sauvegarder ? ", vbYesNo)
   If Reponse = vbYes Then
      ThisWorkBook.Close True
   Else
      ThisWorkBook.Close False
   End If
End Sub

Voilà, t'as plus qu'à faire du copier / coller et à créer un bouton.
Qu'est ce que je ferai pas pour une demoiselle...

@ ++

  Mortalino 
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement
0
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008
1 juin 2006 à 12:32
Merci c'est super sympa parce que le code que m'a donné Michel ca fonctionne pas ca a aucun influence sur mon bouton annuler.
Je vais essayer ce que tu me dit. J'ai deja un bouton enregistrer mais avec ton code je peux créer un bouton fermer à coté. parce que la meme si j'ai enregistré quand je revien et que je fait aucun changement quand je clique sur la croix toutes mes valeurs disparaissent il est la mon gros probleme.
J'essaye ce que tu m'as dit et je te tiens au courant.
merci beaucoup
sinon pour le module de classe ca avait pas fonctionné mais j'ai trouvé autre chose. Merci quand même
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008
1 juin 2006 à 12:38
"ca a aucun influence sur mon bouton annuler."

sur ma croix pas sur mon bouton annuler. sorry
0
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008
1 juin 2006 à 15:39
Ca fonctionne pas le programme. j'ai changé le thisworkbook en userform parce que c'est pas mon classeur que je veux qu'il ferme c'est ma Form. Mais bon ca veut pas ca bloque. il m'affiche bien le message mais à partir du moment ou je clique ca bloque. sinon ma croix de ma form fonctionne toujour comme avant elle a pas disparu.


Mais bon j'espère que j'y arriverai. l'espoir fait vivre comme on dit.


merci de l'aide
0
michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
1 juin 2006 à 17:58
bonsoir

je suis désolé mais tes messages sont incompréhensibles 

tu as bien placé la macro dans le UserForm ?

tu as bien ajouté ta procedure de sauvegarde ?

    If Reponse = vbYes Then
    '
    'la procedure de sauvegarde
    '
    '
    End If

bonne soiree
michel
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
2 juin 2006 à 00:57
Salut Jamélie,

pour enlever la croix du UserForm, tu n'as que du copier / coller à faire et même si ça parait compliqué c'est très simple, et je te guide pas à pas :

Quand tu es sur VB d'excel, là où tu fais toi même ton UserForm, fais le apparaitre et double click dessus, tu dois avoir le code qui apparait.
Là, va tout en haut du code, à la toute première ligne et colle ça :

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

Une fois ce code copié, un peu plus bas, tu dois avoir tes procédures par rapport aux boutons, texbox etc... et tu dois avoir quelque part
Private Sub UserForm_Initialize()

intercale ça dedans :
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

et voilà, le tour est joué, lors du lancement de ton UserForm, la croix est occulté.
Avant de le lancer, prévoit un bouton pour fermer ta form, sinon, tu ne peux plus (ou alors il faut faire Ctrl + Pause).

Si tu as des soucis, n'hésite pas !

Bon courage.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008
4 juin 2006 à 17:48
je vais faire comme tu as dis merci beaucoup. Par contre j'ai un autre petit soucis. Quand je reste sous excel toutes mes données s'écrivent normalement dans ma base de données par conte si je ferme mon document. quand je l'ouvre les données sont la mais des que je lance ma userform tout s'efface les interfaces sont vides les données d'avant ne réaparaissent pas même si j'ai selectionné les mêmes critères de départ (année, mois). est ce qu'il y a une solution?
encore merci
Jamelie
0
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008
6 juin 2006 à 12:15
ca fonctionne c'est bon. Merci beaucoup.
Si vous avez une solution ou une idée pour mon petit soucis, elles sont les bien venues.
Encore merci
Bonne journée
0
Rejoignez-nous