XL 2013 Multipages même macro pour plusieurs boutons

Valentin_a

XLDnaute Nouveau
Bonjour

Je suis nouveau sur ce forum et poas vraiment expert... J'ai une multipage qui contient x pages et y command buttons. Je voudrais récupérer le nom des boutons sur lequel l'utilisateur vient cliquer et y affecter une macro. J'ai lu qu'il fallait utiliser un module de classe mais ne comprends pas comment ça fonctionne.
Merci à tous de votre aide
Bonne journée
 

patricktoulon

XLDnaute Barbatruc
ok voici un exemple minimaliste
tout se passe dans le userform module classe NADA!!! le userform en est un!!!!!!
j'ai ajouté dans ton tableau sur la feuille
pour te démontrer comment j'aligne les boutons par ligne de 6

plus simple que cela tu meurt ;)
au depart seul la page acceuil existe dans le multipage1
autrement dit même tes pages sont dynamique

click sur le bouton que j'ai ajouter pour afficher le userform
ballade toi dans les pages et click sur les boutons
autrement dit pour ajouter des boutons ou en enlever tu modifie ton tableau en feuil "exemple"
;)
 

Pièces jointes

  • exemple all full dynamique.xlsm
    35.1 KB · Affichages: 9

patricktoulon

XLDnaute Barbatruc
re
le model de franch55 que je salue
ne prend pas en compte la notion d'ajout ou suppression de bouton dans ton tableau les boutons
dans son userform sont déjà présents donc pas de notion dynamique

je te cite
. Le nombre de bouton évolue et il faut que je puisse redimensionner mon tableau Dim cmdBtnClasses(1 To 12) As cmdBtnClasse.

dans mon model autant de pages et les boutons correspondants sont créé dynamiquement
et les instances de classe sont itérées et créé dynamiquement avec redim preserve avec une dimension nulle au départ et cela dans la même boucle de constructions
 

patricktoulon

XLDnaute Barbatruc
re
puisque tu tiens absolument a ta sub globale dans un module teste çà

prend un userform et met lui un multipage avec une seule page
Capture.JPG

met lui ce code
VB:
Option Explicit
Public WithEvents boutons As MSForms.CommandButton
Dim cls() As New UserForm1
Public multi As Object
Public pg As Object
Private Sub boutons_Click(): App_button_change boutons.Tag: End Sub
Private Sub UserForm_Activate()
    Dim i&, x&, p As Object, bout As Object, b&, bb&, t&, L&
    For i = 1 To Feuil1.Cells(Rows.Count, 1).End(xlUp).Row
        If Feuil1.Cells(i, 1) = "salle" Then
            t = 10: L = 10: bb = 0
            Set p = MultiPage1.Pages.Add: x = x + 1: p.Caption = Feuil1.Cells(i + 1, 1)
        Else
            b = b + 1: bb = bb + 1
            Set bout = Me.MultiPage1.Pages(x).Controls.Add("Forms.CommandButton.1", "bt" & x, 1)
            bout.Caption = Feuil1.Cells(i, 3): bout.Tag = i
            With bout: .Top = t: .Left = L: L = L + 60: .Width = 40
             If bb Mod 6 = 0 Then L = 10: t = t + 30
            End With
            ReDim Preserve cls(1 To b):
            With cls(b): Set .boutons = bout: Set .multi = Me.MultiPage1: Set .pg = p: End With
        End If
    Next
End Sub

maintenant dans un module standard tu met ce code
VB:
Public Sub App_button_change(index)
donnée = Application.index(Feuil1.Cells(index, 1).Resize(, 4).Value, 1, 0)
'tu fait ce que tu veux avec l'array de donnée
 MsgBox Join(donnée, " | ")
End Sub
voila au click sur les boutons dans ta sub tu exploite l'array "donnée"
démo
demo4.gif
 

Valentin_a

XLDnaute Nouveau
Bonjour à tous
le caption de mes commandbutton est parfois long. Je pense qu'en adaptant les 2 lignes de code ci dessous je pourrais arriver à gérer la largeur de mes boutons ainsi que les tabulations entre chaque bouton pour qu'ils ne se superposent pas.

With bout: .Top = t: .Left = L: L = L + 60: .Width = 70
If bb Mod 6 = 0 Then L = 10: t = t + 60
 

Valentin_a

XLDnaute Nouveau
Bonjour à tous

J'ai encore une question dans le module public ci-dessous, je récupére les infos array d'un bouton sélectionné. Les données sont séparées par un |. Mais comment savoir ce qu'il y a dans chaque champ. Par exemple le nom de mon PC?

Public Sub App_button_change(index)
donnée = Application.index(Feuil1.Cells(index, 1).Resize(, 4).Value, 1, 0)
'tu fait ce que tu veux avec l'array de donnée
MsgBox Join(donnée, " | ")
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 735
Messages
2 112 308
Membres
111 503
dernier inscrit
Finearts