XL 2019 Chekbox a coché et action liée

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...

fanch55

XLDnaute Barbatruc
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
 

fanch55

XLDnaute Barbatruc
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
 

farid

XLDnaute Occasionnel
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
 

fanch55

XLDnaute Barbatruc
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
 

farid

XLDnaute Occasionnel
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

  • moisimprime (2).zip
    36.9 KB · Affichages: 5

farid

XLDnaute Occasionnel
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
 

Discussions similaires

Statistiques des forums

Discussions
312 276
Messages
2 086 711
Membres
103 377
dernier inscrit
fredy45