XL 2013 Export-vers-Excel&PDF

chindou

XLDnaute Occasionnel
Bonsoir le forum

J’utilise le code ci-dessous qui marche très bien, pour sauvegarder (Exporter) une plage de cellules nommée « Plage » en deux formats xlsx & PDF et sous un nouveau nom.

Dans mon code il y a une partie pour la sauvegarde en xlsx et PDF autre partie pour supprimer les shapes (objets dessin) et la partie pour supprimer les liaisons « noms définis »

Le seul problème c’est que mon code est un peu lourd, est-ce possible de le simplifier ?
 

Pièces jointes

  • Vers_Excel_et_Pdf.xlsm
    84.6 KB · Affichages: 19
Solution
@chindou

Désolé, j'avais oublié ceci : nom du fichier sans mettre l'extension :

NomFichier = [Feuil3!T10] & "_" & [Feuil4!B6] & "_" & Format([Feuil3!T38], "dd-mm-yyyy")



... : ChemindFichier = ChemindAcces & "\" & NomFichier & ".pdf"

et

ActiveWorkbook.SaveCopyAs ChemindAcces & "\" & NomFichier & ".xlsx"

Code VBA complet :
VB:
Option Explicit

Sub Sauvegarder() 'Sauvegarder la feuille "Visite" sous format xlsx et pdf
  Dim Reponse%
  Reponse = MsgBox("Veux-tu créer un fichier PDF à partir du feuille active ?", _
    vbYesNo + vbDefaultButton2 + vbExclamation, "Créer un fichier PDF")
  If Reponse = vbNo Then Exit Sub
  Dim wkb As Workbook, nm As Name, NomFichier$, ChemindAcces$, ChemindFichier$...

soan

XLDnaute Barbatruc
Inactif
Bonsoir chindou,

Je te retourne ton fichier modifié.

Edit de 19 h 28 :

J'avais oublié une petite optimisation,
je viens de finaliser le code VBA.


soan
 

Pièces jointes

  • Vers_Excel_et_Pdf.xlsm
    86 KB · Affichages: 4
Dernière édition:

kiki29

XLDnaute Barbatruc
Salut, plutôt que d'asphyxier le code, il faut l'aérer et en augmenter la lisibilité.
Il existe des utilitaires d'indentation. On se croirait revenu au temps des Basics Applesoft et autres des années 80 sur des machines à 1 MHz où cette écriture pouvait jouer sur les perfs de l'interprétation.
D'autre part utiliser les CodeNames au lieu des noms d'onglets, cela permet de changer les noms d'onglets sans avoir à retoucher au code.
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@chindou

Désolé, j'avais oublié ceci : nom du fichier sans mettre l'extension :

NomFichier = [Feuil3!T10] & "_" & [Feuil4!B6] & "_" & Format([Feuil3!T38], "dd-mm-yyyy")



... : ChemindFichier = ChemindAcces & "\" & NomFichier & ".pdf"

et

ActiveWorkbook.SaveCopyAs ChemindAcces & "\" & NomFichier & ".xlsx"

Code VBA complet :
VB:
Option Explicit

Sub Sauvegarder() 'Sauvegarder la feuille "Visite" sous format xlsx et pdf
  Dim Reponse%
  Reponse = MsgBox("Veux-tu créer un fichier PDF à partir du feuille active ?", _
    vbYesNo + vbDefaultButton2 + vbExclamation, "Créer un fichier PDF")
  If Reponse = vbNo Then Exit Sub
  Dim wkb As Workbook, nm As Name, NomFichier$, ChemindAcces$, ChemindFichier$
  Application.ScreenUpdating = 0
  NomFichier = [Feuil3!T10] & "_" & [Feuil4!B6] & "_" & Format([Feuil3!T38], "dd-mm-yyyy")
  Worksheets("Visite").Unprotect Password:="": Worksheets("Visite").Copy
  Range("Plage").Copy: Range("Plage").PasteSpecial -4163: Application.CutCopyMode = 0
  'Supprimer les boutons (objets dessin)
  ActiveSheet.Shapes.Range(Array("Image 4", "Image 5", "SpinButton1", "Rectangle 2")).Delete
  Set wkb = ActiveWorkbook: On Error Resume Next
  For Each nm In wkb.Names: nm.Delete: Next nm 'Supprimer les liaisons (noms définis)
  ChemindAcces = "C:\Dossier_Inspect-V11\Rapports": ChemindFichier = ChemindAcces & "\" & NomFichier & ".pdf"
  ActiveWorkbook.SaveCopyAs ChemindAcces & "\" & NomFichier & ".xlsx"
  ActiveWorkbook.Close 0
  ActiveSheet.ExportAsFixedFormat 0, ChemindFichier, 0, True, False, , , False
  Worksheets("Visite").Protect Password:=""
End Sub
Bonne soirée à toi aussi.

soan
 

Pièces jointes

  • Vers_Excel_et_Pdf.xlsm
    86 KB · Affichages: 13
Dernière édition:

chindou

XLDnaute Occasionnel
Bonjour soan, bonjour le forum
Oui il y avait un bug au niveau de la ligne :
VB:
NomFichier = [Feuil3!T10] & "_" & [Feuil4!B6] & "_" & Format([Feuil3!T38], "dd-mm-yyyy") & ".pdf"
J’ai remplacé cette dernière, suite à une comparaison des deux modules par la ligne :
VB:
NomFichier = Feuil3.Range("T10") & "_" & Feuil4.Range("B6") & "_" & Format(Feuil3.Range("T38"), "dd-mm-yyyy") & ".pdf"
Merci bien soan.:)
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 077
Membres
103 455
dernier inscrit
saramachado