IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

enregistrer une page en pdf


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut enregistrer une page en pdf
    Bonjour,

    je souhaiterais enregistrer un onglet de mon fichier en pdf . Sachant que le fichier excel se trouve quelque part sur le pc, je souhaiterais faire une macro qui enregistre le pdf dans un sous dossier "bon de commandePDF" là où l'utilisateur a stocké le classeur excel.

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub pdf()
    Dim Dossier As String
    Dim Path_name As String
    Dim NomFichier As String
    NomFichier = "bon de commande_" & ActiveSheet.Range("I3").Value & "_" & ActiveSheet.Range("I6").Value ' & ".pdf"
    Path_name = ThisWorkbook.Path
    Dossier = Path_name & "\Bon de commandePDF"
     
        If DossierExiste(Dossier) = True Then
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Dossier & "\" & NomFichier & ".pdf" _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=True
        Else
             MkDir (Path_name & "\Bon de commandePDF")
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Dossier & "\" & NomFichier & ".pdf" _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=True
     
        End If
    End Sub

    j'ai vérifié chaque étape et ce qui ne va pas c'est le active.Sheet.ExportAsFixedFormat.... mais je ne sais pas où est le problème
    Quelqu'un pourrait il m'aider svp?

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenue sur le Forum,

    2 remarques au préalable
    - Pour reporter un code dans une discussion, afin de le rendre plus lisible, tu peux le borner par les balises #.
    - Quant à l'architecture de la procédure, afin de la simplifier, tu peux créer un sous-répertoire si celui-ci n'existe pas.
    Après la fin de condition, la méthode d'export doit être placée (donc une seule fois).

    Je pense qu'il y a des caractères "parasites".
    T peux commencer par contrôler les valeurs des cellules I3 et I6 de la feuille active.
    Procède à l' affichage de la fenêtre des variables locales (menu "Affichage" de l'éditeur VBE) puis à une exécution en pas à pas.
    Rapporte ainsi dans la discussion les valeurs affichées de ces variables.

    Un bon point, si je peux me permettre, quant à l'utilisation de variables qui permettent un contrôle efficace de la procédure.

    A plus tard.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse. Concernant votre 2eme remarque sur créer un répertoire pour simplifier le code je n'ai pas bien compris...
    sinon concernant les cellules; une a un format "nombre" et l'autre un format "date".

    voici la fenêtre des variables locales (image)Nom : code.PNG
Affichages : 641
Taille : 31,1 Ko

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    pardon je me suis trompée d'image

    Nom : variables.PNG
