Imprimer une plage de cellules en pdf

Bonjour,

J'ai récupéré un code permettant en théorie, d'imprimer une sélection de cellules Excel (et non pas la feuille active) directement en pdf

Malheureusement je ne parviens pas à le faire fonctionner, sans vraiment comprendre pourquoi. Quelqu'un peut-il m'aider SVP ?

Je joins le fichier spécialement créé pour cet exercice, le code, ainsi que l'image du message d'erreur renvoyé.

Ma version d'Excel : 2007

Merci de votre aide.

image

Bonjour Catroun,

De ce que je vois, le message d'erreur n'est pas sur cette sub, vous devriez avoir une ligne en jaune

A+

Bonjour à Tous,

Merci Bruno

Pourtant si :

C'est bien en appuyant sur le bouton de la macro que le message apparaît, bien que je n'ai pas de ligne jaune sur le code.

Une piste ? : Ce code n'est peut-être pas compatible avec Excel 2007.

Connaissez-vous un code qui ferait la même chose et qui serait compatible 2007 ?

D'avance merci.

image

Re,

Et avec ce fichier ?

Nota : il faut qu'il existe un dossier "C:\Temp"

A+

Bonjour Catroun, BrunoM45,

Si pour les versions plus modernes d'Excel, les points avant le point final de l'extension ne posent aucun souci.

Pour Excel2007, il convient de remplacer ces points par l'underscore. Soit _

Donc modifier la variable string Ladate

Merci,

Même résultat :

Si ça marche chez vous c'est probablement pas le classeur qui en est la cause.

Je n'ai effectivement pas de ligne surlignée jaune, comme c'est en général le cas en cas de défaut dans le code !

Mystère !

image

Merci X Cellus

Je tente cela et revient vers vous.

Bonne soirée.

Suite,

Et surtout ne pas rajouter de point avant le seul point final. Donc un unique point, celui de l'extension (type de fichier)

X Cellus,

En y regardant de près je ne comprends pas ce qu'il faudrait changer dans le code de mon fichier (undescore au lieu des points). Aurais-tu l'amabilité d'y apporter les corrections nécessaires, car je débute en vba et tout cela me parait encore un peu du chinois. Je sens que je vais encore apprendre quelque chose ... j'adore !

Merci de ton aide. Je te joins à nouveau le fichier à l'origine de cette discussion.

A nouveau,

En dessous du Dim LHeure, Ladate as string

Qui represente des variables au format texte.

Pou la variable LHeure c'est bon, elle sera au format "HMS" voire "HMSS" si secondes sur 2 caractères.

Par contre, pour la variable Ladate, son format n'est pas adaptée à 2007.

Remarque les différents points (.) après "dd" et "mm"

Donc c'est ici qu'il faut substituer les points par des underscores, soit le caractère _ entre guillemets bien sûr.

Merci X Cellus,

Je crois que j'ai fait comme il fallait, mais ça ne marche toujours pas. Grrrrrrrrrrrr !!!

image

re,

vous avez quelle erreur avec ceci ?

Sub PDF_SAVE()

     Dim LHeure As String, LaDate As String, s As String

     LHeure = Format(Time, "HMS")
     LaDate = Format(Date, "dd_mm_yyyy")

     ' Création fichier PDF

     On Error Resume Next

     ChDir "c:\Test"
     If Err.Number <> 0 Then MsgBox "problème avec ce dossier c:\Test"

     s = "C:\Test\Création du fichier le " & LaDate & " " & LHeure & ".pdf"
     MsgBox Len(s)
     If Err.Number <> 0 Then MsgBox "problème avec s"

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\test\creation, From:=1, To:=1, OpenAfterPublish:=False"     'avec nom court
     If Err.Number <> 0 Then MsgBox "problème1 avec la création du pdf"

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=s, From:=1, To:=1, OpenAfterPublish:=False
     If Err.Number <> 0 Then MsgBox "problème2 avec la création du pdf"

     On Error GoTo 0
     ' Message de confirmation

     MsgBox ("Création du fichier PDF effectué" & vbCrLf & vbCrLf & "Merci ")

End Sub

Bonsoir Bart,

Avez-vous vu la bêtise que vous venez de publier

Faire à la "va vite" ce n'est pas bien faire

@Bruno,

oui, c'était fait trop vite, sorry,

