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 excel - Mettre en variable un groupe de contrôle et des userforms correspondants


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Acteur de developpement local
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Acteur de developpement local
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Par défaut vba excel - Mettre en variable un groupe de contrôle et des userforms correspondants
    Bonjour,

    Après des recherches en vains, je suis venu vers vous pour demander aide.
    Sur mon userform (usf_1) du genre fenêtre principale, il y a 4 boutons de commande (cmdB_1, cmdB_2, cmdB_3 et cmdB_4) qui sont censés appelés respectivement des userforms spécifiques (usf_2, usf_3, usf_4, usf_5) .
    La procédure est la même, pour chaque boutons, comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cmdB_1_Click()	
    If checkbox.value = true then ‘ checkbox unique et non visible par l’utilisateur 
    	Usf_2.show ‘afficher l’userform correspondants
    End if
    End sub
    Serait-il possible de mettre en variable les commandeButtons et les userforms correspondants afin de ne faire répéter à chaque fois les mêmes lignes.
    Quelqu’un aurait-il une piste ? C’est une question bête de ma part mais, je début en vba et cherche à perfectionner mes codes .

    Merci par l'avance de votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la question n'est pas bête, et la solution n'est pas la partie la plus simple en VBA : modules de classe

    voici un lien avec 3 tutoriels pour apprendre : http://excel.developpez.com/faq/?pag...ntroductionPOO

    et un sous-lien (issu du dernier des trois liens) qui traite de ton sujet : http://tissotemmanuel.developpez.com...classe/#LIII-B

  3. #3
    Membre averti
    Homme Profil pro
    Acteur de developpement local
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Acteur de developpement local
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Par défaut
    Merci pour votre piste joe.levrai.
    Je savais que la procédure aura recours à l'utilisation des modules classes , je vais faire un tour dans les liens que vous avez donner et revenir pour confirmer la résolution. (y)

  4. #4
    Membre averti
    Homme Profil pro
    Acteur de developpement local
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Acteur de developpement local
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Par défaut
    Bonjour, avec un peu de bidouillage j'ai réussi à m'avancer mais pas encore assez pour mon projet.
    Les lignes de code ci-après permettent de boucler sur un groupe de bouton . Le grand pas et maintenant de boucler avec les Userforms .

    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
    '------ Dans module de classe : cmdusf
    Option Explicit
    Public WithEvents cmdgroup As CommandButton
    Private Sub cmdgroup_Click()
    	If usf_1.checkbox.Value = True Then
    		If cmdgroup.Caption = "cmdB_1" Then usf_2.Show
    		If cmdgroup.Caption = "cmdB_2" Then usf_3.Show
    		If cmdgroup.Caption = "cmdB_3" Then usf_4.Show
    		If cmdgroup.Caption = "cmdB_4" Then usf_5.Show
    	Else
    		MsgBox "Veuilez choisir une action", vbInformation, "Choix obliqatoire"
    	End If
    End Sub
     
    '------ Dans l'userform principale : usf_1
    Option Explicit
    Dim Buttons() As New cmdusf
    Private Sub UserForm_Initialize()
    Dim Ctrl As Control
    Dim Count As Integer
        For Each Ctrl In usfmain.Controls
            If TypeName(Ctrl) = "CommandButton" Then
                Count = Count + 1
                ReDim Preserve Buttons(1 To Count)
                Set Buttons(Count).cmdgroup = Ctrl
            End If
        Next   
    End Sub
    Un p'ti coup de pouce sera un bienvenu

    je me suis caché la tête sur une journée toute entière mais j'ai pas trouvé la bonne soluce. On creuse encore et encore...

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Moi perso j'aurais rendu visible ou invisible les boutons en fonction des besoins

    A+

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Buttons() As cmdusf
    Private Sub UserForm_Initialize()
    Dim Ctrl As Control
    Dim Count As Integer
        For Each Ctrl In usfmain.Controls
            If TypeName(Ctrl) = "CommandButton" Then
                Count = Count + 1
                ReDim Preserve Buttons(1 To Count)
                Set Buttons(Count) = new cmdusf
                Set Buttons(Count).cmdgroup = Ctrl
            End If
        Next   
    End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Acteur de developpement local
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Acteur de developpement local
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Bonjour,

    Moi perso j'aurais rendu visible ou invisible les boutons en fonction des besoins

    A+
    Bonjour Igloobel,

    Je vais peut être adopter votre proposition pour ce projet pour faire rapide.
    N'empêche que ce problème reste sans réponse et un jour.. viendra ...

    Mais bon merci pour l'idée.

  8. #8
    Invité
    Invité(e)
    Par défaut
    l'avantage d'un module de classe c'est qu'il est autonome!
    vue que tu peux lui passer tous les objets que tu veux inutile de faire référence au If usf_1.checkbox.Value = True Then!
    Code UserForm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Buttons() As cmdusf
    Private Sub UserForm_Initialize()
    Dim Ctrl As Control
    Dim Count As Integer
        For Each Ctrl In usfmain.Controls
            If TypeName(Ctrl) = "CommandButton" Then
                Count = Count + 1
                ReDim Preserve Buttons(Count)
                Set Buttons(Count) = New cmdusf
                Set Buttons(Count).cmdgroup = Ctrl
                Set Buttons(Count).MyCheckBox = CheckBox
            End If
        Next
    End Sub
    Code Module de classe : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    Public WithEvents cmdgroup As CommandButton
    Public WithEvents MyCheckBox As CheckBox
    Private Sub cmdgroup_Click()
        If MyCheckBox.Value = True Then
            If cmdgroup.Caption = "cmdB_1" Then usf_2.Show
            If cmdgroup.Caption = "cmdB_2" Then usf_3.Show
            If cmdgroup.Caption = "cmdB_3" Then usf_4.Show
            If cmdgroup.Caption = "cmdB_4" Then usf_5.Show
        Else
            MsgBox "Veuilez choisir une action", vbInformation, "Choix obliqatoire"
        End If
    End Sub

  9. #9
    Membre averti
    Homme Profil pro
    Acteur de developpement local
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Acteur de developpement local
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Par défaut boucler sur les userforms en fonction des bouttons cliqués
    Bonjour, rdurupt
    merci pour votre réponse.
    cependant, c'est les userform eux même qui est le sujet du boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'module de class : cmdusf ->
    '---
    If usf_1.checkbox.Value = True Then
    		If cmdgroup.Caption = "cmdB_1" Then usf_2.Show
    		If cmdgroup.Caption = "cmdB_2" Then usf_3.Show
    		If cmdgroup.Caption = "cmdB_3" Then usf_4.Show
    		If cmdgroup.Caption = "cmdB_4" Then usf_5.Show
    	Else
    '---
    le problème était de pouvoir boucler sur les USERFORM (usf_2 à 5) respectivement à chaque clique sur les commandbutton cmdB_1 à 4 que j'ai groupé dans la class cmdgroup.

  10. #10
    Invité
    Invité(e)
    Par défaut
    j'ai absolument rien compris!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    module de class : cmdusf ->
    '---
    If usf_1.checkbox.Value = True Then
    		 usf_2.Show vbModal
    		 usf_3.Show vbModal
    		 usf_4.Show vbModal
    		 usf_5.Show vbModal
    	Else
    '---

  11. #11
    Membre averti
    Homme Profil pro
    Acteur de developpement local
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Acteur de developpement local
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Par défaut
    ok rdurupt, je reprend tout depuis le début

    Sur usf_1 (une fenetre acceuil), les 4 bouttons (cmdB_1 à 4) doivent appeller leurs userforms respectif (usf_2 à 5).
    - au lieu de repeter la même commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cmdB_1_click() -> verifier conditions (checkbox coché et blabla) + lancement usf_1
    ....
    cmdB_4_click() -> verifier les mêmes condition + lancement usf_2
    avec les même conditions, je voudrais passer par le module classe et mettre en variable les cmdB et les usf correspondant pour avoir le genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    groupcmdB_click() pour verifier conditions + lancement usf correspondant au bouton cliquer
    en espérant avoir être plus clair cette fois

  12. #12
    Invité
    Invité(e)
    Par défaut
    mais ton code le fait déjà If cmdgroup.Caption = "cmdB_1" Then usf_2.Show !
    entendons nous bien Caption est ce que le bouton affiche pas sont nom! If cmdgroup.Name= "cmdB_1" Then usf_2.Show

  13. #13
    Membre averti
    Homme Profil pro
    Acteur de developpement local
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Acteur de developpement local
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Par défaut
    oui, le code fonctionne mais pas tout à fait à ce que j'attendais. En effet je voudrais amélioré pour avoir un boucle du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i =  1 to Nombre de cmdB
    cmdgroup.Name = "cmdB_"& i Then usf_(i+1).show 'c'est tout faux mais seulement pour avoir l'idée
    Je sais pas si c'est possible de classer les USF

Discussions similaires

  1. [VBA - Excel] mettre un racourci clavier
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/10/2006, 13h41
  2. [VBA-Excel]Mettre dans un tableau le contenu d'un fichier
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/07/2006, 16h37
  3. [VBA - Excel]Concatenation checkbox/variable
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/06/2006, 16h45
  4. [Excel]Mettre une variable dans une fonction
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2006, 12h00
  5. [VBA][Excel]Mettre un bouton d'aide sur un userform
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/01/2006, 18h30

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