Bouton imprimé avec bouton Option VBA EXCEL

Résolu
Salut à tous,

Voila mon problème, Jai une 20 de bouton options avec un bouton tout en bas qui valide et imprime, si je selectionne
5 bouton option et je valide = imprime les 5 pages relié au bouton option.

Donc voila sur quoi je me suis basé mais ca ne fonctionne pas

Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
Selection.PrintOut Copies:=Worksheet("feuil2").Value, Collate:=True
End If
Private Sub CommandButton1_Click()
If OptionButton2.Value = True Then
Selection.PrintOut Copies:=Worksheet("feuil3").Value, Collate:=True
End Sub

Donc résultat ERREUR DE COMPILATION SUB OU FONCTION NON DÉFINI

Y a t'il quelqu,un assez aimable pour me dire ou est le problème car la suis un peu perdu.
Bon faut dire que je suis pas expert en VBA meme que je débute mais bon quand même.......

Merci
Configuration: Windows XP
Internet Explorer 7.0

8 réponses

  1. C'est normal vous faîtes référence avec le même bouton à deux procédures différentes.

    pour traiter un cas comme celui-là

    il est possible d'utiliser la collection controls et une boucle for each
    à voir dans l'aide d'excel il y a quelchose d'écrit
    et c'est bien pour débuter

    on peut aussi utiliser

    une boucle select case en vérifiant la valeur true ou false de toutes les options.
    0
    1. Contributeur
      bonjour,
      If OptionButton2.Value = True Then 
          Sheets("feuil3").PrintOut
      End Sub 

      Il faut que les paramètres d'impression soient déjà réglés dans les feuilles et la plage d'impression aussi.
      A+
      0
      1. Contributeur
        bonjour

        Worksheet("feuil3").Value ????? il maque quelque chose : Range("A1")

        Worksheet("feuil3").Range("A1").Value
        0
        1. Merci ca fonctionne

          Je crois que mon probleme est que je cherche vraiment trop loin et je cherche dans le complexe quand cest si simple

          Encore merci
          0
          1. Contributeur
            Si tu met ce code dans l'événement clic du bouton tout est complet.
            Tu doit bien sûr adapter les noms des feuilles aux noms des chechBox
            Private Sub CommandButton1_Click()
            Dim obj As OLEObject
                For Each obj In ActiveSheet.OLEObjects
                    If TypeOf obj.Object Is MSForms.CheckBox Then
                        If obj.Object.Value Then
                            Select Case Val(Right(obj.Name, 1))
                            Case 1: Sheets("Feuil1").PrintOut
                            Case 2: Sheets("Feuil2").PrintOut
                            Case 3: Sheets("Feuil3").PrintOut
                            Case 4: Sheets("Feuil4").PrintOut
                            Case 5: Sheets("Feuil5").PrintOut
                            End Select
                        End If
                    End If
                Next obj
            End Sub

            Fonctionne sur < 2007 et sur 2007
            NB: Il y a possibilité de supprimer le Select Case en travaillant sur les index des feuilles mais il faut bien sûr adapter les noms des checkBox au N° des indexs feuilles
            A+
            0
            1. Lermite 222

              Ca fonctionne que sur 2007

              Il y a t'il quelque chose de semblable dans 2003????
              0
              1. Bon voila ce code fonctionne parfois

                Private Sub CommandButton1_Click()
                If CheckBox1.Value = True Then
                Worksheets("Feuil2").PrintOut
                If CheckBox2.Value = True Then
                Worksheets("feuil3").PrintOut
                End If
                End If
                End Sub

                Je reussi toujours à imprimer le premier check box mais les autres que parfois ????

                Pourquoi
                0
                1. Contributeur
                  Effectivement, j'ai fait une légère erreur, pas tester les printOut, rectification...
                  Dans un module générale ex: Module1. tu colle la Sub ci-dessous
                  Public Sub ImprimTout()
                  Dim obj As OLEObject
                      For Each obj In ActiveSheet.OLEObjects
                          If TypeOf obj.Object Is MSForms.CheckBox Then
                              If obj.Object.Value Then
                                  Select Case Val(Right(obj.Name, 1))
                                  Case 1: Sheets("Feuil1").PrintOut
                                  Case 2: Sheets("Feuil2").PrintOut
                                  Case 3: Sheets("Feuil3").PrintOut
                                  Case 4: Sheets("Feuil4").PrintOut
                                  Case 5: Sheets("Feuil5").PrintOut
                                  End Select
                              End If
                          End If
                      Next obj
                  End Sub

                  Et dans l'événement du bouton Clic..
                  Private Sub CommandButton1_Click() 
                      ImprimeTout
                  End Sub

                  Il faut que les noms des CheckBox soit fait comme cela..
                  CkeckBox1 : Caption Imprime feuille 1
                  CheckBox2: Caption Imprime Feuille 2
                  etc..
                  Les noms doivent OBLIGATOIREMENT se terminer par 1,2,3,4 et 5
                  Si t'en sort pas met ton classeur sur Cjoint.com et mettre le lien dans un poste suivant.
                  Concernant l'erreur que tu a dans ton code ...
                  1°) rectification.
                  Private Sub CommandButton1_Click()
                      If CheckBox1.Value = True Then
                          Worksheets("Feuil2").PrintOut
                      End If    
                      If CheckBox2.Value = True Then
                          Worksheets("feuil3").PrintOut
                      End If
                  End Sub

                  2°) Ca n'ira pas, l'appel à différente feuille à partir d'un module de feuille pose souvent des problèmes.
                  Tu dit..
                  A+
                  0