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

macro depuis bouton selon valeur

  • Initiateur de la discussion Initiateur de la discussion wrap food
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

wrap food

XLDnaute Occasionnel
Bonjour à tous

voila mon problème;

J'ai un UserForm avec des CommandButton qui récupèrent des valeurs de cellule (les valeurs peuvent changer selon la saisies )

et j'aimerais que lorsque l'on clic sur un commandbutton; une macro ce lance selon la valeur qui est dans le commandbutton .

en gros si la valeur est 1 c'est la macro 1 qui ce lance etc.. j'ai 31 macro
les macros sont simple c'est juste pour aller sur une cellule "b1" d'une feuille ( macro1 >feuille 1; macro2 > feuille 2)

pour que ma demande soit plus clair ci-joint une partie du fichier .

par avance merci de votre aide
 

Pièces jointes

Re : macro depuis bouton selon valeur

Bonjour wrap food,

Je crois avoir compris le problème mais j'ai préféré créer un nouveau fichier 🙄

Je n'ai mis que 10 boutons dans l'USF, chacun active la feuille correspondant à son numéro.

Il y a un Module de classe avec une seule macro, très simple :

Code:
Public WithEvents CB As MSForms.CommandButton

Private Sub CB_Click()
On Error Resume Next 'si la feuille n'existe pas ou est masquée
Application.Goto Sheets(Replace(CB.Caption, "Bouton ", "Feuil")).[B1]
End Sub
A+
 

Pièces jointes

Dernière édition:
Re : macro depuis bouton selon valeur

Re,

Dans ce fichier (2) les boutons sont désactivés si les feuilles n'existent pas ou sont masquées :

Code:
Dim CB() As New Classe1

Private Sub UserForm_Initialize()
Dim c As Control, n%
For Each c In Controls
  If TypeName(c) = "CommandButton" Then
    If c.Caption Like "Bouton #*" Then
      On Error Resume Next 'si la feuille n'existe pas
      If Not Sheets(Replace(c.Caption, "Bouton ", "Feuil")).Visible _
        Then c.Enabled = False 'désactive le bouton
      On Error GoTo 0
      If c.Enabled Then
        ReDim Preserve CB(n)
        Set CB(n).CB = c
        n = n + 1
      End If
    End If
  End If
Next
End Sub
A+
 

Pièces jointes

Re : macro depuis bouton selon valeur

Bonjour Wrap food, bonjour le forum,

Pas sûr d'avoir bien compris... Mais bon !

Pour ne pas avoir à répéter le même code pour chaque bouton j'ai utilisé un Module de Classe que j'ai appelé CBClass.
Le principe est simple. À l'initialisation de l'Userform on alimente un tableau (que j'ai appelé TCB) avec tous les contrôles auxquels on veut appliquer le code. Dans ton cas s'est simple puisqu'il s'agit des tous les CommandButtons.

Remarque :
les noms de tes CommandButtons se suivent mais il y avait un manque pour 29. J'ai donc renommé les derniers pour pouvoir utiliser un boucle bien moins fastidieuse que d'écrire 35 lignes

Code:
Private TCB(1 To 35) As New CBClass 'déclare le tableau des CommandButtons TCB

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim ctrl As Control 'déclare la variable ctrl (ConTRôLe)
Dim b As Object 'déclare la variable b (onglet Base)
Dim i As Byte 'déclare la variable i (Incrément)
Dim j As Byte 'déclare la variable j (incrément)
Dim k As Byte 'déclare la variable k (incrément)
Dim li As Byte 'déclare la variable li (LIgne)
Dim col As Byte 'déclare la variable col (COLonne)

'**********************************************
'alimentation du tableau des commandbuttons TCB
'**********************************************
For i = 1 To 35 'boucle sur les 35 commandbuttons
    Set TCB(i).CB = Me.Controls("m" & i) 'ajoute le commandbutton au tableau TCB
Next i 'prochain commandbutton de la boucle

Set b = Sheets("Base") 'définit l'onglet b

'*********************************************
'alimentation des labels de jour de la semaine
'*********************************************
For i = 1 To 7 'boucle sur 7 jours
    Me.Controls("J" & i).Caption = b.Cells(11, i + 2) 'récupère la valeur de la cellule ligne 11, colonne i+2
Next i 'prochain jour de la boucle

'************************************************
'alimentation des commandbuttons de jours du mois
'************************************************
k = 1 'initialise la variable k
For i = 1 To 5 'boucle 1 : sur 5 lignes
    For j = 1 To 7 'boucle 2 : sur 7 colonnes
        li = 11 + (2 * i) 'définit la variable li
        col = j + 2 'définit la variable col
        Me.Controls("m" & k).Caption = Format(b.Cells(li, col), "dd") 'récupère la valeur de la cellule ligne li colonne col
        k = k + 1 'incrément k
    Next j 'prochaine colonne de la boucle 2
Next i 'prochaine ligne de la boucle 1
mois_en_cours = "le mois en cours est : " & Format(b.Range("a1"), "mmmm")
End Sub
Ensuite, dans le module de classe on écrit le code qui va s'appliquer à tous les contrôles du tableau TCB.
Code:
Public WithEvents CB As MSForms.CommandButton

Private Sub CB_Click() 'au clic dans un commandbutton tu tableau TCB
'si j'ai bien compris le classeur original aura tous les onglets et la gestion d'erreur ne sera plus nécessaire
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne)
Sheets(CB.Caption).Activate 'active l'onglet correspondant au CommandButton
If Err <> 0 Then 'condition : si une erreur à été générée
    Err = 0 'annule l'erreur
    MsgBox "Onglet inexistant !" 'message
End If 'fin de la condition
ActiveSheet.Range("B1").Select 'sélectionne la cellule B1 de l'onglet actif
End Sub
Le fichier :

[Édition]
Bonjour Job, j'avais pas rafraîchi et on s'est croisé...
 

Pièces jointes

Re : macro depuis bouton selon valeur

Salut

Il me semble avoir compris que tu voulais imprimer en fonction de 2 critères : la Date et le numéro de Caisse.
Si… c’est le cas, il faut savoir comment tu les gères :
- un onglet par jour avec tous les comptes (ce peut être très lourd)
- un onglet avec une colonne Date, une colonne Caisse et les autres données avec possibilité de filtrer

Dans le fichier joint, tu as l’initialisation des 2 critères mais pas l’impression qui dépend de la structure du fichier.

Ne sachant pas si tu disposes d’un calendrier j’en ai rajouté un.

Si ce n’est pas cela, je me serais quand même bien amusé😉.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
173
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…