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 :

Appel d'une procédure depuis un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    775
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 775
    Points : 177
    Points
    177
    Par défaut Appel d'une procédure depuis un UserForm
    Bonjour à tous,

    Voici le code d'initialisation des 3 UserForms de mon projet:
    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
    Dim Cmb As CommandBarControl
        Dim cBar As CommandBar
        Set cBar = CommandBars.Add(Position:=msoBarFloating, MenuBar:=False, Temporary:=True)
        Set Cmb1 = cBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
        Set Cmb2 = cBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
        Set Cmb3 = cBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
     
        Cmb1.FaceId = 3731 'valider
        Cmb2.FaceId = 5896 'nouveau
        Cmb3.FaceId = 2487 '4356 '1716 '644 '1088 ' 'supprimer
     
        Me.valider.Picture = Cmb5.Picture
        Me.valider.PicturePosition = fmPicturePositionLeftCenter
        Me.nouveau.Picture = Cmb6.Picture
        Me.nouveau.PicturePosition = fmPicturePositionLeftCenter
        Me.supprimer.Picture = Cmb7.Picture
        Me.supprimer.PicturePosition = fmPicturePositionLeftCenter
        cBar.Delete
     
        With Application
            ratiow = Int(.Width * 100 / Me.Width) * 0.98
            ratioh = Int(.Height * 100 / Me.Height) * 0.98
            ratio = IIf(ratiow < ratioh, ratiow, ratioh)
            Me.Zoom = ratio
            Me.Left = Application.Left
            Me.Top = Application.Top
            Me.Width = Application.Width - 11
            Me.Height = Application.Height - 11
        End With
    Pour raccourcir je souhaiterais créer une procédure objet dans un module et l'appeler depuis chaque UserForm.

    Est-ce possible, merci d'avance pour votre aide.

  2. #2
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, imaginons sur votre USF1 vous avez un bouton CommandButton1. Vous cliquez dessus et il démarre une macro nommée OuvTravail.
    vous pouvez avoir trois ou quatre USF et avoir toujours 1 bouton qui démarre la macro OuvTravail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()
    OuvTravail
    End Sub
     
    Sub OuvTravail()
    ...Code...
    End Sub
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    775
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 775
    Points : 177
    Points
    177
    Par défaut
    Bonjour Transitoire,
    Merci pour votre réponse.
    Bonjour, imaginons sur votre USF1 vous avez un bouton CommandButton1. Vous cliquez dessus et il démarre une macro nommée OuvTravail.
    vous pouvez avoir trois ou quatre USF et avoir toujours 1 bouton qui démarre la macro OuvTravail
    Sur le principe cela me pose aucun soucis.
    Je rencontre quelques difficultés avec le code de l'initialisation à intégrer dans une procédure objet d'un module.

  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 : 70
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Je ferais plutôt comme ça :

    Dans l'userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
      Call MaProcedure(Me)
    End Sub
    Dans un module Standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub MaProcedure(usf)
      ' code ...
      ' ...
      ' Exemple :
     
      MsgBox usf.Caption
     
    End Sub
    EDIT : mettre l'userform (désigné par Me) en argument de la procédure permet d'agir sur cet userform depuis la procédure sans le désigner nommément.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Je rencontre quelques difficultés avec le code de l'initialisation à intégrer dans une procédure objet d'un module.
    Vous pouvez travailler sur un UserForm depuis n'importe quel module général avec un code du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
    With UserForm1
          .Label1.caption = "Nom"
          .Label2.Caption = "Prénom"
          .TextBox1.Value = ""
        ' ETC ETC
    End With
    End Sub
    Si vous souhaitez plus de détails, faites une recherche sur les interventions de Pierre Fauconnier sur ce sujet, qui l'explique infiniment mieux que moi

    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    775
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 775
    Points : 177
    Points
    177
    Par défaut
    Bonjour Patrice740,
    Je ne peux pas me contenter de copier tout simplement le code de la Private Sub UserForm_Initialize() dans la Sub MaProcedure(usf).
    Cela doit être un peu plus compliqué que cela.
    @+

    Oups j'avais pas vu la nouvelle réponse de Transitoire, dans ce cas cela oblige à faire 3 procédures si j'ai bien compris.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    775
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 775
    Points : 177
    Points
    177
    Par défaut
    Re,
    J'ai un peu progressé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub MaProcedure(usf)
        With usf
            ratiow = Int(.Width * 100 / .Width)
            ratioh = Int(.Height * 100 / .Height)
            ratio = IIf(ratiow < ratioh, ratiow, ratioh)
            .Zoom = ratio
            .Left = Application.Left
            .Top = Application.Top
            .Width = Application.Width - 11
            .Height = Application.Height - 11
        End With
    End Sub
    Jusque là ça fonctionne mais pour le reste ça coince,je continu de chercher.

  8. #8
    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 : 70
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Pour le reste, le code d'origine devrait fonctionner en remplaçant Me par usf.
    Sauf qu'à priori il y a des erreurs dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Me.valider.Picture = Cmb5.Picture
        Me.valider.PicturePosition = fmPicturePositionLeftCenter
        Me.nouveau.Picture = Cmb6.Picture
        Me.nouveau.PicturePosition = fmPicturePositionLeftCenter
        Me.supprimer.Picture = Cmb7.Picture
        Me.supprimer.PicturePosition = fmPicturePositionLeftCenter
    Ce devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Me.valider.Picture = Cmb1.Picture
        Me.valider.PicturePosition = fmPicturePositionLeftCenter
        Me.nouveau.Picture = Cmb2.Picture
        Me.nouveau.PicturePosition = fmPicturePositionLeftCenter
        Me.supprimer.Picture = Cmb3.Picture
        Me.supprimer.PicturePosition = fmPicturePositionLeftCenter
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    775
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 775
    Points : 177
    Points
    177
    Par défaut
    Bonjour Patrice740,
    Effectivement c'est une grossière erreur de numérotation des boutons.
    Je viens de tester ça fonctionne tip top.
    Merci à vous, vos apports abonde ma connaissance.

Discussions similaires

  1. [XL-2016] Appel d'une macro depuis un userform
    Par Henri1830 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/08/2019, 15h52
  2. [XL-2000] Appel d'une procédure depuis un UserForm
    Par Hankow dans le forum Excel
    Réponses: 7
    Dernier message: 30/07/2015, 11h32
  3. Appel d'une procédure depuis un trigger
    Par lenoil dans le forum PL/SQL
    Réponses: 5
    Dernier message: 14/06/2012, 09h51
  4. [AC-2003] Appel d'une procédure depuis un Bouton de formulaire
    Par rjl dans le forum IHM
    Réponses: 18
    Dernier message: 27/07/2009, 00h32
  5. [VBA-E] Appel de fonction/procédure depuis une variable
    Par truman dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/05/2006, 16h20

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