XL pour MAC Chemin d'accès dans VBA macro d'impression PDF

JBZL

XLDnaute Nouveau
Bonjour,

Tout d'abord merci pour vos ressources qui m'ont bien aidé.

Il me reste néanmoins un mystère que je n'arrive pas a résoudre.

Dans le code ci-joint le fichier PDF se créer dans le dossier microsoft/data/Document au lieu de se créer dans le dossier racine du classeur Excel

La boite de dialogue a la fin d'exécution renvoi pourtant bien le chemin d'accès du fichier Excel avec l'argument ActiveWorkbook.Path j'ai également essayer avec ThisWorkBook.path

Auriez vous une piste ?

merci d'avance

Sub Impression_Convocation()
Dim PDFFullName As String
Dim WBPath As String
Dim Dot As Integer

Application.ScreenUpdating = False

For Dot = 1 To 12 Step 1

WBPath = ActiveWorkbook.Path

Sheets("Convocation").Range("B8").Value = Sheets("Convocation").Cells(Dot, 1).Value

PDFFullName = Sheets("Convocation").Cells(8, 2) & " - Convocation - " & Sheets("Convocation").Cells(19, 13) & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=PDFFullName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False


Next Dot

MsgBox "Fichier """ & "Document généré dans le dossier " & ActiveWorkbook.Path & """ enregistré !"

End Sub
 
Dernière édition:
Solution
Merci pour vos réponses, mais mon fichier par en cacahouète ... et il y a un moment ou il faut arrêter de bricoler et repartir a 0

J'ai pris la base de Christophe Garrigou (que je remercie) j'ai modifier le "/" par Application.PathSeparator suite à vos conseilles

Maintenant ça fonctionne correctement

VB:
Sub Impression_Emmargement()

Dim Chemin As String
Dim NFichier As String

Chemin = Application.ActiveWorkbook.Path & Application.PathSeparator 'met le pdf au même emplacement que le fichier
NFichier = ActiveSheet.Name & " - " & Sheets("Renseignement").Range("B3") & " - " & Sheets("Renseignement").Range("B25") & " - " & Format(ActiveSheet.Range("AX5"), " dd mm yyyy") & ".pdf" 'type de document - Entreprise -...

fanch55

XLDnaute Barbatruc
Bonsoir,

WBPath = ActiveWorkbookThisworkbook.Path à mettre avant le For .

Je ne sais pas ce qui est dans Sheets("Convocation").Cells(Dot, 1).Value,
( Sheets("Convocation").Range("B8").Value et Sheets("Convocation").Cells(8, 2), c'est la même cellule)
et dans le doute, je suppose que le path n'y est pas :

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=PDFFullName, _
<---- Filename:=WbPath & "\" & PDFFullname
 
Dernière édition:

JBZL

XLDnaute Nouveau
Bonsoir,

WBPath = ActiveWorkbookThisworkbook.Path à mettre avant le For .

Je ne sais pas ce qui est dans Sheets("Convocation").Cells(Dot, 1).Value,
( Sheets("Convocation").Range("B8").Value et Sheets("Convocation").Cells(8, 2), c'est la même cellule)
et dans le doute, je suppose que le path n'y est pas :

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=PDFFullName, _
<---- Filename:=WbPath & "\" & PDFFullname
Merci !!!!!!!
je cherchais absolument pas au bonne endroit
 

JBZL

XLDnaute Nouveau
Merci !!!!!!!
je cherchais absolument pas au bonne endroit
Finalement ça ne règle pas mon problème, j'avais du le modifier pour que cela fonctionne.

Sur le classeur que j'utilise, j'ai plusieurs feuille de calcul que je dois pouvoir imprimer de façon indépendante avec des noms de fichier différents. en copiant la macro pour faire préparer une autre génération VBA me renvoie a une erreur 1004 se qui n'arrive pas avec FileName:=PDFFullName, _

Il doit me manquer quelque-chose

Sub Impression_AT_DE_PRESENCE()
Dim PDFFullName As String
Dim WBPath As String
Dim Dot As Integer

With Worksheets("AT_DE_PRESENCE")
.Activate

Application.ScreenUpdating = False

WBPath = ActiveWorkbook.Path

For Dot = 1 To 12 Step 1

Sheets("AT_DE_PRESENCE").Range("x16").Value = Sheets("AT_DE_PRESENCE").Cells(Dot, 1).Value

PDFFullName = Sheets("AT_DE_PRESENCE").Range("x16") & " - " & Sheets("Renseignement").Range("B3") & " - AT de présence - " & Sheets("AT_DE_PRESENCE").Range("O18") & " - " & Sheets("AT_DE_PRESENCE").Range("M27") & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=WBPath & "/" & PDFFullName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Next Dot

MsgBox "Fichier """ & "Document généré dans le dossier " & ActiveWorkbook.Path & """ enregistré !"

End With

End Sub
 

Pièces jointes

  • Capture d’écran 2022-01-09 à 22.40.53.png
    Capture d’écran 2022-01-09 à 22.40.53.png
    185.8 KB · Affichages: 16
Dernière édition:

kiki29

XLDnaute Barbatruc
Re, Bis repetita placent : à tout hasard si tu es curieux voir Make and Mail PDF files with VBA code on your Mac et adapter à ton contexte

Commence par remplacer "/"(???) par Application.PathSeparator
Vérifie le contenu de la chaine PDFFullName ( présence de caractères interdits )

VB:
Private Function NomFichierValide(sChaine As String) As Boolean
Dim i As Long
Const sCaracInterdits As String = """*/:<>?\|"
    NomFichierValide = True
    If Len(sChaine) = 0 Then
        NomFichierValide = False
        Exit Function
    End If
    For i = 1 To Len(sCaracInterdits)
        If InStr(sChaine, Mid$(sCaracInterdits, i, 1)) > 0 Then
            NomFichierValide = False
            Exit Function
        End If
    Next i
