Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 plantage lors d'un export format PDF

JPaul78

XLDnaute Junior
bonjour à tous,
je me casse le nez sur un pb d'export d'une feuille Excel au format pdf dont voici les lignes principales

Code:
'préparer le fichier de sauvegarde
If ws_Donnees.Range("Chemin_Save_Stock").Value = "" Then 'cas ou il n'y a pas de chemin sauvegardé
    'dans le même dossier que le programme et création du nom de sauvegarde
    Chemin = GetLocalPath(ThisWorkbook.Path)
Else
    Chemin = ws_Donnees.Range("Chemin_Save_Stock").Value
End If

'vérification que le dossier de sauvegarde est OK
If test_chemin(Chemin) = False Then
    MsgBoxX "                   Dossier de stockage non comforme." & vbCrLf & _
                "            Allez dans l'administration pour le changer" & vbCrLf & _
                " Par défaut le fichier est sauvegardé dans le dossier de ce programme", vbExclamation + vbOKOnly, "Information", DelayOfResponse:=2
      
    Chemin = GetLocalPath(ThisWorkbook.Path)
End If

'module d'impression du listing
Nom_Sauvegarde = Chemin & "\Indic_" & Format(Date, "mm_yyyy") & "_pour_ " & [Nom_Garage]
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nom_Sauvegarde, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Le programme lance correctement la publication du pdf avec sa barre de progression, puis plante a la fin avec une erreur d'exécution '1004" erreur définie par l'application ou par l'objet". Ma grande incompréhension vient que ce même code utilisé dans une autre partie de mon programme fonctionne très bien (c'est un copier/coller). c'est un peu comme s'il avait des pbs d'enregistrements????
J'ai aussi vérifié que les "nom_sauvegarde" sont similaire cela ne vient pas de là, j'ai testé en mettant filename:= "Test.pdf" sans plus de succès bref je rame!
Par avance merci à vous si vous avez des pistes de réflexion
Quelques éléments en plus:
J'ai réalisé une exportation manuelle de plusieurs feuilles de mon classeur: toutes exportations fonctionnent sauf pour la feuille "Indicateurs" ou mon code plante avec comme raison "document non enregistré. Le document est peut-être ouvert ou une erreur s'est produite lors de l'enregistrement" J'en déduis que ce n'est probablement pas un pb de code VBA mais quoi d'autre?????
Merci par avance
 
Dernière édition:
Solution
@JPaul78

Perso, sans fichier je n'irais pas plus loin.

De plus ceci devrait te donne le chemin de onedrive

@JPaul78

1) Tu fais une copie de ton fichier
2) Tu laisses une dizaine/vingtaine de lignes
3) Tu anonymises ton fichier en remplaçant les noms par toto, momo etc....

Et tu le postes sur le site
J'ai fait maigrir le mammouth qui est passé de 13 Mo à moins de 1 Mo. j'aurais aimé laisser la partie du programme qui réalisait une sortie pdf équivalente fonctionnante mais cela ne passait pas. il reste donc la feuille "Indicateur" et son programme qui plante et une autre feuille de variables . En espérant que la cure d'amaigrissement ne gène pas.
Encore merci

Phil69970

XLDnaute Barbatruc
Bonjour @JPaul78

Je pense que tu as un pb avec le chemin de ton fichier

Peux tu mettre la copie d'écran du message que tu obtiens ?

VB:
Nom_Sauvegarde = Chemin & "\Indic_" & Format(Date, "mm_yyyy") & "_pour_ "  ' & [Nom_Garage]
MsgBox Nom_Sauvegar

et fais ensuite ce test tu copies ce code dans un module dans ton fichier qui se trouve enregistré sur ton disque dur
VB:
Sub essai()
    Nom_Sauvegarde = ThisWorkbook.Path & "\Indic_" & Format(Date, "mm_yyyy") & "_pour_.PDF"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nom_Sauvegarde, Quality:=xlQualityStandard, IncludeDocProperties:=True
End Sub

Et tu dois avoir la création d'un fichier pdf sur ton DD.


Le but est de voir si cela fonctionne chez toi.....
 

JPaul78

