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

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

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

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! =)

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
Rechercher des sujets similaires à "meme macro change multiples combobox feuille"