Affichages : 558
Taille : 8,3 Ko

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Jour22pluie, Bonjour le Forum,

    En fait, je pense que l'anomalie provient du répertoire d'enregistrement (le bureau).
    Je viens de tester et j'ai aussi une erreur.

    D'autre part, pour tester et/ou créer un répertoire, mieux vaut utiliser les requêtes Fso

    Pour ce faire

    Après avoir enregistré le classeur principal dans un répertoire "classique"
    - Active la référence "Microsoft Scripting.RunTime" (Menu Outils\Références de l'éditeur VBE)
    - Adapte ce code épuré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Option Explicit
     
    Sub pdf()
     
    Dim Dossier As String
    Dim Path_name As String
    Dim NomFichier As String
     
    NomFichier = "bon de commande_" & ActiveSheet.Range("I3").Value & "_" & ActiveSheet.Range("I6").Value ' & ".pdf"
    Path_name = ThisWorkbook.Path
    Dossier = Path_name & "\Bon de commandePDF"
     
    Call Test_chemin(Dossier)
     
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Dossier & "\" & NomFichier & ".pdf"
     
    End Sub
     
    Sub Test_chemin(lechemin As String)
    'Activer la Référence Miscrosoft Scripting runtime
    'Crée un chemin s'il n'existe pas
     
    Dim fso As FileSystemObject
    Dim fsoMonDossier As Folder
     
    Set fso = New FileSystemObject
     
    If Not fso.FolderExists(lechemin) Then
      Set fsoMonDossier = fso.CreateFolder(lechemin)
    End If
     
    If Not fsoMonDossier Is Nothing Then Set fsoMonDossier = Nothing
     
    Set fso = Nothing
     
    End Sub

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Au temps pour moi, la création de sous-répertoire dans "Bureau" est possible.
    (Testé avec mon dernier code.)

    Cela dit, je ne suis pas fan.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    bonjour,

    j'ai mis le dossier dans mes documents et je n'y arrive toujours pas... j'ai rajouté à votre code "dim lechemin as string" et lechemin=Path_name & "\Bon de commandePDF" ce qui équivaut à Dossier et je n'ai pas fait d'autres ajouts

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    (Tu peux me tutoyer en m'interpellant "Marcel")

    Pourrais-tu
    1 - vérifier que la référence Microsoft Scripting Runtime est bien activée
    2 - exécuter le code pas à pas en vérifiant que le sous-répertoire est bien créé
    3 - reporter le code dans son intégralité ainsi que la ligne éventuelle qui pose problème (surlignée généralement par le débugger en jaune) en précisant le message d'erreur

    On va y arriver!

    A plus tard

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    d'accord!

    1- c'est ok
    2- quand j'enlève la ligne d'enregistrement tout est ok le fichier se créé si il n'existe pas et aucun message d'erreur si il est créé et que je relance la macro
    3- Nom : code.PNG
Affichages : 599
Taille : 47,7 Ko

    j'espère! merci beaucoup pour ton temps et ton aide en tout cas

  10. #10
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Consulte mon tout premier post.
    Les "/" ne sont pas admis dans un nom de fichier.

    Pour passer outre cette restriction, tu peux utiliser la fonction Format qui transformera la date en chaîne de caractères (String)

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Option Explicit
     
    Sub pdf()
     
    Dim Dossier As String
    Dim Path_name As String
    Dim NomFichier As String
     
    Path_name = ThisWorkbook.Path
    Dossier = Path_name & "\Bon de commandePDF"
     
    Call Test_chemin(Dossier)
     
    With ActiveSheet
            NomFichier = "bon de commande_" & .[I3] & "_" & Format(.[I6], "d mmm yyyy") ' & ".pdf"
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Dossier & "\" & NomFichier & ".pdf"
    End With
     
    End Sub
     
    Sub Test_chemin(lechemin As String)
    'Activer la Référence Miscrosoft Scripting runtime
    'Crée un chemin s'il n'existe pas
     
    Dim fso As FileSystemObject
    Dim fsoMonDossier As Folder
     
    Set fso = New FileSystemObject
     
    If Not fso.FolderExists(lechemin) Then
      Set fsoMonDossier = fso.CreateFolder(lechemin)
    End If
     
    If Not fsoMonDossier Is Nothing Then Set fsoMonDossier = Nothing
     
    Set fso = Nothing
     
    End Sub
    Tu remarquera que j'ai allégé le code en utilisant un bloc With, et en utilisant seulement 2 paramètres pour la méthode ExportAsFixedFormat.

    IMPORTANT!
    Je n'utilise la notation entre crochets seulement pour le report de la valeur.
    pour Voir le billet de Pierre à ce sujet.

    Cela dit, je conseillerais à tout débutant d'utiliser l'écriture

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    ça marche!!!

    alors le "/" est le caractère parasite dont tu parlais.

    merci à toi vraiment. Vu que je suis triple 0 en informatique j'ai pas compris tout ton code notamment tes manipulations pour l'alléger mais bon ça fonctionne!

    Bonne journée Marcel!

    bien cordialement,

    Martha

  12. #12
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Martha,

    j'ai pas compris tout ton code notamment tes manipulations pour l'alléger mais bon ça fonctionne!
    Quoi exactement.
    Il ne faut pas, chère Martha, se contenter d'un "çà marche" mais profiter d'un échange pour aborder tous les processus qui y sont reportés.

    Reviens donc en précisant les points qui te sont obscurs.

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    Salut Marcel,

    puisque tu insistes... déjà tout ce qui est en rapport avec fso je ne comprends pas et pourquoi le mkDir pour créer un nouveau dossier ne marchait pas?
    après est ce que "lechemin" est une variable à déclarer? parce que cela revient à la variable "Dossier" donc on aurait pu reprendre ce nom non?

  14. #14
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Martha,

    puisque tu insistes
    C'est pour toi!

    déjà tout ce qui est en rapport avec fso je ne comprends pas et pourquoi le mkDir pour créer un nouveau dossier ne marchait pas?
    En ce qui concerne les méthodes FSO, tu peux consulter ce tutoriel de Christophe qui en indique les avantages et les fonctionnalités.
    Sur la toile, tu trouveras d'autres argumentaires.
    Je l'avoue. Je n'ai pas la connaissance technique pour expliciter cet avantage de passer par FSO. Je n'ai que mon expérience.
    J'en retiendrai que FSO est mieux indiqué quant à la gestion des sous-répertoires.

    après est ce que "lechemin" est une variable à déclarer? parce que cela revient à la variable "Dossier" donc on aurait pu reprendre ce nom non?
    N'importe quel nom de variable peut être utilisé. L'important, voire le fondamental, réside en une déclaration précise et adaptée (donc, dans 99% des cas non en Variant). Ici "String".

    J'ajouterai que le bloc With permet une meilleure lecture - et gestion - du code.
    Il permet surtout de rattacher les différents objets, ce qui est fondamental, sans une écriture fastidieuse car répétitive de l'objet parent.

    Notons au passage que ce bloc pouvait être utilisé avec l'objet FSO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With fso
      If Not .FolderExists(lechemin) Then
        Set fsoMonDossier = .CreateFolder(lechemin)
      End If
    End With
    A plus tard

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    salut Marcel,

    Je te remercie pour le lien et tes explications. Je vais essayer de progressivement apprendre le VBA, peut être que j'en aurai besoin à l'avenir. Je te remercie encore pour ton aide.

    Bien cordialement,
    Martha

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Enregistrer une page aspx sous forme de pdf
    Par iltcha dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/11/2015, 11h16
  2. Enregistrer une page web en pdf ?
    Par jmulans dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 01/05/2007, 20h39
  3. enregistrer une page web entiere
    Par aaron4444 dans le forum Dépannage et Assistance
    Réponses: 2
    Dernier message: 13/06/2006, 15h04
  4. Télécharger et enregistrer une page web
    Par bous_saad317 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 24/02/2006, 17h35
  5. enregistrer une page asp
    Par car dans le forum ASP
    Réponses: 5
    Dernier message: 17/08/2005, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo