Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

fanch55

XLDnaute Barbatruc
Pas de construction dynamique effectivement, ne sachant pas comment l'userform a été conçu .
Si ce sont des ajouts dynamiques désirés, la proposition de Patrick est celle qu'il te faut .
Salut Pat
 

Valentin_a

XLDnaute Nouveau
dans la macro principale je vais retraiter les info boutons et pages. Pour lancer les applications adéquates. il faut également que j'aille récupérer les info dans mon fichier Excel pour connaitre le nom du PC sur lequel je vais lancer l'application
 

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

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
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…