Positionnement USF (Sujet mystérieux)

RONIBO

XLDnaute Impliqué
Bonjour,

j'ai un code qui permet de mettre en premier mon usf, même durant la navigation dans Windows (Internet, dossier etc)

je modifie l'option en mettant -2 dans la procédure close pour qu'il passe cette fois ci en arrière plan, car si je modifie pas l'option je risque de pas voir mon msgbox (Il sera derrière mon usf)

Mon problème est quand je cliques sur annuler au msgbox, mon userform change de position je sais pas pour quelle raison.

Avez vous une idée?

Merci d'avance
 

Pièces jointes

  • Exemple1.xlsm
    18.7 KB · Affichages: 53
  • Exemple1.xlsm
    18.7 KB · Affichages: 54

Si...

XLDnaute Barbatruc
Re : Positionnement USF (Sujet mystérieux)

salut

2 cas à tester :
le formulaire se ferme (utilisation classique de la croix)
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Me.Hide
    CloseMode = 1
    Select Case MsgBox("Voulez-vous enregistrer les modifications avant de quitter le programme ?", 35, "")
      Case 6
        ThisWorkbook.Save
         Application.DisplayAlerts = False
         Application.Quit
      Case 7
         ThisWorkbook.Saved = True
         Application.DisplayAlerts = False
         Application.Quit
      Case Else
         Cancel = 1
    End Select
End Sub

on veut garder le formulaire visible ou pas
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Me.Hide
    CloseMode = 1
    Select Case MsgBox("Voulez-vous enregistrer les modifications avant de quitter le programme ?", 35, "")
      Case 6
        ThisWorkbook.Save
         Application.DisplayAlerts = False
         Application.Quit
      Case 7
         ThisWorkbook.Saved = True
         Application.DisplayAlerts = False
         Application.Quit
      Case Else
         If MsgBox("Voulez-vous fermer le formulaire ?", 4, "") = 6 Then Unload Me: Exit Sub
         Cancel = 1: Me.Show
    End Select
End Sub

Dans ce dernier cas, il faudra prévoir sa réouverture. D'ailleurs ton "Open" pose problème.
 

Dranreb

XLDnaute Barbatruc
Re : Positionnement USF (Sujet mystérieux)

Bonjour.
Je pense que les paramètres x,y,cx,cy de SetWindowPos sont en pixels puisque ce sont des Long, et non en points.
Le mieux, d'après ma documentation, serait de la 'flaguer' pour qu'elle n'en tienne pas compte:
VB:
SetWindowPos(Hwnd, Devant, 0, 0, 0, 0, &H43&)
(&H43 = SWP_SHOWWINDOW + SWP_NOMOVE + SWP_NOSIZE)

Voire :
VB:
SetWindowPos(Hwnd, Devant, 0, 0, 0, 0, &H43& Or Devant = 1 And &H10&)
(Y ajoute SWP_NOACTIVATE si Devant = HWND_BOTTOM)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Positionnement USF (Sujet mystérieux)

Re, salut Si..., Bernard,

En fait, dès le moment où la propriété StartUpPosition de l'USF est sur 1 - CenterOwner, il est inutile de le positionner à l'ouverture.

Et il suffit de faire avec les positions X et Y ce qui a été fait pour Hauteur et Largeur :

Code:
Sub PositionneUserform(Devant As Integer)
Dim Position As Long, Hwnd As Long, Hauteur, Largeur, X, Y
    With Me
        Hauteur = .Height
        Largeur = .Width
        X = .Left
        Y = .Top
        Hwnd = FindWindowA(vbNullString, .Caption)
        Position = SetWindowPos(Hwnd, Devant, 0, 0, 0, 0, 0)
        .Width = Largeur
        .Height = Hauteur
        .Left = X
        .Top = Y
    End With
End Sub
Dans ces conditions, comme l'a bien vu Dranreb, seuls les 2 premiers arguments de la fonction SetWindowPos(Hwnd sont utiles, on peut donc mettre tous les autres à zéro.

Fichier (2).

A+
 

Pièces jointes

  • Exemple(2).xlsm
    19.2 KB · Affichages: 31
  • Exemple(2).xlsm
    19.2 KB · Affichages: 33
Dernière édition:

RONIBO

XLDnaute Impliqué
Re : Positionnement USF (Sujet mystérieux)

Bonsoir,

Tout d'abord merci à tous pour vos solutions, vous êtes des chefs :cool:

Je me mets au travail, pour tester lequel sera fonctionnel avec mon fichier

Je vous tien au courant dans une heure

A+
 

Statistiques des forums

Discussions
312 764
Messages
2 091 864
Membres
105 084
dernier inscrit
lca.pertus