Dans une procédure, condition if Msgbox = vbyes then pas prise en compte

Bonjour le forum,

Dans une procédure d'impression d'un contrat, j'ai un msgbox qui me demande si je veux imprimer le document. A la suite de cette impression, j'ai une deuxième msgbox qui me demande si je veux sauvegarder ce même document en fichier PDF. Cette deuxième msgbox n'apparait même pas.

Séparément, dans d'autres procédures, les instructions fonctionnent pour l'impression tant que pour la sauvegarde.

J'ai donc l'impression que le problème se pose avec la deuxième msgbox qui n'est pas prise en compte.

Voici une partie du code concerné:

            If MsgBox("Voulez-vous l'imprimer ?", vbYesNo, vbQuestion) = vbYes Then
                copies = InputBox("NOMBRE DE COPIES ?", "Indiquer la quantité désirée...")
                On Error Resume Next
                Worksheets("Correspondances").PrintOut copies:=copies
                If MsgBox("Voulez-vous enregistrer une copie de ce bail non enregistré ?", vbYesNo, vbQuestion) = vbYes Then
                    LaDate = Format(Date, "yyyy-mm-dd")
                    LeRep = "D:\GESTION LOCATIVE\Correspondance\Divers\"
                    Destin = LeRep & LaDate & " Bail non enregistré " & Sheets("Locataires").Cells(NUMERO_LIGNE_LOC, 1).Value & ".pdf"
                    Worksheets("Correspondances").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Destin, Quality:=xlQualityStandard, _
                            IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False
                    Worksheets("Correspondances").Cells.ClearContents
                Else
                    Sheets("Correspondances").Cells.Clear
                    Exit Sub
                End If
            Else
                Sheets("Correspondances").Cells.Clear
                Exit Sub
            End If

Petite précision: si j'accepte d'imprimer le contrat mais que lors de la demande du nombre de copies, je clique sur Annuler, alors, la 2eme msgbox apparait ! !

Si quelqu'un voit ce qui ne fonctionne pas, merci d'avance,

Bonjour,

Avez-vous exécuté le code en mode pas à pas détaillé via F8 ? Si en mode pas à pas vous n'avez pas cette ligne qui passe en jaune alors c'est le On Error Resume Next qui je suppose fait sauter l'instruction. Je n'aime pas trop ce On Error Resume Next, quel est son but, dans quel cas avez vous une erreur ? Je ne vois pas trop son intérêt.

De plus, je pense que vous pourriez simplifier votre code ainsi comme dans tous les cas vous effacez votre plage de correspondances :

If MsgBox("Voulez-vous l'imprimer ?", vbYesNo, vbQuestion) = vbYes Then
    copies = InputBox("NOMBRE DE COPIES ?", "Indiquer la quantité désirée...")
    Worksheets("Correspondances").PrintOut copies:=copies
    If MsgBox("Voulez-vous enregistrer une copie de ce bail non enregistré ?", vbYesNo, vbQuestion) = vbYes Then
        LaDate = Format(Date, "yyyy-mm-dd")
        LeRep = "D:\GESTION LOCATIVE\Correspondance\Divers\"
        Destin = LeRep & LaDate & " Bail non enregistré " & Sheets("Locataires").Cells(NUMERO_LIGNE_LOC, 1).Value & ".pdf"
        Worksheets("Correspondances").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Destin, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False
    End If
End If
Sheets("Correspondances").Cells.Clear

Cdlt,

Bonjour,

Effectivement, au pas à pas détaillé, On resume next passe en jaune. En fait, je ne sais pas à quoi sert cette ligne; j'avais été aidé en son temps par un autre membre, et je n'ai pas réfléchi à cela.

Merci pour votre proposition qui a le mérite de bien fonctionner et d'être plus compréhensible par sa simplicité.

Amicalement,

Bonjour…

Remarques :

- vbYesNo, vbQuestion est incorrect pour de bons résultats.

Si on tient au VBQuestion (qui n’apporte pas grand-chose) on passera par vbYesNo + vbQuestion (4 + 32 ou 36)*.

- en ne faisant pas l'impasse sur la seconde possibilité de la condition (If ... Then ... Else...) on aura simplement

  If MsgBox("Voulez-vous l'imprimer ?", vbYesNo, "Nouvelle copie") = vbYes Then
    N = InputBox("NOMBRE DE COPIES ?", "Indiquer la quantité désirée...")
    Worksheets("Correspondances").PrintOut copies
  Else
    If MsgBox("l'enregistrer ?", vbYesNo, "nouvelle copie") = vbNo Then Exit Sub
    LaDate = Format(Date, "yyyy-mm-dd")
    LeRep = "D:\GESTION LOCATIVE\Correspondance\Divers\"
    Destin = LeRep & LaDate & " Bail non enregistré " &    Sheets("Locataires").Cells(NUMERO_LIGNE_LOC, 1).Value & ".pdf"
    Worksheets("Correspondances").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Destin, Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False
    Sheets("Correspondances").Cells.Clear
  End If

* à toutes fins utiles pour ces variables numériques : vbYesNo=4, vbQuestion = 32 , vbYes= 6 et vbNo=7 d’où le +

bonjour,

Effectivement, vbquestion ne fonctionnait pas; j’avais des virgules à la place de +. Et il est vrai que ce n’a pas vraiment d’impact sur le déroulement de la procédure.

Pour la proposition avec avec le deuxième if then comme c’est écrit, c’est, soit je l’imprime, soit je le sauvegarde. Or, ce qui m’intéresse, c’est d’avoir la possibilité de pouvoir l’imprimer ET de pouvoir le sauvegarder.

Cdlt,

Re

Pour avoir deux conditions successives mais indépendantes, il te suffit de remplacer le Else par End If.

Mes remarques sont générales donc peuvent servir à toute personne intéressée.

Rechercher des sujets similaires à "procedure condition msgbox vbyes then pas prise compte"