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 :

Déclaration d'un userform dans une procédure paramétrée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Par défaut Déclaration d'un userform dans une procédure paramétrée
    Bonjour, j'essaie de contrôler les propriétées d'un userform depuis un autre module mais cela ne fonctionne pas entierement comme je le voudrais. J'arrive à contrôler l'userform en entrant directement son nom avec la propriété que je veux modifier, mais je n'arrive pas à le faire avec une variable qui prendrait le nom de l'userform qui est déjà ouvert (pour pouvoir d'avoir une procédure paramétrée avec entre autres paramètres le nom de l'userform).

    Voici le code sur lequel j'essai. Un userform nommé "Usf_Test", un bouton nommé "Btn_Test". Dans un autre module, une procédure paramétrée Move_USF.

    Code VBA : 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 Btn_Test_Click()
    Dim Usf As String
    Usf = Me.Name
    Call Move_USF(Usf)
    End Sub
     
     
    Sub Move_USF(Usf As String)
    Dim MonUsf As Object
    Set MonUsf = UserForms(Usf) '?????????? Je sais que ce n'est pas comme ça mais je ne trouve pas
    With MonUsf
    .Width = .Width - 12
    .Height = .Height - 10
    .Zoom = 80
    End With
    End Sub

    Merci de votre aide

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour Remy,


    Essaies plutôt comme ceci :

    Code dans ton Userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Btn_Test_Click()
        Call ResizeMyForm(Me)
    End Sub
    Code dans un module Standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub ResizeMyForm(Usf As Object)
      With Usf
         .Width = .Width - 12
         .Height = .Height - 10
         .Zoom = 80
      End With
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Par défaut
    Ça fonctionne parfaitement, merci.

    Même si c'est tout ce qu'il me fallait, je vais être un peu gourmand et en demander un peu plus, pour ma culture personnelle. "Me" est l'objet userform actif, comment aurais-je pu faire si j'avais voulu appliquer cela sur un autre userform (en arrière plan par exemple, je ne sais pas si c'est possible)? En fait, plus simplement peut-être, comment est-ce que je pourrais utiliser le nom d'un userform à la place de "me" (ce n'est peut-être pas possible... ou ma demande pas très claire...)?

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,
    Citation Envoyé par RemyA56 Voir le message
    ... "Me" est l'objet userform actif
    ... comment aurais-je pu faire si j'avais voulu appliquer cela sur un autre userform [...] est-ce que je pourrais utiliser le nom d'un userform à la place de "me"
    - "Me" n'est pas l'objet actif, c'est l'instance de l'objet dans laquelle se situe le code exécuté (workbook, worksheet, chart, userform, class).
    - Tu peux désigner un objet par son CodeName, sans l'encadrer de " (mais pas par le Name qui est une propriété de type String).

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
    Sub test()
      Call affNom(UserForm2)
    End Sub
    Sub affNom(x As Object)
      MsgBox x.Name & vbCr & x.Font.Name
    End Sub

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/05/2009, 13h21
  2. Pb de paramètres dans une procédure
    Par yancimer dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 31/08/2006, 16h33
  3. [VB.NET] Paramètre optionnels dans une procédure
    Par krfa1 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 19/05/2006, 14h22
  4. Passer en paramétre un tableau dans une procédure stockée
    Par killysui dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/04/2006, 11h47
  5. [SQL Server] Passage d'un paramètre dans une procédure
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2005, 13h19

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