Bonjour,

Je dispose d'un code permettant de "griser" le bouton croix de fermeture en haut à droite d'un userform.

Cependant, lorsque j'exécute mon formulaire sur un ordinateur en 64 bits, cela m'indique une erreur de compatibilité.

L'idée serait de rendre compatible mon code qui marche sous 32bits sur ce type d'ordinateur en x64.

Pouvez-vous m'aider SVP ? car il s'agit d'une fonction système et je ne suis pas à l'aise !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
'Fonctions systèmes nécessaires à la désactivation du bouton "Croix de fermeture" de Mise_en_Forme
Private Const SC_CLOSE = &HF060&
Private Const MF_BYCOMMAND = &H0&
 
Private Declare Function GetSystemMenu Lib "user32" _
        (ByVal hwnd As Long, ByVal bRevert As Long) As Long
 
Private Declare Function RemoveMenu Lib "user32" _
        (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
 
Private Declare Function FindWindowA Lib "user32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
Private Sub CommandButton4_Click()
'Bouton "Formulaire" permettant d'afficher le formulaire
Application.ScreenUpdating = False
Application.DisplayAlerts = False
 
'Masquer le bouton "Croix de fermeture"
Dim hSysMenu As Long
Dim MeHwnd As Long
    MeHwnd = FindWindowA(vbNullString, Modification.Caption)
    If MeHwnd > 0 Then
        hSysMenu = GetSystemMenu(MeHwnd, False)
        RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
    Else
        MsgBox "Handle de " & Modification.Caption & " Introuvable", vbCritical
    End If
 
'Affichage du formulaire "Modification"
Formulaire.Hide
Modification.Show 0
End Sub
Merci d'avance de votre aide !!

GK