Macro enregistrer sous le nom d'une cellule en pdf

Bonjour tout le monde,

Je débute dans les macro, et je n'arrive pas à trouver la solution.

Je souhaite enregistrer une feuille sous le nom d'une cellule (N3) en pdf dans un chemin.

Voici le code que j'ai mis mais j'ai une erreur d'execution:

test_new_macro_saveas Macro

Dim chemin As String, fichier As String
chemin = ThisWorkbook.Path
fichier = "Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation\" & Range("N3") & ".pdf"
ActiveWorkbook.SaveAs Filename:=fichier

End Sub

Merci de votre aide

Bonjour ,

tu peux essayer ça :

Sub enregistrer()

'
ChDir "Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation\"

ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation\" & Cells(3, 14) & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

End Sub

(Je l'ai trouvé en enregistrant une macro)

le Cells(3,14) correspond à la cellule N3, si tu as plusieurs feuilles, vérifies que c'est bien la feuille avec la cellule N3 que tu veux utiliser qui est active.

Bonne chance pour la suite

Oui sa fonctionne bien, par contre j'ai effectivement plusieurs onglets et cette macro s'utilise sur d'autres feuilles.

Du coup quand j'ai lancé la macro, cela fonctionne.

Je change d'onglet et je lance la macro et là j'ai un message d'erreur " Erreur d'exécution '1004'.

Il faut que la macro enregistre la feuille en PDF, et dans les PDF je toutes mes feuilles dedans ....

Essaies de rajouter ça au début de ta macro :

Sheets(Array ("Feuille1","Feuille2","Feuille3")).Select

Ca devrait sélectionner toutes les feuilles de ton classeur et donc tout convertir en PDF dans le même PDF. (Evidement, remplace Feuille1, Feuille2 et Feuille3 par le nom de tes feuilles).

En fait sur l'onglet "Fiche EP", j'ai juste besoin que cette feuille soit enregistré sous PDF ( Pas les autres)

Le nom pour l'enregistrement est dans la céllule N3.

Dans l'onglet "Retour", le nom pour l'enregistrement egalement est en célulle N3.

Penses tu qu'on peut créer une macro qui puisse faire les deux enregistrements sous DEUX PDF différent en un seul clic ?

C'est à dire, enregistrer la feuille "Fiche EP" en PDF + la feuille "Retour" en PDF .

image

oui ,

je pense que si tu écris deux fois le même code dans la même macro mais une fois en sélectionnant ta feuille "Fiche EP" et une fois en sélectionnant ta feuille "Retour" ça devrait fonctionner.

Comme ça :

Sub enregistrer ()


Sheets("Fiche EP").Select

ChDir "Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation\"

ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation\" & Cells(3, 14) & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

Sheets("Retour").Select

ChDir "Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation\"

ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation\" & Cells(3, 14) & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

End Sub

Je ne l'ai pas testé mais je pense que cela devrait fonctionner. Dis-moi ce que ça donne

J'ai un message d'erreur :

image

Je débute dans les macros, mais ton code me semble correct pourtant, je ne vois pas d'ou peut venir le problème ....

Bonjour à tous,

Voici un essai sans ouverture du pdf après publication, pour éviter une erreur lorsqu'on relance le code (le pdf préexistant est donc remplacé le cas échéant) :

Sub enregistrer ()
dim msg$, spath$, tws, wsname
spath = "Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation" 'répertoire enregistrement
if dir(spath, vbdirectory) = "" then msg = "Dossier introuvable": goto fin 'si répert introuvable, sortie et préparation message
tws = array("Fiche EP", "Retour") 'tableau des noms de feuille à exporter
for each wsname in tws 'pour chaque nom dans tws
    if wsexists(wsname) then 'si la feuille existe
        with sheets(wsname) 'avec la feuille
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=spath & "\" & .Cells(3, 14) & ".pdf", IgnorePrintAreas:=False 'export pdf dont le nom dépend de N3 de la feuille en question
        end with
    else
        msg = msg & vblf & "La feuille " & wsname & " est introuvable" 'si la feuille n'existe pas, msg d'erreur
    end if
next wsname
if msg = "" then exit sub 'si aucune erreur, fin de procédure
fin:
msg = "Rapport d'erreurs :" & vblf & msg 'si erreurs, on complète notre message par un "titre"
msgbox msg, vbcritical 'renvoie msg
End Sub

function wsexists(wsname$) as boolean 'test existence de la feuille dans le classeur actif
on error resume next
wsexists = sheets(wsname).index
end function

Cdlt,

Bonjour à tous & Bonne année 2022 .

Je viens de tester cette macro mais j'ai un message d'erreur sur la compilation:

image

Bonjour,

Merci, bonne année également !

Essayez en remplçant wsname par cstr(wsname) à la ligne désignée.

Cdlt,

Erreur de compilation: Erreur de syntaxe

image

Un effort, vous y êtes presque !

J'ai essayé de modifié la synaxe, mais j'ai une erreur :

image

Il faut juste convertir l'argument de type variant en chaine de caractères :

if wsexists(cstr(wsname)) then
Sub enregistrer ()
dim msg$, spath$, tws, wsname
spath = "Z:\Operation\Sales Support\TRANSPORT\Erreur de préparation" 'répertoire enregistrement
if dir(spath, vbdirectory) = "" then msg = "Dossier introuvable": goto fin 'si répert introuvable, sortie et préparation message
tws = array("Fiche EP", "Retour") 'tableau des noms de feuille à exporter
for each wsname in tws 'pour chaque nom dans tws
    if wsexists(cstr(wsname)) then 'si la feuille existe
        with sheets(wsname) 'avec la feuille
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=spath & "\" & .Cells(3, 14) & ".pdf", IgnorePrintAreas:=False 'export pdf dont le nom dépend de N3 de la feuille en question
        end with
    else
        msg = msg & vblf & "La feuille " & wsname & " est introuvable" 'si la feuille n'existe pas, msg d'erreur
    end if
next wsname
if msg = "" then exit sub 'si aucune erreur, fin de procédure
fin:
msg = "Rapport d'erreurs :" & vblf & msg 'si erreurs, on complète notre message par un "titre"
msgbox msg, vbcritical 'renvoie msg
End Sub

function wsexists(wsname$) as boolean 'test existence de la feuille dans le classeur actif
on error resume next
wsexists = sheets(wsname).index
end function

Comme je l'ai dit plus haut : wsname devient cstr(wsname) au niveau du If, le reste demeure inchangé.

Un peu de recherche, ça ne fait pas de mal hein...

Les parenthèses !!! Je n'y avais pas pensé ...

J'ai lancé le code mais j'ai cet erreur maitnenant:

image image

Et est-ce que tu n'aurais pas ouvert un fichier du même nom au moment de l'exécution ?

Sinon, il faut bien vérifier que la cellule N3 contient un texte valide comme nom de fichier. Ensuite, il pourrait s'agir d'un défaut d'autorisation mais j'en doute, ça aurait été un autre message d'erreur je pense.

Bonjour,

En fait ma célulle N3 est une formule concatener.

Je l'ai supprimé en remplacant par un texte et ca fonctionne !!!!

Comment faire si je veux mettre une formule ?

Merci beaucoup pour votre aide.

Bonjour,

Ce n'est pas la formule mais la valeur renvoyée par cette formule qui gêne. Il faut simplement éviter, je suppose, d'utiliser des caractères interdits dans les noms de fichiers, et donc se limiter au strict nécessaire.

Cdlt,

Rechercher des sujets similaires à "macro enregistrer nom pdf"