Macro excel

Résolu
Bonjour à tous.

Je n'ai aucune connaissance des macros et j'ai chercher mon problème sur les forums sans trouver réponse à mon problème, c'est pour cela que je le pose ici.

J'ai essayer de créer une macro me permettant d'imprimer ma première feuille qui sera toujours imprimer et ma deuxième feuille qui sera imprimer SEULEMENT s'il y a quelque chose d'inscrit dans la case des observations.


J'ai essayer de créer quelque chose comme ceci : observation = vide alors la case H3 = 1 sinon = 2 et de créer une macro découlant de ceci.

Sub test()
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Cells.Count > 1 Then Exit Sub
If IsNumeric(Target) And Target.Address = "$H$3" Then
Select Case Target.Value
Case Is = 1: impression_page1
Case Is = 2: impression_2pages
End Select
End If
End Sub

Avec cette macro il m'affiche un message d'erreur :
Erreur de compilation : End sub attendu

J'ai enregistrer mes 2 macros d'impression à la main : impressions_page1 & impressions_2pages

Je vous remercie d'avance pour votre aide,
Cordialement.

6 réponses

  1. Bonsoir,

    Sub test()
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)


    En VBA, on ne peut pas déclarer une Sub dans une autre et si c'était possible, il manquerait un End Sub pour faire l'affaire.
    1. Bonjour,

      Pour ce qui déclenche ma macro, c'est un bouton que j'ai sur ma première feuille.


      J'ai enlever la ligne, ce qui me donne

      Sub test()
          If Target.Cells.Count > 1 Then Exit Sub
          If IsNumeric(Target) And Target.Address = "$H$3" Then
              Select Case Target.Value
              Case Is = 1: impression_page1
              Case Is = 2: impression_2pages
              End Select
          End If
      End Sub


      En faisait ceci, il m'affiche une erreur d'exécution '424'
      Objet requis.
      Il m'affiche en jaune la première ligne, est-ce qu'il me manque une sélection de case ou quelque chose comme ça ?

      J'ai reprit l'ensemble de code sur un autre forum et j'ai essayer de le modifier pour l'adapter à ce que je cherche.

      Merci d'avance,
      Cordialement
      1. Contributeur
        plutôt:
        Sub test()
            If [H3] = 1 then
                impression_page1
            else
                impression_2pages
            End If
        End Sub    
    2. Bonjour,

      J'ai essayé votre macro, elle fonctionne mais elle m'imprime les 2 pages même si ma case H3 et = 1 .
      J'ai essayé de la modifier comme ceci
      Sub test()
          If [H3] = "" Then
              impression_page1
          Else
              impression_2pages
          End If
      End Sub

      Mais même comme ceci elle m'imprime les 2 pages.

      J'ai aussi essayé
      Sub Final()
              If [H3] = 1 Then
                  impression_page1
              Else: [H3] = 2
                  impression_2pages
              End If
      End Sub


      J'ai modifier avec 2 bloc If mais même avec un second bloc End If, la macro ne fonctionne pas.

      C'est comme s'il ne prenait pas ma contrainte en compte.

      J'ai aussi pensé à inclure ma deuxième feuille sur la première, je ne sais pas si ceci aura une influence ou que ce soit plus simple.

      Merci d'avance,
      Cordialement.
      1. Contributeur
        peut-être préciser le nom de la feuille où se trouve H3:
        Sub test()
            If sheets("???").[H3] = 1 then
                impression_page1
            else
                impression_2pages
            End If
        End Sub 
    3. Ca me fait la même chose, il m'imprime les deux feuilles même si ma case est = 1
      1. Contributeur
        Sub test()
            If sheets("???").[H3] = 1 then
                msgbox "une page"
                impression_page1
            else
                msgbox "deux pages"
                impression_2pages
            End If
        End Sub 
    4. Bonjour,

      Je vous remercie yg_be de votre aide et d'avoir prit le temps de m'aider, votre solution fonctionne !
      Avec le msgbox, il prend en compte ma contrainte.

      Je peut clore le sujet.

      Cordialement.