XLDnaute Junior
Merci de ton retour Phil69970,
Voici la capture d'écran demandée et j'ai testé ton code qui plante lorsque je le lance depuis ma feuille "Indicateurs", celle qui pose pb.
Par contre, je l'ai testé en partant d'une autre feuille et là cela fonctionne! (tout comme je l'avais constaté en faisant une exportation PDF manuelle sur plusieurs feuille voir 2ieme PJ). J'ai bien une particularité de ma feuille (ou de mon workbook) qui fait planter cet export. c'est d'autant plus rageant que je fait cette opération avec le même programme dans d'autres applications et cela fonctionne parfaitement
 

Pièces jointes

  • Capture d'écran 2024-03-28 063942.jpg
    14.1 KB · Affichages: 62
  • Capture d'écran 2024-03-27 213455.png
    7.4 KB · Affichages: 13

JPaul78

XLDnaute Junior
bonjour Toofatboy,
ce message était pour montrer à Phil69970 le chemin complet de MA solution et ainsi de vérifier s'il n'y avait pas de pb sur mon chemin.
J'ai bien utilisé le pgm de test de Phil69970 qui ne fonctionne pas avec ma page spécifique "Indicateur" mais qui arrive a fonctionner sur d'autres feuilles et dans ce cas, je retrouve bien le fichier attendu.
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
juste en passant
je vois dans le code l'utilisation de deux fonctions qui ne sont pas dans le code du post#1
if test_chemin(Chemin) = False Then
'...
'...'
'...
Chemin = GetLocalPath(ThisWorkbook.Path)

doit on en deviner le code ?
 

JPaul78

XLDnaute Junior
Bonjour Patrick,
toujours l'œil aguerri! oui je ne les ai pas mentionnés car je ne pense pas qu'ils interviennent dans le pb (j'ai vérifié que le chemin utilisé pour la réal du pdf est OK).
test_chemin vérifie qu'il est OK et getlocalpath me sort du pb de onedrive sous forme HTML
VB:
'fonction pour transformer le chemin d'un onedrive perso d'HTML vers chemein classique
'Avec les derniere version d'excel one drive est sous forme d'URL
Function GetLocalPath(docPath As String) As String
 ' ----------------------------------------------------------------
 ' Procedure Name: GetLocalPath
 ' Purpose: Convert OneDrive URL to local file path
 ' Procedure Kind: Function
 ' Procedure Access: Private
 ' Parameter docPath (String): Pass URL String
 ' Return Type: String
 ' ----------------------------------------------------------------
 
Const strcOneDrivePart As String = "https://d.docs.live.net/"
Dim strRetVal As String, bytSlashPos As Byte
Dim BaseRacineOneDrive As Variant

strRetVal = docPath & ""
If Left(LCase(docPath), Len(strcOneDrivePart)) = strcOneDrivePart Then 'yep, it's the OneDrive path
     'locate and remove the "remote part"
    bytSlashPos = InStr(Len(strcOneDrivePart) + 1, strRetVal, "/")
    strRetVal = Mid(docPath, bytSlashPos)
     'read the "local part" from the registry and concatenate
    strRetVal = Replace(strRetVal, "/", "\") 'slashes in the right direction
    BaseRacineOneDrive = Environ("OneDrive") 'recupère le début de l'environnement
    strRetVal = BaseRacineOneDrive + strRetVal
    strRetVal = Replace(strRetVal, "%20", " ") 'a space is a space once more????
End If
GetLocalPath = strRetVal
End Function
'fonction qui teste la validité d'un chemin
Function test_chemin(CheminAtester As String) As Boolean
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")

If fs.folderExists(CheminAtester) Then
    test_chemin = True
Else
    test_chemin = False
End If
End Function
 

JPaul78

XLDnaute Junior
re
perso je ne pige pas le besoins avec onedrive d'aller chercher l'adresse url du dossier
alors que l'on est sensé avoir un dossier syncro sur DD
si tant est que onedrive soit paramétré correctement
Ce programme est implanté sur 4 ou 5 machines que je ne contrôle pas et quelque fois j'obtiens l'adresse URL que, si c'est le cas, je transforme en adresse classique.
 

JPaul78

XLDnaute Junior
@JPaul78

Perso, sans fichier je n'irais pas plus loin.

De plus ceci devrait te donne le chemin de onedrive

@JPaul78

1) Tu fais une copie de ton fichier
2) Tu laisses une dizaine/vingtaine de lignes
3) Tu anonymises ton fichier en remplaçant les noms par toto, momo etc....

Et tu le postes sur le site
J'ai fait maigrir le mammouth qui est passé de 13 Mo à moins de 1 Mo. j'aurais aimé laisser la partie du programme qui réalisait une sortie pdf équivalente fonctionnante mais cela ne passait pas. il reste donc la feuille "Indicateur" et son programme qui plante et une autre feuille de variables . En espérant que la cure d'amaigrissement ne gène pas.
Encore merci
 

Pièces jointes

  • pour débuggage sortie pdf.xlsm
    934.4 KB · Affichages: 3

Discussions similaires

Réponses
3
Affichages
750
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…