Sub PDF_SAVE()

     Dim LHeure As String, LaDate As String, s As String

     LHeure = Format(Time, "HMS")
     LaDate = Format(Date, "dd_mm_yyyy")

     ' Création fichier PDF

     On Error Resume Next

     ChDir "c:\Test"
     If Err.Number <> 0 Then MsgBox "problème avec ce dossier c:\Test"

     s = "C:\Test\Création du fichier le " & LaDate & " " & LHeure & ".pdf"
     'MsgBox Len(s)
     If Err.Number <> 0 Then MsgBox "problème avec s"

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\test\creation", From:=1, To:=1, OpenAfterPublish:=False     'avec nom court
     If Err.Number <> 0 Then MsgBox "problème1 avec la création du pdf"

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=s, From:=1, To:=1, OpenAfterPublish:=False
     If Err.Number <> 0 Then MsgBox "problème2 avec la création du pdf"

     On Error GoTo 0
     ' Message de confirmation

     MsgBox ("Création du fichier PDF effectué" & vbCrLf & vbCrLf & "Merci ")

End Sub

Bonsoir BsAlv et merci

Ca se présente mieux !

Mais j'ai successivement les trois messages suivants :

"Problème1 avec la création du pdf"

puis

"Problème2 avec la création du pdf"

puis

"Création du fichier PDF effectuée. Merci"

Mais quand je vais voir dans le répertoire cible (C:\test), il est vide !!!

On progresse : Ce n'est plus un problème de code qui accepte de s'exécuter, mais plutôt une erreur de résultat.

Suite,

