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

XL 2019 Chekbox a coché et action liée

  • Initiateur de la discussion Initiateur de la discussion farid
  • 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 !

farid

XLDnaute Occasionnel
Bonjour,
dans cette macro qui fonctionne très bien pour chekbox1 avec call janvier, est-il possible dans la même macro chekbox 2 avec call février et ainsi de suite pour les 12 mois.

Private Sub CommandButton1_Click()
If CheckBox1 Then
Call Janvier
Else
Unload moisimprime
Alerteimpression.Show
End If

End Sub

par avance merci
 
Solution
Merci pour ce retour. Afin d'être sûr d'avoir bien compris, mais surtout de m'être compris, ta macro aura le même effet que celui que je te mets en copie (qui ne fonctionne pas).
On peut dire cela :
Le code proposé parcourt toutes les checkboxes existantes dans l'userform et exécute la proc désignée par le caption du checkbox .
L'inconvénient, c'est qu'il ne faut pas d'autres checkboxes ...

Un palliatif serait de donner un nom spécifique à chaque checkbox et de le tester dans la boucle :
Par exemple en nommant checkbox1 en chkmois1, checkbox2 en chkmois2, etc ...
VB:
Option Compare Text
Private Sub CommandButton1_Click()
Dim Ctrl As Control
    For Each Ctrl In Controls
        If Ctrl.Name Like "chkmois*" Then...
Une proposition à la volée sur des checkbox de feuille ( code dans feuille )
VB:
Private Sub CommandButton1_Click()
    Mois = Array("Janvier", "Février", "etc...")
    For i = 0 To UBound(Mois)
        If Shapes("Checkbox" & i + 1).OLEFormat.Object.Object Then
            Application.Run Me.Name & "." & Mois(i)
        Else
            Unload moisimprime
            Alerteimpression.Show
        End If
    Next
End Sub
Sub Janvier()
    MsgBox "coucou"
End Sub
 
Pour l'userform fourni :
VB:
Private Sub CommandButton1_Click()
Dim Ctrl As Control
    For Each Ctrl In Controls
        If TypeOf Ctrl Is msforms.CheckBox Then
            If Ctrl Then Application.Run Ctrl.Caption
        End If
    Next
    Unload moisimprime
    'Alerteimpression.Show
End Sub
 
Merci pour ce retour. Afin d'être sûr d'avoir bien compris, mais surtout de m'être compris, ta macro aura le même effet que celui que je te mets en copie (qui ne fonctionne pas).
Private Sub CommandButton1_Click()
If CheckBox1 Then
Call janvier
If CheckBox2 Then
Call février
If CheckBox3 Then
Call mars
'et ainsi de suite jusqu'à décembre
Else
Unload moisimprime
Alerteimpression.Show
End If
end if
end if

End Sub

merci
 
Merci pour ce retour. Afin d'être sûr d'avoir bien compris, mais surtout de m'être compris, ta macro aura le même effet que celui que je te mets en copie (qui ne fonctionne pas).
On peut dire cela :
Le code proposé parcourt toutes les checkboxes existantes dans l'userform et exécute la proc désignée par le caption du checkbox .
L'inconvénient, c'est qu'il ne faut pas d'autres checkboxes ...

Un palliatif serait de donner un nom spécifique à chaque checkbox et de le tester dans la boucle :
Par exemple en nommant checkbox1 en chkmois1, checkbox2 en chkmois2, etc ...
VB:
Option Compare Text
Private Sub CommandButton1_Click()
Dim Ctrl As Control
    For Each Ctrl In Controls
        If Ctrl.Name Like "chkmois*" Then
            Application.Run Ctrl.Caption
        End If
    Next
    Unload Me
    'Alerteimpression.Show
End Sub
 
Bonjour fanch55,
merci pour ce retour et explication, Du coup j'ai opté pour la première solution qui fonctionne très bien.
Je souhaiterais aller plus loin sur ce projet et profiter de tes compétences en ce domaine à savoir.
Serait-il possible après avoir coché le mois et validé via le bouton que le checkbox1c(janvier dans l'exemple du fichier) le rendre invisible et le remplacer par un textbox, j'espère que je me suis fait comprendre dans ma demande.
 

Pièces jointes

Cela ne servira à rien car l'userform est déchargé à chaque fois qu'on valide ....
Bonjour fanch ,
merci pour ces précisions. En effet, je conserve donc ta solution qui fonctionne très bien.
En restant dans le même thème, voici la macro qui fonctionne très bien, cependant avec ta solution, cette macro fonctionne uniquement de l'année en cours avec le mois en cours et j'aurai souhaité qu'elle puisse fonctionner sur un mois défini grossièrement pour le mois de janvier
Sub Impression()
Nomfeuille = "" & Range("a3") & Year(Now()) & " " & Janvier(Now())
If FeuilleExiste(Nomfeuille) = True Then
Worksheets(Nomfeuille).PrintOut
Range("F" & 19 + Month(Now())) = "Fiche imprimée"
Sheets(Nomfeuille).Range("AF1") = "Fiche imprimée"
Sheets(Nomfeuille).Range("Ae1") = "3"
Call enregistrement
End If
End Sub

au lieu de :

Sub Impression()
Nomfeuille = "" & Range("a3") & Year(Now()) & " " & Month(Now())
If FeuilleExiste(Nomfeuille) = True Then
Worksheets(Nomfeuille).PrintOut
Range("F" & 19 + Month(Now())) = "Fiche imprimée"
Sheets(Nomfeuille).Range("AF1") = "Fiche imprimée"
Sheets(Nomfeuille).Range("Ae1") = "3"
Call enregistrement
End If
End Sub

si tu as une solution, j'en serai très ravi.

Par avance, merci
 
- 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
9
Affichages
404
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
3
Affichages
834
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…