Problème d'enregistrement d'une copie Excel en VBA

Fermé
BING02 - 4 mai 2015 à 01:12
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 5 mai 2015 à 05:59
Bonjour à tous,
J'ai créé une macro qui vise à enregistrer en PDF une copie d'une feuille d'un classeur EXCEL (EXCEL2010). Mon problème est que celle-ci créée bien la copie PDF mais elle créée aussi une autre copie en EXCEL que je ne désire pas. Je cherche depuis plusieurs jours une solution pour empêcher cette dernière ou, à défaut, la supprimer automatiquement mais je n'y parviens pas. Auriez-vous une solution ???
Voici le code :
1 - celui de la macro qui crée la copie et l'enregistre après avoir ôter la protection du fichier source,
2 - celui de la macro qui appelle l'enregistrement et par la même la première macro.
(J'ai décomposé les deux de manière à ce que celle qui appelle l'enregistrement puisse également, en d'autres circonstances, appeler d'autres macros qui traitent d'autres sujets autour de l'enregistrement) et qui remet en place la protection en final.

1 -
Sub Copier_enregistr_CHIFFRAGE_PDF()
ActiveSheet.Unprotect ("TOTO") 'On enlève la protection de la feuille "GRILLE DE CHIFFRAGE"
Dim NomDeSauvegardePDF, NomSauvePDF
Application.EnableEvents = False
ThisWorkbook.Worksheets("GRILLE DE CHIFFRAGE").Copy
With ActiveWorkbook
Dim s As Object
'suppression des boutons de commande
'Bouton "NOUVEAU CHIFFRAGE"
For Each s In ActiveSheet.Shapes
If s.TopLeftCell.Address = "$N$18" Then
s.Delete
End If
Next s
'Bouton "ENREGISTRER COPIE PDF"
For Each s In ActiveSheet.Shapes
If s.TopLeftCell.Address = "$N$21" Then
s.Delete
End If
Next s
'suppression des macros
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With

'Suppression des formules
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Cells(1, 1).Select


'definition du nom du fichier
NomDeSauvegardePDF = ActiveWorkbook.Sheets("GRILLE DE CHIFFRAGE").Range("A5").Text

'enregistre la copie sous le nom contenu dans la cellule A5 de la feuille "GRILLE DE CHIFFRAGE" du fichier Source à un
'emplacement choisi par l'utilisateur
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomDeSauvegardePDF, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
If NomSauvePDF = False Then Exit Sub


End With

Exit Sub

Application.EnableEvents = True

End Sub

2 -

Sub Confirmation_enregistrement()
'Demande confirmation pour lancer la procédure d'enregistrement
Select Case MsgBox("Êtes-vous sûr de vouloir enregistrer ce chiffrage ?", vbYesNo, "Enregistrement")

Case vbYes
' Procédure si click sur Oui
'Combine dans l'ordre la macro et les instructions suivantes
Call Copier_enregistr_CHIFFRAGE_PDF
ActiveWorkbook.Close True
'On remet la protection avec mot de passe de la feuille "GRILLE DE CHIFFRAGE"
ActiveSheet.Protect Password:="TOTO", DrawingObjects:=True, Contents:=True, Scenarios:=True

Case vbNo
'procédure si click sur Non
End Select
End Sub

Merci d'avance pour votre aide.

BING 02
A voir également:

3 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
4 mai 2015 à 06:46
Bonjour
Ajouter la première ligne,
supprimer "true" après "ActiveWorkbook.Close"

Sub Confirmation_enregistrement()
    Application.DisplayAlerts = False
    'Demande confirmation pour lancer la procédure d'enregistrement
    Select Case MsgBox("Êtes-vous sûr de vouloir enregistrer ce chiffrage ?", vbYesNo, "Enregistrement")
        Case vbYes
            ' Procédure si click sur Oui
            'Combine dans l'ordre la macro et les instructions suivantes
            Call Copier_enregistr_CHIFFRAGE_PDF
            ActiveWorkbook.Close
            'On remet la protection avec mot de passe de la feuille "GRILLE DE CHIFFRAGE"
            ActiveSheet.Protect Password:="TOTO", DrawingObjects:=True, Contents:=True, Scenarios:=True
        Case vbNo
            'procédure si click sur Non
    End Select
End Sub


Cdlt
0
Bonjour Frenchie83,

