IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fermer excel sans passer par la croix [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut Fermer excel sans passer par la croix
    Bonjour,

    je suis a la recherche d'un code pour interdire de fermer excel par la croix mais par un bouton qui enregistre et ferme excel dont le code est ceci:

    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
    Private Sub CommandButton1_Click()
    Select Case MsgBox(" Voulez-vous sauvegarder ? ", vbYesNoCancel)
     
    Case vbYes
    Application.DisplayAlerts = False
    ThisWorkbook.Save
    Application.Quit
    ActiveWindow.Close
     
    Case vbNo
    Application.DisplayAlerts = False
    Application.Quit
    ActiveWindow.Close
     
    Case Cancel
    End Select
     
    End Sub
    Mais il me manque le code pour interdire la fermeture par la croix en haut a droite.

    D'avance merci

    Cordialement

    Max

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    une solution un peu radicale certe mais fonctionnelle serait d'enlever les boutons de l'application

    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
     
    Option Explicit
     
    Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
     
     Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
     
     Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
     
    Sub restaurer_croix_sys()
      Dim hwnd As Long
      hwnd = FindWindowA(vbNullString, Application.Caption)
      SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
    End Sub
     
    Sub supprimer_croix_sys()
      Dim hwnd As Long
      hwnd = FindWindowA(vbNullString, Application.Caption)
      SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
    End Sub
    Sinon tu a la solution de bloquer le bouton fermer comme ceci
    je precise que tu avais divers exemples dans la faq en tapant "croix",fermer,caption sur le textbox de recherche

    allez voila le code :
    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
     
    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
     
     
    'faire appel a cette macro au moment que tu veux ca pour effet de bloquer l'action du bouton fermer de l'application
     Sub bloque_la_croix()
    Dim hSysMenu As Long
    Dim handleapp As Long
        handleapp = FindWindowA(vbNullString, Application.Caption)
        If handleapp > 0 Then
            hSysMenu = GetSystemMenu(handleapp, False)
            RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
        Else
            MsgBox "Handle de " & Application.Caption & " Introuvable", vbCritical
        End If
    End Sub
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut
    Bonjour patricktoulon

    Je te remercie j'ai mis ton code dans ThisWorkbook j'ai enregistré je l'ai ouvert et j'ai fermé par la croix?
    @+

    Max

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re

    tu prend l'un des deux codes celui qui te plais

    tu le met dans un module standard

    et tu appel la macro dans le module "thisworkbook" open

    allez fait comme ceci:

    Dans le thisworkbook tu peux mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    supprimer_croix_sys ' ca t'enlevera les bouton de la fenêtre
    End Sub
    ou alors tu met!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    bloque_la_croix' ça te bloquera le bouton fermer de la fenêtre 
    End Sub
    dans le module standard
    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
     
    Option Explicit
     Private Const SC_CLOSE = &HF060&
    Private Const MF_BYCOMMAND = &H0&
     
    Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
     
     Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
     
     Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    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
     
     
     
    Sub restaurer_croix_sys()
      Dim hwnd As Long
      hwnd = FindWindowA(vbNullString, Application.Caption)
      SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
    End Sub
     
    Sub supprimer_croix_sys()
      Dim hwnd As Long
      hwnd = FindWindowA(vbNullString, Application.Caption)
      SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
    End Sub
     
    'faire appel a cette macro au moment que tu veux ca pour effet de bloquer l'action du bouton fermer de l'application
     
     
     Sub bloque_la_croix()
    Dim hSysMenu As Long
    Dim handleapp As Long
        handleapp = FindWindowA(vbNullString, Application.Caption)
        If handleapp > 0 Then
            hSysMenu = GetSystemMenu(handleapp, False)
            RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
        Else
            MsgBox "Handle de " & Application.Caption & " Introuvable", vbCritical
        End If
    il m'est difficile d'etre plus clair en tout cas chez moi ca fonctionne tres bien


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut
    Bonjour patricktoulon

    Sa marche Nickel et trés clair les explications je te remercie beaucoup et te souhaite une bonne journée

    @+

    Max

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exporter les données vers excel sans passer par un agent
    Par debdev dans le forum Lotus Notes
    Réponses: 3
    Dernier message: 04/10/2013, 00h10
  2. [XL-2007] Envoyer un tableau a unidimensinel vers Excel sans passer par une boucle
    Par Bonero dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 06/09/2013, 17h03
  3. Réponses: 3
    Dernier message: 30/04/2009, 14h06
  4. Réponses: 6
    Dernier message: 20/11/2008, 15h55
  5. VBA : ouverture d'un Userform sans passer par excel
    Par jemigo dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 23/11/2005, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo