Gestion de cases à cocher multiples avec une seule commande VALIDER

jeanba

XLDnaute Occasionnel
Bonjour à toutes et à tous!

Un petit problème pour certains, mais casse-tête pour le débutant que je suis.

J'ai 12 cases à cocher correspondant à 12 feuilles que je désire imprimer, selon le cas choisi, en cliquant sur VALIDER.

Je voudrais tester les cas suivants:
- l'utilisateur sélectionne toutes les 12 cases et donc choisit d'imprimer les 12 feuilles
- l'utilisateur n'en sélectionne qu'une ou plusieurs, et en conséquence j'imprimerai celles ainsi cochées.

J'ai tenté comme ci-joint, rien à faire...
Merci par avance!
Jeanba
 

Pièces jointes

  • TEST_USF et cases à cocher.xlsm
    25.6 KB · Affichages: 74

jeanba

XLDnaute Occasionnel
Bonjour à toutes et à tous!

Un petit problème pour certains, mais casse-tête pour le débutant que je suis.

J'ai 12 cases à cocher correspondant à 12 feuilles que je désire imprimer, selon le cas choisi, en cliquant sur VALIDER.

Je voudrais tester les cas suivants:
- l'utilisateur sélectionne toutes les 12 cases et donc choisit d'imprimer les 12 feuilles
- l'utilisateur n'en sélectionne qu'une ou plusieurs, et en conséquence j'imprimerai celles ainsi cochées.

J'ai tenté comme ci-joint, rien à faire...
Merci par avance!
Jeanba

SOS les amis!
PS: Faudrait aller dans l'éditeur VBA et lancer l'userform pour mieux comprendre mon problème.
Merci d'avance aux plus rapides...
 

Theze

XLDnaute Occasionnel
Bonjour,

Voici une piste mais pour le test en "Aperçu avant impression", mettre la propriété "ShowModal" du Formulaire à False et ensuite, les feuilles doivent être nommées exactement comme le "Caption" des différentes cases à cocher :
Code:
Private Sub CommandButton2_Click()

    Dim Ctrl As Control
   
    For Each Ctrl In Me.Controls
   
        If TypeName(Ctrl) = "CheckBox" Then
       
            If Me.Controls(Ctrl.Name).Value = True Then
           
                Worksheets(Ctrl.Caption).Select (False)
               
            End If
           
        End If

    Next
   
    ActiveWindow.SelectedSheets.PrintPreview '.PrintOut

End Sub
 

jeanba

XLDnaute Occasionnel
Bonjour,

Voici une piste mais pour le test en "Aperçu avant impression", mettre la propriété "ShowModal" du Formulaire à False et ensuite, les feuilles doivent être nommées exactement comme le "Caption" des différentes cases à cocher :
Code:
Private Sub CommandButton2_Click()

    Dim Ctrl As Control
  
    For Each Ctrl In Me.Controls
  
        If TypeName(Ctrl) = "CheckBox" Then
      
            If Me.Controls(Ctrl.Name).Value = True Then
          
                Worksheets(Ctrl.Caption).Select (False)
              
            End If
          
        End If

    Next
  
    ActiveWindow.SelectedSheets.PrintPreview '.PrintOut

End Sub

Bonjour Theze,

Merci pour ta réponse rapide.
Il y a cependant un message d'erreur lors de l'exécution du programme... (voir ci-joint ligne en jaune.)
 

Pièces jointes

  • Erreur dans ligne de programme.JPG
    Erreur dans ligne de programme.JPG
    30.2 KB · Affichages: 35

jeanba

XLDnaute Occasionnel
Mon cher Teze,
Tu es peut-être parti en pause déjeuner..
Le programme bugue. je pense qu'il y a erreur quelque part..
merci de regarder encore un peu.

PS: J'ai également ajouté 2 boutons de commande pour 1) tout cocher et 2) tout décocher. Seulement voilà, j'ai juste des (bonnes) idées, mais pas de moyens de ma politique. Merci d'y jeter un oeil également...
 

Theze

XLDnaute Occasionnel
Teste avec ce nouveau code, j'ai mis un gestionnaire d'erreur car je pense qu'il y a une ou plusieurs feuilles qui ne sont pas orthographiée (s) de la même façon que les cases à cocher. J'ai aussi géré la façon dont sont sélectionné les feuilles afin de ne pas prendre en compte la feuille active dans le cas où elle ne serait pas dans le choix :
Code:
Private Sub CommandButton2_Click()

    Dim Ctrl As Control
    Dim Debut As Boolean
   
    On Error GoTo Fin
   
    For Each Ctrl In Me.Controls
  
        If TypeName(Ctrl) = "CheckBox" Then
      
            If Me.Controls(Ctrl.Name).Value = True Then
               
                If Debut = False Then Debut = True
                   
                Worksheets(Ctrl.Caption).Select (Not Debut)
                                   
            End If
          
        End If

    Next
  
    ActiveWindow.SelectedSheets.PrintPreview '.PrintOut
  
    Deselect
   
    Exit Sub
   
Fin:
   
    MsgBox "La feuille '" & Ctrl.Caption & "' est mal orthographiée !" & _
            vbCrLf & _
            vbCrLf & _
            "Fin de procédure !"
           
    Deselect
   
End Sub

Sub Deselect()

    Dim Ctrl As Control

    Worksheets("Accueil").Select 'pour dé-sélectionner les feuilles
   
    For Each Ctrl In Me.Controls
   
        If TypeName(Ctrl) = "CheckBox" Then Me.Controls(Ctrl.Name).Value = False
      
    Next Ctrl

End Sub
 

jeanba

XLDnaute Occasionnel
Merci pour tes efforts Theze, mais c'est pas bon.
1) Le message d'erreur de contrôle que tu as mis est la seule chose que fait le programme, quelle que soit la feuille que je sélectionne
2) il exécute et affiche l'apperçu que si l'on a coché la case correpondant à la feuille active
3) l'userforme reste bloqué et pour mettre fin à l'exécution de la macro, je dois faire Alt+F4...

Donc, je crois qu'on y est pas encore!!
Voici ce que je voudrais faire:

If CheckBox1.Value = True Then
(je sais coder ce qu'il y a à faire après, mais je voudrais gérer les 12 conditions sans avoir à utiliser 12 fois IF. En d'autres termes, comment faire une boucle des CheckBox?)

Merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Le code suivant de fonctionne que si les 12 feuilles représentant les douze mois sont les 12 premières feuilles càd situées à gauche des onglets et rangées dans l'ordre des mois). La 1ère feuille à gauche correspond à Janvier, la 2ème feuille à gauche correspond à Février, etc.
Le code fait une boucle de la CheckBox1 à la CheckBox12.
Le code:
VB:
Private Sub CommandButton2_Click()
Dim i&, T(), n&
   For i = 1 To 12
      If Controls("CheckBox" & i) = True Then
         n = n + 1: ReDim Preserve T(1 To n): T(n) = Sheets(i).Name
      End If
   Next i
   If n > 0 Then Sheets(T).PrintOut
End Sub
 

Pièces jointes

  • jeanba- TEST_USF et cases à cocher -v1.xlsm
    46.8 KB · Affichages: 56
Dernière édition:

jeanba

XLDnaute Occasionnel
Bonsoir à tous,

Le code suivant de fonctionne que si les 12 feuilles représentant les douze mois sont les 12 premières feuilles càd situées à gauche des onglets et rangées dans l'ordre des mois). La 1ère feuille à gauche correspond à Janvier, la 2ème feuille à gauche correspond à Février, etc.
Le code fait une boucle de la CheckBox1 à la CheckBox12.
Le code:
VB:
Private Sub CommandButton2_Click()
Dim i&, T(), n&
   For i = 1 To 12
      If Controls("CheckBox" & i) = True Then
         n = n + 1: ReDim Preserve T(1 To n): T(n) = Sheets(i).Name
      End If
   Next i
   If n > 0 Then Sheets(T).PrintOut
End Sub

RECTIFICATIF:

Bonjour très cher mapomme,

JE réagis avec du retard, quelques soucis de connexion...
Ton code sur mon fichier test fonctionne à merveille et semble donner le résultat que je recherche.
Il y a cependant 2 écueils:
1) à l'aperçu avant impression, il y a une espèce de pub en haut des aperçus qui rend les doc inexploitables. En revanche, j'ai une imprimante pdf gratuite (doPDF) que j'aurai aimé exploiter.
2) l'obligation d'aligner les feuilles mensuelles dans cet ordre empêche son exécution dans mon application finale. Je suis presque désespéré... car mes feuilles mensuelles ont été créées dans un autre ordre et j'espérais pouvoir gérer le truc à partir de leur nom..
Lorsque je l'insère (le code) chez moi, dans mon fichier final, il buggue sur la ligne de code suivante:
If Controls("CheckBox" & i) = True Then qu'il colore en jaune..
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

1) à l'aperçu avant impression, il y a une espèce de pub en haut des aperçus qui rend les doc inexploitables. En revanche, j'ai une imprimante pdf gratuite (doPDF) que j'aurai aimé exploiter.

Theze :) t'a répondu sur ce point


2) l'obligation d'aligner les feuilles mensuelles dans cet ordre empêche son exécution dans mon application finale. Je suis presque désespéré... car mes feuilles mensuelles ont été créées dans un autre ordre et j'espérais pouvoir gérer le truc à partir de leur nom..
Lorsque je l'insère (le code) chez moi, dans mon fichier final, il buggue sur la ligne de code suivante:
If Controls("CheckBox" & i) = True Then qu'il colore en jaune..

J'avais écrit ce code pour éviter modifier les intitulés des CheckBox quand on change le nom d'un onglet.
Comme cela ne te convient pas, utilise le code de Theze.

Si ça bogue au niveau de If Controls("CheckBox" & i) = True Then
c'est sans doute qu'un nom de checkbox a été changé ou bien que la feuille contenant les checkbox n'est pas la feuille active.

Mais comme on ne dispose pas de ton dernier fichier....
 

Statistiques des forums

Discussions
311 705
Messages
2 081 725
Membres
101 805
dernier inscrit
abrigy