Sous Excel 2007 la macro PDF_SAVE() fonctionne avec les corrections apportées (remplacement du point soit par l'underscore, soit par le tiret).

Le fichier reproduit ci-dessous a bien été créé.

Sub PDF_SAVE()
Dim LHeure As String, LaDate As String

LHeure = Format(Time, "HMSS")
'Choisir selon _ ou -
'LaDate = Format(Date, "dd" & "_" & "mm" & "_" & "yyyy")
LaDate = Format(Date, "dd" & "-" & "mm" & "-" & "yyyy")

' Création d'origine fichier PDF C:\Test\

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Test\Création du fichier le " & LaDate & " " & LHeure & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False

' Message de confirmation

MsgBox ("Création du fichier PDF effectué" & vbCrLf & vbCrLf & "Merci ")

End Sub

Vérifier que le dossier Test a été bien créé, qu'il ne comporte pas d'éventuel espace final

Contrôler par

Sub CheckFolderExists()

Dim strFolderName, strFolderExists As String
Dim Doss1, Doss2 As String
Dim F As Integer
Doss1 = "C:\Test"
Doss2 = "C:\Users\" & Environ("UserName") & "\Test"

    For F = 1 To 2
    strFolderName = IIf(F = 1, Doss1, Doss2)
    strFolderExists = Dir(strFolderName, vbDirectory)

    If strFolderExists = "" Then
        MsgBox "Dossier n° " & F & " Inconnu"
    Else
        MsgBox "Dossier n° " & F & " Reconnu"
    End If
    Next F

End Sub

Sinon recréer le Dossier.

re,

nouvel essai

Sub PDF_SAVE()

     Dim LHeure As String, LaDate As String, s As String

     LHeure = Format(Time, "HMS")
     LaDate = Format(Date, "dd_mm_yyyy")

     ' Création fichier PDF

     On Error Resume Next

     ChDir "c:\Test"
     If Err.Number <> 0 Then MsgBox "problème avec ce dossier c:\Test"

     s = "C:\Test\Création du fichier le " & LaDate & " " & LHeure & ".pdf"
     'MsgBox Len(s)
     If Err.Number <> 0 Then MsgBox "problème avec s"

     If ActiveSheet.UsedRange.Address = "$A$1" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$D$10" 'si la feuille est vide, sélectionnez une plage aleatoire

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\test\creation", OpenAfterPublish:=False     'avec nom court
     If Err.Number <> 0 Then MsgBox "problème1 avec la création du pdf"

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=s ', From:=1, To:=1, OpenAfterPublish:=False
     If Err.Number <> 0 Then MsgBox "problème2 avec la création du pdf"

     On Error GoTo 0
     ' Message de confirmation

     MsgBox ("Création du fichier PDF effectué" & vbCrLf & vbCrLf & "Merci ")

End Sub

Bonjour vous trois (X Cellus, BsAlv, BrunoM45) et les autres,

D'abord pour vous remercier de votre aide précieuse, qui m'a permis de faire fonctionner mon code à peu près comme je le voulais.

Il me reste un petit problème à régler concernant le format des heures. Je butte depuis plusieurs jours. Je suis obstiné, mais rien n'y fait. De guerre lasse, je m'en remets à votre expertise, car la mienne est trop "fraîche". Je m'explique :

Le format de la variable LHeure = Format(Time, "HMS") présente deux inconvénients majeurs :

1 - Le premier inconvénient est de ne pas placer de séparateurs ( : ) entre les heures, les minutes et les secondes. Ce qui, en soi, ne serait pas bien grave, s'il n'y avait pas également le deuxième inconvénient suivant :

2 - Pour 08h 04m et 15s, ce format renvoie la valeur 8415 et pour 08h 41mn et 05s, il renvoie exactement la même valeur 8415 ! Car le zéro est omis lorsque une valeur est inférieure à 10. Deux "objets différents qui portent le même nom me parait pas très rigoureux en matière d'informatique.

3 - Conséquences : Cette valeur LHeure participant à l'élaboration du nom du fichier qui sera généré, il est difficile et même impossible de l'interpréter, d'abord pour des raisons de confort visuel, mais aussi et surtout, pour des raisons de classement chronologique des fichiers ainsi créés.

4 Il me semble que la valeur attendue par le Filename du module d'impression pdf de ce code, doit être une chaîne de caractères. Il me semble également que le format d'heure renvoie également une chaîne de caractères, étant tous deux déclarés "As String" dans la partie Dim du code. Qu'il s'agisse de LHeure ou de CNDH, ce dernier représentant "Chemin&Nom&Date&Heure" qui sera envoyé au Filename.

5 - J'ai donc tenté de modifier ce format pour obtenir la chaîne 08:04:15 avec séparateurs et les chiffres 0 lorsque nécessaire. Heures, Minutes, et Secondes sur deux caractères. Mais toutes mes tentatives ont échoué, bloquant l'exécution du code avec un message d'erreur. Je devrais dire message "d'horreur" car il s'agit d'une kyrielle de chiffres impossibles à interpréter eux aussi. Y compris quand je tente de récupérer le code de ce qui fonctionne dans Excel, avec un "Enregistrer une macro".

6 - Existe-t-il un format qui permettrait de contourner cette difficulté ? Faut-il que je compose moi-même (ou plus exactement que le code recompose lui-même) une chaîne de caractères en extrayant séparément les heures, les minutes, et les secondes avec, par exemple, les fonctions Hour(Heure), Minute(Heure) et Seconde(Heure), pour les concaténer pour composer ma variable CNDH ?

7 - Y a-t-il quelque chose que je ne fais pas comme il faut ? Pourrait-ce venir de ma machine (pourtant performante) ou de mon Excel 2007 (version ou paramètre(s) bien caché(s) ?).

8 - Je vous joins le fichier dans lequel j'ai laissé les différents formats en commentaires. Vous pouvez les "dé-commenter" à tour de rôle et lancer la procédure, pour voir ce qu'il se passe.

Dans cette attente, je vous remercie à nouveau pour votre aide, et je vous souhaite une bonne soirée et une bonne semaine à venir.

re,

il n'y a qu'un problème, il y a des charactères interdits dans le nom d'un fichier et le ":" est un de ces charactères. https://www.01net.com/actualites/pourquoi-certains-caracteres-sont-ils-interdits-dans-les-noms-de-fi...

Donc vous pouvez essayer autant que vous pouvez, le résultat est nihil.

3 possibilités pour l'heure, si vous doublez le h, le m ou le s, vous recevez un zéro dans le cas où il n'y a qu'un chiffre.

   MsgBox Format(Time, "hhmmss") & vbLf & Format(Time, "hh_mm_ss") & vbLf & Format(Time, "hh\hmm\mss\s")

le résultat sera 080415, 08_04_15 et 08h04m15s, ça suffit ou voulez vous encore d'autres ?

Bonjour BsAlv,

Merci pour cette réponse matinale. C'est formidable : on se couche tard pour rédiger au mieux la description d'un problème et on a une réponse au réveil !

Bon il me semble que j'ai essayé de doubler les "h" mais que cela plante mon code quand même. Je vais vérifier cela et tenter de traquer dans le détail le ou les points (.) interdits. Les détails... là ou se cache le diable, vous savez ???

Bonne journée.

Rechercher des sujets similaires à "imprimer plage pdf"