Même Macro Change sur de multiples ComboBox d'une feuille

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
T
Toxicbottle
Nouveau venu
Nouveau venu
Messages : 3
Inscrit le : 10 septembre 2017
Version d'Excel : 2007

Message par Toxicbottle » 10 septembre 2017, 13:07

Bonjour tout le monde,

Je viens de m'inscrire sur le forum car je travaille sur l'élaboration d'un formulaire Excel permettant la saisie de données et leur exportation dans un SGBD par la suite.

Tout d'abord, j'espère avoir posté au bon endroit =)

J'ai commencé à programmer en VBA il y a 3 mois, donc j'ai encore beaucoup de lacunes malgré mon acharnement à apprendre =)

Voilà mon problème et son contexte:

J'ai créé un document comportant plusieurs volets (onglets), soit un volet de saisie des données, un volet d'export et enfin des volets utilitaires comportant des listings et diverses autres informations. Mon volet de saisie comporte des colonnes dans lesquelles viennent se loger les données saisies. Chaque colonne correspond donc à un champ de saisie dans le futur formulaire et comporte une entête dont le nom correspond au nom du champ. Pour faire simple, en ligne 1 j'ai des entêtes, en ligne 2 se rentrent les données puis quand c'est fait, l'export se fait par Click d'un bouton et la macro transfère les informations dans le volet export après les avoir dûment contrôlées.

Jusqu'ici, tout va bien =)

Je dois maintenant créer une interface de saisie des données qui ait une jolie allure. Pour ce faire, j'ai crée un nouveau volet intitulé "Formulaire" et inséré un canevas de formulaire sous la forme d'une image. Sur cette image, je suis venu greffer des ComboBox pour permettre la saisie des informations. A chaque saisie dans un ComboBox, je veux que les informations soient expédiées dans la feuille de saisie décrite plus haut qui s'occupe de les contrôler.

Mes questions:

1) Je cherche à faire en sorte que suite à la saisie d'une valeur dans un des 70 ComboBox de mon Formulaire, la Macro se comporte comme dans une feuille avec l’événement:

If Not Intersect(Target, Target.Worksheet.Range("A1:A10")) Is Nothing Then...

Autrement dit, que peu importe le ComboBox dont la valeur est changée, la même Macro se déclanche sans devoir coder une Macro pour chaque ComboBox. Cette Macro se chargerait donc simplement d'expédier l'information dans une autre feuille, dans une cellule dont le nom est identique à celui du ComboBox.

2) Est-ce que le fait d'avoir procédé de la manière décrite ci-dessus, soit au travers de ComboBox Active X comporte des désavantages par rapport à celle qui consisterait à créer un UserForm dans la Macro. J'ai l'impression que c'est un peu amateur, mais je dois absolument garantir un aspect correct au document et j'ai l'impression que créer un Userform au travers de l'éditeur dans les modules de la Macro va tuer dans l'oeuf toute tentative d'obtenir un rendu potable.

Voilà, désolé pour la longueur du post, je voulais être aussi précis que possible et merci d'avance pour votre aide!

Luca
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 10 septembre 2017, 16:57

Bonjour,

Pour ma part, je partirai plutôt sur un UserForm qu'une zone de feuille de calcul mais ce n'est que mon avis !
Pour ce qui est de la gestion événementielle et pour 70 ComboBox, il te faut utiliser un module de classe avec une ou plusieurs fonctions encapsulées dans ce module et c'est là, que l'utilisation d'un UserForm est plus facile à mon goût.
Je suis en vacances et seulement sur iPad donc, je ne peux pas te pondre de code maintenant mais regardes déjà du côté des modules de classe pour te familiariser avec et à mon retour (samedi) si personne ne t'en a pondu un (ce que je doute fort !), je ferai en sorte de t'aider dans ton projet
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
T
Toxicbottle
Nouveau venu
Nouveau venu
Messages : 3
Inscrit le : 10 septembre 2017
Version d'Excel : 2007

Message par Toxicbottle » 10 septembre 2017, 18:16

Merci Theze pour ta réponse!

Je vais regarder, comme t'as dit, du côté des modules de classe. J'ai déjà bossé avec des modules de classe mais là, j'ai le sentiment que l'encapsulement des fonctions dont tu parles est un peu trop compliqué pour moi. Je vais quand même essayer en attendant de voir si quelqu'un du forum peut m'aider.

En tout cas, encore merci pour ton aide! =)
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 17 septembre 2017, 10:16

Bonjour,

Je reviens vers toi pour savoir si tu as avancé dans ton projet ?
Concernant le module de classe, voici une piste :
Code à mettre dans le formulaire :
'à déclarer en tête de module de l'UserForm
Dim Combo() As New Classe1

Private Sub UserForm_Initialize()

    Dim Ctrl As Control
    Dim I As Integer
    
    For Each Ctrl In Me.Controls
        
        'seulement les ComboBox
        If TypeName(Ctrl) = "ComboBox" Then
        
            I = I + 1
            ReDim Preserve Combo(1 To I)
            
            Set Combo(I).GroupeCombo = Ctrl
            Set Combo(I).Feuille = Worksheets("Feuil1") 'adapter le nom de la feuille où se trouve les noms
        
        End If
        
    Next Ctrl
    
End Sub
Code à mettre dans le module de classe nommé Classe1 (nom par défaut) :
Public WithEvents GroupeCombo As MSForms.ComboBox

Private LaFeuille As Worksheet

Private Sub GroupeCombo_Click()

   LaFeuille.Range(GroupeCombo.Name).Value = GroupeCombo.Value
   
End Sub

Property Set Feuille(Fe)

    Set LaFeuille = Fe
  
End Property
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message