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 :

[VBA E] recupérer les propriétés d un userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut [VBA E] recupérer les propriétés d un userform
    j ai besoin pour un projet de recupérer entre autre la propriété caption
    de plusieurs user.
    j ai essayé ceci

    dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sub recup(us as userform)
    msgbox us.caption
    dans le userform "accueil"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .... sur un evenement par exemple 
    call recup(accueil)
    j ai essayé tout les passages d argument possible byval , byref ....
    j ai essayé d instancié la feuille accueil en un objet userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim userf1 as userform
    set userf1 = accueil
    bref sans resultat


    merci pour votre aide

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    Pas sur d'avoir bien compris, dans un module standard:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
        MsgBox GetCaption(UserForm1)
    End Sub
    
    Function GetCaption(Uf As UserForm1) As String
        GetCaption = Uf.Caption
    End Function
    Si tu veux passer différents formulaires à la fonction déclare Uf avec le type Object.

    Dans le module d'un userform

    Sinon pour instancier un userform, utilise New:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim userf1 As UserForm1
        Set userf1 = New UserForm1
        MsgBox userf1.Caption
    Meme chose, si tu veux instancier différents formulaires avec la meme variable déclare la avec le type Object.

    Cordialement,

    Tirex28/

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,
    je me certainement mal exprimé.
    j ai un projet qui contient 6 userforms et bientot un peu plus.

    lors de l initialisation de chaque feuille je voudrais dimensionner le user au format de l application et empecher la fermeture des user en supprimant les croix.

    j utilise donc des function api
    trouvé dans divers forum (je ne sais plus les auteurs mais les remercie qd meme)

    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 Declare Function GetWindowLongA Lib "User32" _
    (ByVal hwnd As Long, ByVal nIndex As Long) As Long
     
    Private Declare Function SetWindowLongA Lib "User32" _
    (ByVal hwnd As Long, ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
     
    Private Declare Function FindWindowA Lib "User32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    Function user()
    hwnd = FindWindowA(vbNullString, Me.Caption)
    exlong = GetWindowLongA(hwnd, -16)
        If exlong And &H880000 Then SetWindowLongA hwnd, -16, exlong And &HFF77FFFF
            zfactor = 100 * CInt(Application.Width / Me.Width)
                If zfactor > 400 Then zfactor = 400
                    Me.Width = Application.Width
                    Me.Height = Application.Height
                Me.Zoom = zfactor
    End Function
    Sub user_ss_croix()
    Dim hwnd As Long
    hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
    "X", "D") & "Frame", Me.Caption)
    SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
    End Sub
    en utilsant celle ci dans le userform ,le resultat est correcte

    au lieu de faire un copier collé dans chaque userform pour utiliser ses fonction

    j aurai voulu passer l objet userform en argument pour les functions
    sachant que la function findwindows attends un string
    "ByVal lpWindowName As String" et sachant que j ai besoin de recupérer les propriétés des userforms (entre autre le .caption) pour le handle

    merci

  4. #4
    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
    Place tes fonctions dans un module standard, tu y auras accès depuis tes différents userform... si j'ai bien compris ta "problématique"

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour
    j ai deja essayé
    mais j ai ce message d erreur
    erreur de compilation:
    utlisation du mot clé me
    a cet endroit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Function user()
    hwnd = FindWindowA(vbNullString, Me.Caption)
    il me semble que le me doit etre utlisé uniquement a l interieur du userform

  6. #6
    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 empêcher l'utilisation des croix fermant les userform, tu peux faire Cancel = True dans l'événement Userform_Queryclose
    Si ça t'intéresse, tu peux tester un userform tout nu et en mettant un bouton dedans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Quitter
     
    Private Sub CommandButton1_Click()
        Quitter = False
        Unload Me
    End Sub
     
    Private Sub UserForm_Initialize()
        Quitter = True
    End sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = Quitter
    End Sub
    Ainsi tu peux quitter l'userform par le bouton, pas par la croix, et faire dans le bouton ou dans QueryClose le test que tu souhaites pour verrouiller ou non cette fermeture.
    A toutes finc utiles

    NB - Mais la croix reste visible

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    Dans un module standard:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Déclaration des API
    Private Declare Function FindWindowA Lib "User32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    'Fonction utilisant les API pour redimensionner un formulaire
    Function ResizeUserForm(UForm As Object)
        Dim UCaption As String
        UCaption = UForm.Caption
        Hwnd = FindWindowA(vbNullString, UCaption)
        'La suite à adapter
    End Function
    Le parametre est de type Object pour accepter aussi bien UserForm1 que UserForm99999.

    Dans chaque Userform:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        ResizeUserForm Me
    End Sub
    Cordialement,

    Tirex28/

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bravo et merci tirex 28

    il fallait passer l objet userform en tant qu object

    donc pour ceux qui desire dimensionner les userforms au dimension de l application et adapter le zoom des controles => function resizeUserform

    pour eviter la fermeture des userforms (sans oublier un bouton pour pouvoir le fermer) => Function sup_croixUserForm

    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
     
    'dans un module standard 
    Function ResizeUserForm(UForm As Object)
    Dim hwnd As Long, exlong As Long, zfactor As Integer
    Dim UCaption As String
     
    et encore une fois merci a tous
     
    UCaption = UForm.Caption
    hwnd = FindWindowA(vbNullString, UCaption)
    exlong = GetWindowLongA(hwnd, -16)
        If exlong And &H880000 Then SetWindowLongA hwnd, -16, exlong And &HFF77FFFF
            zfactor = 100 * CInt(Application.Width / UForm.Width)
     
            If zfactor > 400 Then zfactor = 400
               UForm.Width = Application.Width
                UForm.Height = Application.Height
                UForm.Zoom = zfactor
    End Function
    Function sup_croixUserForm(UForm As Object)
    Dim hwnd As Long
    hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
    "X", "D") & "Frame", UForm.Caption)
    SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
    End Function
     
    'dans chaque userform 
    Private Sub UserForm_Initialize()
    ResizeUserForm Me
    sup_croixUserForm Me

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/05/2014, 00h47
  2. Aide VBA comment relier les tableaux à une interface (userform)
    Par bob_le_chacal dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/10/2012, 21h12
  3. [VBA-E] Modifier les propriétés d'un control par une routine
    Par formath dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/03/2007, 10h45
  4. [VBA] Contrôler les propriétés d'un graphique
    Par Alfred85 dans le forum Access
    Réponses: 3
    Dernier message: 22/02/2007, 12h13
  5. [VBA] Les propriétés de cellule dans Excel
    Par Kylen dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 05/07/2004, 23h02

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