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 :

fermeture du userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Par défaut fermeture du userform
    salut à tous
    mon userform disparaît quand j'exécute l'un de ses boutons. Pourtant je n'ai écris aucune instruction du genre
    je souhaiterai garder mon userforme en vue tant que mon classeur est ouvert.
    comment puis je faire?
    d'avance merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    bonjour,

    les deux principales (seules) fonctions pour faire disparaitre un userform sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Userform.Hide
    'et
    Unload UserForm
    pour avoir un userform constamment visible il faut mettre la propriété modal à true
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Si ton bouton active une feuille ou un autre UF c'est normal que le premier 'disparait', il passe au second plan.
    Je ne sais pas si en VBA il y à la commande Zordre, ou alors ce devrait être possible par API pour le maintenir 'Audessus' des autre feuilles..

    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
    'DANS UN MODULE
    Public Const HWND_TOPMOST = -1
    Public Const HWND_NOTOPMOST = -2
    Public Const SWP_NOMOVE = 2
    Public Const SWP_NOSIZE = 1
    Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
     
    Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
     
    '
    'Place une forme en permanence (presque) au dessus du bureau.
    'Mode = true la forme est au dessus du bureau, si False positionnement normal
    '
    Sub PlaceDessus(Fr As Form, Mode As Boolean)
    Dim e As Integer
    Dim i As Long
        If Mode Then
             i = SetWindowPos(Fr.hWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
        Else
             i = SetWindowPos(Fr.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
        End If
    End Sub
    Remplacer Form par UserControl
    A+

  4. #4
    Membre éclairé Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Par défaut
    j'ai essayé mais le userform disparaît toujours.
    mon bouton active effectivement une autre feuille, mais même lorsque je revient sur la feuille d'origine le userform est absent. quant à la propriété showmodal lorsque je la met true il m'est impossible d'accéder aux feuilles derrières le userform, ce qui ne m'arrange pas.

    je n'ai pas très bien compris lorsque vous dites de remplacer form par usercontrol. quand j'écris "form as " la liste déroulante qui s'affiche ne contient pas usercontrol

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Pour un UserForm il n'y a pas de hwnd, j'ai modifié légèrement le code
    Testé, le UF reste au dessus des feuilles excel, tu peu le déplacer et écrire sur les feuilles.

    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
    'COLLER DANS UN MODULE
    Option Explicit
     
    Public Const HWND_TOPMOST = -1
    Public Const HWND_NOTOPMOST = -2
    Public Const SWP_NOMOVE = 2
    Public Const SWP_NOSIZE = 1
    Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
     
    Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
     
    Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
        ByVal wCmd As Long) As Long
    Declare Function GetFocus Lib "user32" () As Long
     
    '
    'Place une forme en permanence (presque) au dessus du bureau.
    'Mode = true la forme est au dessus du bureau, si False positionnement normal
    '
    Sub PlaceDessus(Fr As Long, Mode As Boolean)
    Dim e As Integer
    Dim i As Long
        If Mode Then
             i = SetWindowPos(Fr, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
        Else
             i = SetWindowPos(Fr, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
        End If
    End Sub
    Placer dans le UserControl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Activate()
        Dim hwnd As Long
        hwnd = GetFocus
        PlaceDessus hwnd, True
    End Sub
    Placer dans la 1er feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
        UserForm1.Show 0
    End Sub
    J'ai testé, ca fonctionne..
    A+

  6. #6
    Membre éclairé Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Par défaut
    merci pour votre aide. mais il y'a toujours un problème
    mon programme crée à chaque fois une nouvelle feuille qui devient la première.
    j'ai essayé votre code avec la modification suivante:
    au lieu d'insérer dans la première feuille(qui en fait ne la sera plus)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
    userform1.Show 0
    end sub
    j'ai ajouté après la création de la feuille ("capcod") le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    proc = "Private Sub Worksheet_Activate()" & vbCrLf
    proc = proc & "userform1.Show 0" & vbCrLf
    proc = proc & "end sub"
     
    Sheets("capcod").Activate
     
     With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
            ligne = .CountOfLines + 1
            .InsertLines ligne, proc
        End With
    à l'exécution excel plante complètement et se ferme

Discussions similaires

  1. [XL-2007] Fermeture d'UserForm
    Par MidoCESI dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2014, 15h37
  2. Fermeture de userform
    Par jurgh dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/09/2009, 14h16
  3. [XL-2002] Ouverture et fermeture d'userform
    Par Godard dans le forum Excel
    Réponses: 2
    Dernier message: 27/04/2009, 07h38
  4. Fermeture du userform
    Par TomSawyer76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/07/2008, 14h43
  5. Fermeture du Userform lors d'une sauvegarde
    Par wabo67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/12/2007, 18h12

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