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 :

Réaliser une boucle sur commandbutton [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Par défaut Réaliser une boucle sur commandbutton
    Bonjour à toutes et à tous,

    Je vais essayer d'expliquer simplement mon problème :
    J'ai un userform contenant beaucoup de commandbutton (entre 50 et 100)
    Je n'ai pas renommé mes boutons (caption = commandbutton1 : copie du même bouton) (name = commandbutton1, commandbutton2 ...)

    Je voudrais faire un code simple et le plus court possible pour :
    (je sais que le bout de code que je propose ne fonctionne pas mais c'est la "meilleure image" pour expliquer ce que je veux faire)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For i = 1 to 100
     
    Private Sub CommandButton "i"_Click()
    sheets("Feuil2").cells(lfin,1) = sheets("Feuil1").cells(i,1).value
     
    Next
    J'ai vu des choses sur le forum par "collection" pour par exemple changer la couleur de tous les commandbutton (ou autre type controle) mais je n'ai rien trouvé sur un code qui boucle sur tous les commandbutton et qui récupère l'indice du commandbutton et le stocke dans une variable.

    Si besoin je peux fournir un bout de code et un fichier associé pour expliquer / détailler ma demande.

    Merci d'avance

    Mick

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Pour boucler sur les controles => http://silkyroad.developpez.com/VBA/...UserForm/#LI-B

    .....qui récupère l'indice du commandbutton et le stocke dans une variable.
    , qu'est-ce que l'indice ?

    Bonne soirée, perso, je pars pour 10 jours mais j'espère que tu auras d'autres réponses
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Par défaut
    Merci pour la réponse, je vais voir ce que je peux en faire, mais je ne suis pas sur de pouvoir l'exploiter pour mon problème.
    Quand je veux dire "récupérer" l'indice du commandbutton, en fait si je clique sur commandbutton1 je voudrais stocker en variable 1, si je clique sur commandbutton2, je veux récupérer 2 en variable.

    En code il s'agirait d'optimiser :
    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
     
    Private Sub CommandButton1_Click()
    Dim lfin As Integer
     
    'Sélection de la dernière cellule vide
    lfin = Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
     
    Cells(lfin, 1) = Sheets("Feuill2").Cells(1, 1).Value
    End Sub
     
    Private Sub CommandButton2_Click()
    Dim lfin As Integer
     
    'Sélection de la dernière cellule vide
    lfin = Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
     
    Cells(lfin, 1) = Sheets("Feuill2").Cells(2, 1).Value
    End Sub
    ... et si j'ai 50 boutons il faut recopier 50 fois le code.
    De manière plus général, si je clique sur le bouton"i" (s'ils sont tous écrit avec la même syntaxe) pouvoir récupérer cette valeur et la stocker.

    J'espère avoir été assez explicite.

    Merci de votre aide

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Par défaut
    Merci, grâce au conseil et à un peu de recherche 'plus' poussée j'ai trouvé la solution en m'aidant du code sur les modules de classe trouvé sur :
    http://excel.developpez.com/faq/?pag...sseControleUSF

    Je clique donc sur résolu

    Mick

    Héhé, ta réponse est arrivée pendant que je testais un bout de code et que je te répondais !

    Encore merci

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    un exemple à adapter, à toi de mettre dans le module de classe ce que tu veux obtenir

    Dans le code de l'usf
    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
    Private Sub Commandfermer_Click() 'ceci est mon code fermant l'usf
    Unload Me
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim Ctrl As Control
    Dim Cl As bouton
     
    Set Collect = New Collection
     
    'boucle sur les objets de la Feuil1
    For Each Ctrl In Me.Controls
        'verifie s'il s'agit d'un CommandButton
        If TypeOf Ctrl Is MSForms.CommandButton Then
          If Ctrl.Name <> "Commandfermer" Then 'bouton nommé pour fermeture USF
            Set Cl = New bouton
            Set Cl.groupebouton = Ctrl
            Collect.Add Cl
          End If
        End If
    Next Ctrl
     
    End Sub
    dans un module de classe nommé "bouton", par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public WithEvents groupebouton As MSForms.CommandButton
     
    Private Sub groupebouton_Click()
      Sheets("Feuil1").Range("A1") = groupebouton.Name 'à remplacer par ce que tu veux faire
    End Sub
    et dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public Collect As Collection
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    sauf que dans mon module de classe, il subsiste un "End if" en trop
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. [XL-2010] Réaliser une boucle sur un macro allant dans IE sans gêner l'utilisation
    Par NeilujA dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/03/2015, 10h47
  2. Réponses: 0
    Dernier message: 17/03/2015, 18h25
  3. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  4. [ADO.NET]Comment réaliser une relation sur plusieurs champs?
    Par kleomas dans le forum Accès aux données
    Réponses: 3
    Dernier message: 13/03/2006, 12h40
  5. [MySQL] Réaliser une pagination sur un forum
    Par maroweb dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/02/2006, 12h39

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