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

Excel Discussion :

Boucler sur des contrôles pour attribuer automatiquement un nom à chaque contrôle de la page de garde. [XL-2010]


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Boucler sur des contrôles pour attribuer automatiquement un nom à chaque contrôle de la page de garde.
    * 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 !

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Je pense que tu devras passer par une classe (module de classe).
    Il y a des exemples sur ce site et dans les forums.

    Par contre, si tu utilisais le double-click des cellules de la ligne, par exemple, ça me semblerait pas mal plus simple à gérer.
    Et moins lourd en nombre de contrôles...
    MPi²

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Bouton radio
    Salut Parmi,
    C'est une idée que je n'avais pas envisagée, le coup du double-clic sur la ligne... A méditer !!!

    Mais comme tout bon informaticien, je vais commencer par faire ma tête de mule et étudier la création d'un module de classe.
    En tout cas, merci pour la réponse.

    Si d'autres ont des idées....

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

Discussions similaires

  1. [XL-2003] Boucler sur des lignes pour placer des valeurs selon certaines conditions
    Par antoine2933 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 31/08/2011, 16h00
  2. [XL-2010] Macro pour boucler sur des OptionButtons
    Par Hellyeah13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/05/2011, 14h26
  3. Etablir des liens sur des niuméros pour appels automatiques
    Par zerobug dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 17/11/2008, 11h13
  4. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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