* Bonjour, *
Amené à développer une application dans un milieu professionnel, je suis dans l'obligation de le développer en VBA/Excel 2010. Ledit programme est déjà en exploitation et je galère pour le finir et automatiser la dernière tâche.
Or là, je bloque sur un point, qui à mon sens n'est ni plus ni moins dût à un manque de logique de ma part !
L'application se présente de la manière suivante :
. Le premier onglet est un tableau récapitulatif. Il se représente par un en-tête et l'affichage de plusieurs totaux (qui se mettent à jour tout au long de l'utilisation du fichier).
. A partir de la ligne 8, il va énumérer mes clients et quelques vingt-trois données (colonnes) les concernant.
Chaque ligne débute par un bouton radio. Ce contrôle a pour rôle d'accéder directement à l'onglet dudit client (ex : Bouton Radio A, ramène à l'onglet du client A - B43, ramène à l'onglet du client B43, etc.). Ce qui marche très bien en création manuelle (taper le code soi-même pour chaque Bouton Option), ce qui est d'un pratique à toute épreuve !
Mon souci, c'est l'envie d'automatiser cette prise en compte de code au vue du nombre de nouveaux clients que je suis obligé d'intégrer. Je m'explique :
Lorsque je crée un nouveau client, l'utilisateur active un bouton de commande qui va s'exécuter comme suit :
- Il va créer un nouvel onglet,
- le met en forme,
- Attribue, les couleurs, les formats et les dimensions prédéfinis,
- Ouvre un UserForm pour demander les informations propres à mon nouveau client,
- Une fois le UserForm rempli, on valide par le biais d'un bouton "ok" et les données s'implémentent sur la page du client et sur la page de garde (Onglet 1). Procède à différents calculs et rempli les cellules.
- Il renomme l'onglet de mon nouveau client, par un code qui est propre à chaque client (ex : "AAH1"),
- Sur la Page de garde il rajoute à la fin du tableau une nouvelle ligne, qu'il formate et remplie selon les informations saisies dans le UserForm,
- Sur la colonne XFD, de la page de garde, il recopie cette même référence dans la cellule correspondant à la ligne et colonne du client ("AAH1", qui est le nom de mon onglet client !!)
- Sur la colonne A, il copie un Bouton Radio (ou option), qu'il renomme de cette même référence ("AAH1" - Le nom de l'onglet client).
Tout cela est créé et fonctionne parfaitement. Le souci, c'est que mon nouveau bouton radio nécessite d'un peu de code vba pour savoir ce qu'il doit faire !
Exemple :
Code Vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub AAH1_Click() If AAH1.Value = True Then Sheets("AAH1").Select End If End Sub
Un code pas bien compliqué mais qui se répète pour chaque ligne, chaque bouton radio qui va être créé. MAIS avec une référence propre à chaque client (ex : "AAH1", deviendra "AAH2", Ou "BHU1", ou W…. etc.) puisqu'il doit renvoyer vers l'onglet approprié.
Je souhaite donc créer une procédure qui permettra de récupérer le nom du contrôle (du bouton option) selon la ligne que j'active/ selon le contrôle que je sélectionne. Donc, placer sur la page de garde (VBA) un code du type :
Code Vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub BoutonOptionValidé_Click() If NomOnglet.Value = True Then Sheets("NomOnglet").Select End If End Sub 'La valeur de NomOnglet prenant "AAH1" ou .
Je suis persuadé qu'il existe une méthode pour automatiser la gestion de mes boutons radios, sans avoir besoin d'une intervention manuelle sur de code, mais comment !?!
Je pensais bien évidemment à une boucle sur les contrôles ! Dans le sens, où à la fin de ma première procédure (UserForm + Bouton ok) j'appelle la procédure ci-dessous :
Code Vba : 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 'A noter que les variable sont déjà implémentées dans la première procédure. Dim NumLigne as long 'Définit la ligne sur laquelle se trouve le bouton option Dim NomOnglet As String 'Définit le nom qui référence l'onglet client, le bouton option Dim Obj As OLEObject ----- Public Sub BoutonRadio() Sheets("Onglet1").Select 'code qui permet de reprendre le nom de l'onglet Cells-(NumLigne, "XFD").Select ActiveCell.FormulaR1C1 = NomOnglet 'Boucle pour automatiser le code de mes boutons radio For Each Obj In ActiveSheet.OLEObjects If TypeOf Obj.Object Is MSForms.OptionButton And Obj.Object.grpname = "AHMONQ" Then If Obj.Object.Value = True Then Nompage = Obj.Object.Nam Sheets("Nompage").Select End If End If Next Obj End Sub
Je sais pas pourquoi, mais j'ai l'impression d'être en face d'un système de "serpent qui se mord la queue !"
Si quelqu'un a une idée .... C'est le bienvenu !
Partager