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.