Merci beaucoup pour ta réponse qui marche bien pour le problème que j'avais mais qui maintenant m'en a créé un autre : il ne me propose plus le choix du lieu d'enregistrement de la copie en PDF avant de la fermer. Il doit maintenant manquer une instruction qui affiche la boite "enregistrer sous". La copie disparait et je ne sais absolument pas où elle se retrouve.
Pourrais-tu encore m'aider ?
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
4 mai 2015 à 11:31
mettre la première ligne en remarque
0
Bonjour Frenchie83
Un grand merci pour le temps que tu consacre à mon problème. Toutefois je ne comprends pas "mettre en remarque". Je suis désolé mais je suis débutant en VBA, cela explique sans doute cela. J'ai essayé avec une ' avant la ligne mais cela fait comme si je n'avais pas écrit ce code, ce qui parait logique....
Mon code modifié mais sans ta dernière indication est maintenant ainsi :

Sub Confirmation_enregistrement()
Application.DisplayAlerts = False
'Demande confirmation pour lancer la procédure d'enregistrement
Select Case MsgBox("Êtes-vous sûr de vouloir enregistrer ce chiffrage ?", vbYesNo, "Enregistrement")

Case vbYes
' Procédure si click sur Oui
'Combine dans l'ordre la macro et les instructions suivantes
Call Copier_enregistr_CHIFFRAGE_PDF
ActiveWorkbook.Close
'On remet la protection avec mot de passe de la feuille "GRILLE DE CHIFFRAGE"
ActiveSheet.Protect Password:="TOTO", DrawingObjects:=True, Contents:=True, Scenarios:=True

Case vbNo
'procédure si click sur Non
End Select
End Sub

Par la même, et ce serait sans doute mieux pour vous, comment fait-on pour placer la copie de la procédure dans le carré gris ??

Merci pour patience et la qualité de tes conseils.

BING02
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337 > BING02
4 mai 2015 à 20:00
Re-bonjour
Excusez-moi de répondre si tardivement, mais j'étais absent toute la journée.
-"mettre en remarque" signifie bien, mettre une apostrophe devant la ligne pour qu"elle soit ignorée par le programme.
-comment fait-on pour placer la copie de la procédure dans le carré gris ?? En sélectionnant l'ensemble de la procédure puis en cliquant sur la flèche en haut à droite du carré gris et choisir "Basic" tout simplement.
Bonne soirée
cdlt
0
Bonsoir Frenchie83,
Je ne saurai trop te remercier pour le temps que tu me consacres.
J'ai donc ajouté une ' devant la 1ère ligne du code mais avec celle-ci, la copie en EXCEL est revenue et il me demande si je veux l'enregistrer. Par contre, je ne vois pas passer celle en PDF et elle demeure introuvable. Je ne comprends plus rien.
Je te joins ci-dessous le code modifié avec toutes tes remarques. Est-ce correct. Tu peux peut-être aussi regarder celui que j'avais joint au-départ pour la partie enregistrement en PDF.

                
0
Sub Confirmation_enregistrement()

'Application.DisplayAlerts = False
'Demande confirmation pour lancer la procédure d'enregistrement
Select Case MsgBox("Êtes-vous sûr de vouloir enregistrer ce chiffrage ?", vbYesNo, "Enregistrement")

Case vbYes
' Procédure si click sur Oui
'Combine dans l'ordre la macro et les instructions suivantes
Call Copier_enregistr_CHIFFRAGE_PDF
ActiveWorkbook.Close
'On remet la protection avec mot de passe de la feuille "GRILLE DE CHIFFRAGE"
ActiveSheet.Protect Password:="0456", DrawingObjects:=True, Contents:=True, Scenarios:=True

Case vbNo
'procédure si click sur Non
End Select
Application.DisplayAlerts = True
End Sub
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337 > BING02
5 mai 2015 à 05:59
Bonjour
Le rôle de la première ligne était d'éviter qu'il demande d'enregistrer le fichier sous format excel.
Le fichier PDF est bien enregistré, mais comme aucun chemin ne lui est indiqué, il se met là où il peut, chez moi, il se met dans "mes documents", Faites une recherche du fichier pour savoir où il se trouve chez vous. Maintenant, si vous voulez le mettre dans un répertoire particulier, il faut lui en indiquer le chemin (utilisez l'enregistreur de macro). et inclure ce code dans la macro d'enregistrement.
Je dois m'absenter pour la journée, j'y jetterai un oeil ce soir si d'ici là vous n'y arrivez pas.
Bonne journée
Cdlt
0