End Function

Ooops ... Correction effectuée, Bonne remarque de Fanch55, encore une scorie qui trainait et permet de savoir qui suit ....
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Salut à tous
Commence par remplacer "/"(???) par Application.PathSeparator
@kiki29 a tout à fait raison.
Je vous avais dit au post #3 : Filename:=WbPath & "\" & PDFFullname
car \ , c'est plus court que Application.PathSeparator.
Cependant, je mettrai un bémol dans la liste des caractères interdits dans le nom d'un fichier :
1641807477596.png
 

JBZL

XLDnaute Nouveau
Commence par remplacer "/"(???) par Application.PathSeparator
On est d'accord que
VB:
FileName:=WBPath & "/" & PDFFullName, _
indique le chemin d'accès donc avec des "\" pour windows et "/" ou ":" pour Mac et non un nom de fichier ??

La ou ça déconne complètement, c'est qu'une fois copier la macro AT_DE_PRESENCE ne fonctionne qu'au démarrage du fichier et lance immédiatement l'impression sur l'imprimante alors que l'autre fonctionne normalement et envoi le PDF dans le dossier destination.

alors que c'est du copier/coller avec juste le nom de la feuille de calcul et les infos du nom du PDF qui change
 

fanch55

XLDnaute Barbatruc
Si c'est pour du Mac, Si Application.PathSeparator ne fournit pas l'attendu, essayez :
VB:
Filename:= replace(wbpath & "\" & PDFFullname,"\","/")
ou
Filename:= replace(wbpath & "\" & PDFFullname,"\",":")
 
Dernière édition:

JBZL

XLDnaute Nouveau
Merci pour vos réponses, mais mon fichier par en cacahouète ... et il y a un moment ou il faut arrêter de bricoler et repartir a 0

J'ai pris la base de Christophe Garrigou (que je remercie) j'ai modifier le "/" par Application.PathSeparator suite à vos conseilles

Maintenant ça fonctionne correctement

VB:
Sub Impression_Emmargement()

Dim Chemin As String
Dim NFichier As String

Chemin = Application.ActiveWorkbook.Path & Application.PathSeparator 'met le pdf au même emplacement que le fichier
NFichier = ActiveSheet.Name & " - " & Sheets("Renseignement").Range("B3") & " - " & Sheets("Renseignement").Range("B25") & " - " & Format(ActiveSheet.Range("AX5"), " dd mm yyyy") & ".pdf" 'type de document - Entreprise - formation - date de la session

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=Chemin & NFichier, Quality _
:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False


MsgBox "PDF enregistré dans le dossier de formation concerné"
    

End Sub

et avec incrémentation pour chaque stagiaire

VB:
Sub Impression_Attestation()

Dim Chemin As String
Dim NFichier As String
Dim Dot As Integer

For Dot = 1 To 12 Step 1

ActiveSheet.Range("BE6").Value = ActiveSheet.Cells(Dot, 1).Value

Chemin = Application.ActiveWorkbook.Path & Application.PathSeparator 'met le pdf au même emplacement que le fichier
NFichier = ActiveSheet.Range("BE6") & " - " & ActiveSheet.Name & " - " & Sheets("Renseignement").Range("B3") & " - " & Sheets("Renseignement").Range("B25") & " - " & Format(Now, " dd mm yyyy") & ".pdf" 'Nom du stagiaire - type de document - Entreprise - formation - date du jour

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=Chemin & NFichier, Quality _
:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Next Dot

MsgBox "PDF enregistré dans le dossier de formation concerné"
    

End Sub
 

Discussions similaires

Réponses
7
Affichages
892

Statistiques des forums

Discussions
302 248
Messages
2 001 849
Membres
215 341
dernier inscrit
rhad