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 :

Lancer une macro depuis un control créé par macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre expert
    Homme Profil pro
    ingénieur qualité
    Inscrit en
    Mars 2015
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur qualité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 291
    Points : 3 911
    Points
    3 911
    Par défaut Lancer une macro depuis un control créé par macro
    Bonjour,

    Je travaille actuellement sur un fichier qui extrait des informations d'autres fichiers. Mon problème est le suivant: les utilisateurs des fichiers sources aiment changer le noms des feuilles régulièrement.
    J'ai donc fait un bout de macro qui ouvre un userform qui propose tous les noms de feuilles du fichier source avec le code ci dessous.
    Mon problème est que comme les OptionButton sont créer à l'initialisation je ne sais pas comment déclarer la macro qui correspondrait au OptionButton_Click

    SHEET_FORMULAIRE est la feuille qui contient toutes les données des fichiers sources
    FORM_NOM_NOMEN est le nolm de la cellule contenant le nom du fichier source
    FORM_NOM_FEUILLE_NOMEN est le nom de la cellule censé contenir le nom de la feuille à analyser

    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 ControlToBeAdded As Control
     
    Dim MySheetCount As Integer
     
    Private Sub Annuler_Click()
    Me.Hide
    End Sub
     
    Private Sub UserForm_Initialize()
     
    Me.Label1.Caption = "La feuille : " & SHEET_FORMULAIRE.Range(FORM_NOM_FEUILLE_NOMEN) & " n'a pas été trouvée, sélectionnez la feuille désirée :"
    ' Ajoute les noms de Feuilles
    For MySheetCount = 1 To Workbooks(SHEET_FORMULAIRE.Range(FORM_NOM_NOMEN).Value).Worksheets().Count
        Set ControlToBeAdded = Me.Controls.Add("Forms.OptionButton.1", Workbooks(SHEET_FORMULAIRE.Range(FORM_NOM_NOMEN).Value).Worksheets(MySheetCount).Name, True)
        ControlToBeAdded.Left = 20
        ControlToBeAdded.Top = 20 + 15 * MySheetCount
        ControlToBeAdded.Caption = Workbooks(SHEET_FORMULAIRE.Range(FORM_NOM_NOMEN).Value).Worksheets(MySheetCount).Name
    Next MySheetCount
     
    Me.Annuler.Left = 20
    Me.Annuler.Top = 10 + 15 * (MySheetCount + 1)
    Me.Annuler.Height = 30
    Me.Annuler.Width = 200
    Me.Annuler.Caption = "ANNULER"
     
    Me.Height = 70 + 15 * (MySheetCount + 1)
    Me.Width = 240
     
    End Sub
    PS : j'ai déjà lu les tutos liés aux userforms et aux control sans trouver mon bonheur.

    Quelqu'un peut il m'aider?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code Useform : 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
    Dim cls() As Classe1
    Private Sub UserForm_Initialize()
    ReDim cls(ActiveWorkbook.Worksheets().Count + 1)
    'Me.Label1.Caption = "La feuille : " & SHEET_FORMULAIRE.Range(FORM_NOM_FEUILLE_NOMEN) & " n'a pas été trouvée, sélectionnez la feuille désirée :"
    ' Ajoute les noms de Feuilles
    For MySheetCount = 1 To ActiveWorkbook.Worksheets().Count
    Set cls(MySheetCount) = New Classe1
         Set cls(MySheetCount).OptBt = Me.Controls.Add("Forms.OptionButton.1")
        cls(MySheetCount).OptBt.Left = 20
        cls(MySheetCount).OptBt.Top = 20 + 15 * MySheetCount
        cls(MySheetCount).OptBt.Caption = ActiveWorkbook.Worksheets(MySheetCount).Name
    Next MySheetCount
     
    'Me.Annuler.Left = 20
    'Me.Annuler.Top = 10 + 15 * (MySheetCount + 1)
    'Me.Annuler.Height = 30
    'Me.Annuler.Width = 200
    'Me.Annuler.Caption = "ANNULER"
    '
    'Me.Height = 70 + 15 * (MySheetCount + 1)
    'Me.Width = 240
     
    End Sub
    Code Classe1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents OptBt As MSForms.OptionButton
    Private Sub OptBt_Click()
    ActiveWorkbook.Sheets(OptBt.Caption).Select
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre expert
    Homme Profil pro
    ingénieur qualité
    Inscrit en
    Mars 2015
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur qualité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 291
    Points : 3 911
    Points
    3 911
    Par défaut
    Ca marche nickel !

    Je n'ai jamais utilisé les modules de classe mais je pense que je vais me pencher dessus.

    Résolu, merci beaucoup !!!

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

Discussions similaires

  1. [vba]lancer une requete depuis une macro
    Par skyarnangel dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/02/2009, 16h53
  2. Réponses: 3
    Dernier message: 31/08/2008, 16h33
  3. [VB.NET(2.0)]Lancer une form depuis la forme principale
    Par Dnx dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/09/2006, 13h08
  4. Lancer une action depuis une autre action
    Par anaon dans le forum Struts 1
    Réponses: 6
    Dernier message: 04/08/2006, 19h38
  5. [langage] Lancer une serie de commande en cmd par perl
    Par Ludo167 dans le forum Langage
    Réponses: 6
    Dernier message: 13/07/2004, 14h15

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