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 :

Bloquage des fenetres


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Bloquage des fenetres
    Bonjour,

    Je souhaite bloquer le mouvement des fenetres (userform).

    Comment puis-je faire cela?

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Bonjour,

    Qu'entends-tu par "bloquer le mouvement" ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Bloquer le mouvement
    Pour moi cela signifie ne pas pouvoir bouger les fenetres (userform)
    Le fenetre est afficher par defaut au centre et l'utilisateur ne peut pas déplacer la fenetre

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Alors... le code est (très) moche mais ca fonctionne chez moi et je ne crois pas qu'il y ait de propriété toute faite :

    Code Module Lanceur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public H As Double, L As Double, Bool As Boolean
     
    Sub test()
     
    UserForm1.Show
     
    End Sub
    Code Unserform :

    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
    Private Sub UserForm_Layout()
     
    If Bool=false Then
        H = Me.Top
        L = Me.Left
        Bool= true
    End If
     
    Me.Hide
     
    Me.Top = H
    Me.Left = L
     
    Me.Show
     
    End Sub
    Cdt

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    1) tu vas là :

    http://vb.developpez.com/faqvba/?page=3.6#UFhandle

    à la rubrique :

    Comment inhiber ou masquer le bouton "Fermer" d'une UserForm ?


    tu y prends le code (copier/coller) et tu l'insères

    2) tu modifies la ligne disant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
    en la remplaçant ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RemoveMenu hSysMenu, &HF010&, &H0&
    et tu as ton bonheur ...

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut merci
    Il faut ajouter quel librairie?

    Merci

  7. #7
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Citation Envoyé par House MD Voir le message
    Alors... le code est (très) moche mais ca fonctionne chez moi et je ne crois pas qu'il y ait de propriété toute faite :

    Code Module Lanceur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public H As Double, L As Double, Bool As Boolean
     
    Sub test()
     
    UserForm1.Show
     
    End Sub
    Code Unserform :

    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
    Private Sub UserForm_Layout()
     
    If Bool=false Then
        H = Me.Top
        L = Me.Left
        Bool= true
    End If
     
    Me.Hide
     
    Me.Top = H
    Me.Left = L
     
    Me.Show
     
    End Sub
    Cdt
    Merci, je vais d'essayer le code mais ca ne fonctionne pas sur la première fenetre j'obtient un boucle sans fin sur la methode layout de la fenetre.

    Cdlt.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Bravo à ucfoutu... rien à dire.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par serar Voir le message
    Il faut ajouter quel librairie?

    Merci

    Aucune à rajouter !
    Deux fonctions, par contre à déclarer ...

    Aisni, donc :

    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
    '1) dans la partie générale du code de ta UserForm (tout en haut, donc) :
    
    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
    
    
    '2) et ensuite :
    
    Private Sub UserForm_Initialize()
      Dim hSysMenu As Long
      Dim leHwnd As Long
      lehwnd = FindWindowA(vbNullString, Me.Caption)
      hSysMenu = GetSystemMenu(lehwnd , False)
      RemoveMenu hSysMenu, &HF010&, &H0&
    End Sub
    Entre d'autres termes :
    1) copie celà
    2) va tout en haut de ton code (sur ta userform) et colle donc !

    C'est quand même pas difficile !

  10. #10
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut serar
    ok merci. Ca fonctionne

  11. #11
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Problème
    Bonjour,

    La semaine derniere, vous m'avez donné la sollution
    pour bloquer une fenetre.

    J'ai fais des modifs dans le prog et je ne comprend pas ca ne fonctionne plus.

    l'handle de la fenetre = 0x0
    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
    ' Permet de bloquer l'affichage de l'IHM
    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
     
     
    Private Sub UserForm_Initialize()
     
    Dim MeHwnd As Long
        MeHwnd = FindWindowA(vbNullString, Me.Caption)
        MsgBox "le Handle de l'Userform " & Me.Caption & " est : 0x" & Hex(MeHwnd)
     
    End Sub
    Si vous avez des idées pour résoudre mon prb ..
    D'avance merci.

    Cdlt.

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bé !!!!

    Tu as purement et simplement effacé les lignes de code qui "paralysent" la fenêtre de ton UserForm !!!

    Reprendre le code tel qu'il était !

    Edit : je viens de lire ton MP (pas de questions techniques par MP, s'il te plait) :

    Dis-voir : si ta fenêtre n'est plus visible, tu ne peux bien évidemment en extraire le handle !!!
    Corrige la "chose" !....

  13. #13
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Bonjour,

    Je ne comprends pas pourquoi, mon interface (IHM) n'est plus bloquer.

    Voila le Code.

    Dans le ThisWorkbook:
    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
    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
     
    Private Sub Workbook_Open()
     
        Application.Visible = True
     
        Sheets("Donnees").Activate
        Application.ScreenUpdating = False
        ActiveWindow.DisplayWorkbookTabs = False
        'Application.ScreenUpdating = True
        'ActiveWindow.DisplayWorkbookTabs = True
        IHM_APPORT.Show
    End Sub
     
    Private Sub Workbook_Close()
        'Application.Visible = True
    End Sub
    ********* Dans 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
    23
    24
    25
    26
    27
    28
    29
    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
     
    Private Sub UserForm_Initialize()
     
    Dim hSysMenu As Long
    Dim MeHwnd As Long
    MeHwnd = FindWindowA(vbNullString, Me.Caption)
        If MeHwnd > 0 Then
            hSysMenu = GetSystemMenu(MeHwnd, False)
            RemoveMenu hSysMenu, &HF010&, &H0&
        Else
            MsgBox "Handle de " & Me.Caption & " Introuvable", vbCritical
        End If
     
    End Sub
     
    Private Sub UserForm_Layout()
     
    End Sub
    Merci de votre aide.

  14. #14
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Problème en fonction des postes
    Bonjour,

    La sollution fonctionne mais pas sur tous les postes il y a des postes au 2000 et 2003 ou cela fonctionne et d'autres ou cela ne fonctionne pas? je ne vois pas pourquoi.

    Auriez vous quelques hypothèses?

    D'avance merci.
    Cdlt.
    Serar

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour "bloquer les fenêtres", tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenupdating = false
    en début de code et tu remets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenupdating = True
    Et tu mets ça dans un coin pour que tu ne le perdes pas. Faut faire attention à ses affaires !

  16. #16
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Mas de mouvement de IHM
    Je cherche a bloquer l'IHM ScreenUpdating bloque la mise à jour des champs mais n'empèche pas le mouvement de l'IHM

    Cdlt.
    Serar

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok ! Ok ! On le dit mais on ne se fâche pas !
    Utilise l'événement Layout de l'userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Layout()
        Application.ScreenUpdating = False
        'Ici tu mets les valeurs d'origine
        Me.Top = 0
        Me.Left = 10
        Application.ScreenUpdating = True
    End Sub
    Tu dis si c'est bien ça que tu veux

Discussions similaires

  1. Question sur la gestion des fenetres MDI
    Par RémiONERA dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/07/2005, 07h58
  2. [web] [PerlTk] Position des fenêtres
    Par Cyspak dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 05/11/2004, 11h49
  3. [C#] Probleme de dimensionnement des fenetres en MDI
    Par stephdiplo150 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2004, 19h05
  4. [SWT] Comment faire des fenetres internes ??????
    Par sebounator dans le forum SWT/JFace
    Réponses: 5
    Dernier message: 22/04/2004, 01h12
  5. [VB6] Listage des fenêtres windows
    Par gg78 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 27/05/2003, 11h36

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