OVH Cloud OVH Cloud

PDFCreator, VBA, FSO et les profils utilisateurs

5 réponses
Avatar
J-Pierre
Bonjour tout le monde,

WIN XP SP2, Access XP 2002.

PDFCreator installe un fichier PDFCreator.ini dans le répertoire:
C:\Documents and Settings\Jean-Pierre\Application Data\PDFCreator
qui est celui du compte administrateur utilisé pendant l'installation.

Pour créer mes PDF sans intervention de l'utilisateur, je modifie dynamiquement ce fichier en VBA et en utilisant
FileSystemObject:

Set Fso = CreateObject("Scripting.FileSystemObject")
etc.....

Tout ça se passe très bien, mais quand je me connecte comme un utilisateur lambda avec des droits réduits, plus moyen
d'accéder à ce répertoire et à ce fichier, bien que j'ai mis des options de partage sur le répertoire (pas sur les parents) et
les autorisations nécessaires sur le fichier.

Comme dab, si vous avez une idée brillante....
Merci
J-Pierre

5 réponses

Avatar
Salut

je n'ai plus le logiciel installé mais je suis surpris que le fichier ini ne soit pas installé dans
c:Documents and SettingsAll Users...

Il n'y a pas moyen de forcer un autre dossier pour l'emplacement du fichier ini, genre all users, windows ou un dossier déclaré dans
les variables d'environnement Path ?
(Tu veux dire qu'il y a 1 fichier ini par utilisateur ?...)

hum étrange ça...
pour l'idée brillante, il va falloir patienter...

a+
Arnaud

"J-Pierre" a écrit dans le message de news:
Bonjour tout le monde,

WIN XP SP2, Access XP 2002.

PDFCreator installe un fichier PDFCreator.ini dans le répertoire:
C:Documents and SettingsJean-PierreApplication DataPDFCreator
qui est celui du compte administrateur utilisé pendant l'installation.

Pour créer mes PDF sans intervention de l'utilisateur, je modifie dynamiquement ce fichier en VBA et en utilisant
FileSystemObject:

Set Fso = CreateObject("Scripting.FileSystemObject")
etc.....

Tout ça se passe très bien, mais quand je me connecte comme un utilisateur lambda avec des droits réduits, plus moyen d'accéder à
ce répertoire et à ce fichier, bien que j'ai mis des options de partage sur le répertoire (pas sur les parents) et les
autorisations nécessaires sur le fichier.

Comme dab, si vous avez une idée brillante....
Merci
J-Pierre




Avatar
J-Pierre
Salut,

J'ai eu l'idée brillante, enfin, je crois.....

Le fichier ini de PDFCretor n'est pas installé dans "All Users", mais dans le répertoire de l'utilisateur qui installe. Je
l'ai réinstallé, pas de paramétrage pour ce dossier.

La solution consiste donc à copier le répertoire de PDFCreator et le fichier ini dans le profil de chaque utilisateur qui
utilisera PDFCreator, puis à adapter ce fichier, et à ajouter un peu de code VBA à l'exécution.

Je prends un exemple en détaillant pour ceux qui ne seraient pas trop familiers: J'ai un utilisateur Jean-Pierre avec les
droits administrateurs et un utilisateur Lambda avec des droits limités.

J'installe comme Jean-Pierre, je me retrouve avec un répertoire:
C:Documents and SettingsJean-PierreApplication DataPDFCreator
qui contient le fichier PDFCreator.ini

Ensuite, je copie ce répertoire et son fichier dans le profil de l'utilisateur Lambda. J'ai un nouveau répertoire:
C:Documents and SettingsLambdaApplication DataPDFCreator
qui contient une copie du fichier ini.

J'édite ce fichier ini, et je modifie la ligne suivante, qui correspond sans doute au dossier de travail:
PrinterTemppath=C:Documents and SettingsJean-PierreLocal SettingsTempPDFCreator
en:
PrinterTemppath=C:Documents and SettingsLambdaLocal SettingsTempPDFCreator

Enfin, dans le code VBA, pour aller bidouiller dans le bon fichier ini, je récupère la variable d'environnement USERPROFILE
qui me retourne soit:
C:Documents and SettingsJean-Pierre
soit
C:Documents and SettingsLambda

Si vous êtes intéressés, je publie le code, sinon, je retourne voir les J.O.

J-Pierre




<Anor> a écrit dans le message de news: 43ef0f90$0$1247$
Salut

je n'ai plus le logiciel installé mais je suis surpris que le fichier ini ne soit pas installé dans
c:Documents and SettingsAll Users...

Il n'y a pas moyen de forcer un autre dossier pour l'emplacement du fichier ini, genre all users, windows ou un dossier
déclaré dans les variables d'environnement Path ?
(Tu veux dire qu'il y a 1 fichier ini par utilisateur ?...)

hum étrange ça...
pour l'idée brillante, il va falloir patienter...

a+
Arnaud

"J-Pierre" a écrit dans le message de news:
Bonjour tout le monde,

WIN XP SP2, Access XP 2002.

PDFCreator installe un fichier PDFCreator.ini dans le répertoire:
C:Documents and SettingsJean-PierreApplication DataPDFCreator
qui est celui du compte administrateur utilisé pendant l'installation.

Pour créer mes PDF sans intervention de l'utilisateur, je modifie dynamiquement ce fichier en VBA et en utilisant
FileSystemObject:

Set Fso = CreateObject("Scripting.FileSystemObject")
etc.....

Tout ça se passe très bien, mais quand je me connecte comme un utilisateur lambda avec des droits réduits, plus moyen
d'accéder à ce répertoire et à ce fichier, bien que j'ai mis des options de partage sur le répertoire (pas sur les parents)
et les autorisations nécessaires sur le fichier.

Comme dab, si vous avez une idée brillante....
Merci
J-Pierre








Avatar
"J-Pierre" a écrit dans le message de news: %

Si vous êtes intéressés, je publie le code, sinon, je retourne voir les J.O.


ben personnellement, non, mais vu que tu tombes dans les archives sur des liens bidons en croyant y trouver une réponse ;-),
peut-être qu'un bout de code servira à un développeur en herbe qui en ce moment précis est peut-être encore sur le pot ou
en train de faire la sieste...

a+
Arnaud

Avatar
J-Pierre
Oui Anor,

Face à un enthousiasme aussi débordant, je ne pouvais qu'obtempérer.

Voilà le module complet, suivi du code à insérer dans un formulaire. Il y a peu de temps, j'avais aussi publié des
commentaires sur ce forum pour utiliser PDFCreator, je conseille de les lire aussi, en particulier pour la fonction
PrintToPDFPrinter...
_______________________________________________________
Option Compare Database
Option Explicit

Dim PDFCreatorINIFound As Integer
____________________________________________________
Function VariableEnvironnement(parm As String) As String

Dim EnvString, Indx, PathLen
Dim ix1 As Long, Wtexte As String

VariableEnvironnement = ""

Indx = 1
Do
EnvString = Environ(Indx) ' Extrait la variable d'environnement.
PathLen = Len(Environ(Indx)) ' Extrait la longueur.
If PathLen > Len(parm) Then
If Left(EnvString, Len(parm)) = parm Then
VariableEnvironnement = Right(EnvString, PathLen - Len(parm))
End If
End If
Indx = Indx + 1
Loop Until EnvString = ""

End Function
_______________________________________________________
Function PDFCreatorSetUp(valeur As Integer, nomEtat As String) As String
'valeur = 1 passer en automatique
'valeur = 0 passer en manuel
'nomEtat = nom du fichier à créer sans l'extension .pdf

'La fonction retourne:
'OK si le fichier a été créé
'NO si le fichier n'a pas été créé

Dim Fso, fileTxt
Dim MesDocuments As String, Wchemin As String, Var1 As String, Resultat As String
Dim Wlignes()
Dim ix1 As Integer
Const ForReading = 1, ForWriting = 2, ForAppending = 8

PDFCreatorINIFound = 0
PDFCreatorSetUp = "NO"

If Not IsNumeric(valeur) Or (valeur <> 0 And valeur <> 1) Then
MsgBox "Erreur système, variable 'valeur' invalide", vbOKOnly, "Module PDFCreatorSetUp"
Exit Function
End If

Var1 = "USERPROFILE="
Resultat = VariableEnvironnement(Var1)
'MsgBox Var1 & ":::::" & Resultat & ";;;;;"

If Resultat = "" Then 'variable USERPROFILE non trouvée
Set Fso = Nothing
MsgBox "Erreur système, variable 'USERPROFILE' non trouvée", vbOKOnly, "Module PDFCreatorSetUp"
Exit Function
End If

Set Fso = CreateObject("Scripting.FileSystemObject")

If Not (Fso.FolderExists(Resultat)) Then
Set Fso = Nothing
MsgBox "Erreur système, répertoire " & Resultat & " non trouvé", vbOKOnly, "Module PDFCreatorSetUp"
Exit Function
End If

Wchemin = Resultat & "Application DataPDFCreator"
'MsgBox "Répertoire de PDFCreator: " & vbCrLf & Wchemin

If Not (Fso.FolderExists(Wchemin)) Then
Set Fso = Nothing
MsgBox "Erreur système, répertoire PDFCreator non trouvé", vbOKOnly, "Module PDFCreatorSetUp"
Exit Function
End If

Wchemin = Wchemin & "PDFCreator.ini"
'MsgBox "Fichier PDF INI" & vbCrLf & Wchemin

If Not (Fso.FileExists(Wchemin)) Then
Set Fso = Nothing
MsgBox "Erreur système, fichier PDFCreator.ini non trouvé", vbOKOnly, "Module PDFCreatorSetUp"
Exit Function
End If

'MsgBox "PDFCreator.ini trouvé"

PDFCreatorINIFound = 1

' -------------------trouver le répertoire spécial Mes Documents--------------------

Dim Wsh, WshSystem

Set Wsh = CreateObject("WScript.Shell")
Set WshSystem = Wsh.Environment("SYSTEM")

MesDocuments = Wsh.SpecialFolders("MyDocuments")

Set WshSystem = Nothing
Set Wsh = Nothing

' -------------------------modifier les lignes concernées--------------------------

ix1 = 0
ReDim Wlignes(1000)

Set fileTxt = Fso.OpenTextFile(Wchemin, ForReading, False)
Do While fileTxt.AtEndOfStream <> True
Wlignes(ix1) = fileTxt.ReadLine
If Left(Wlignes(ix1), 12) = "UseAutosave=" Then
Wlignes(ix1) = "UseAutosave=" & valeur
'MsgBox "UseAutosave=" & valeur
End If
If Left(Wlignes(ix1), 21) = "UseAutosaveDirectory=" Then
Wlignes(ix1) = "UseAutosaveDirectory=" & valeur
'MsgBox "UseAutosaveDirectory=" & valeur
End If
If Left(Wlignes(ix1), 17) = "AutosaveFilename=" Then
Wlignes(ix1) = "AutosaveFilename=" & nomEtat
'MsgBox "AutosaveFilename=" & nomEtat
End If
If Left(Wlignes(ix1), 18) = "AutosaveDirectory=" Then
Wlignes(ix1) = "AutosaveDirectory=" & MesDocuments
'MsgBox "AutosaveDirectory=" & MesDocuments
End If
' If Left(Wlignes(ix1), 26) = "PDFDisallowModifyContents=" Then
' Wlignes(ix1) = "PDFDisallowModifyContents=" & valeur
'MsgBox "PDFDisallowModifyContents=" & valeur
' End If
ix1 = ix1 + 1
Loop
fileTxt.Close

ReDim Preserve Wlignes(ix1 - 1)
Set fileTxt = Nothing

Set fileTxt = Fso.GetFile(Wchemin)
Fso.DeleteFile (fileTxt)
Set fileTxt = Nothing

Set fileTxt = Fso.OpenTextFile(Wchemin, ForWriting, True)
For ix1 = 0 To UBound(Wlignes, 1)
fileTxt.WriteLine (Wlignes(ix1))
Next
fileTxt.Close

Set fileTxt = Nothing
Set Fso = Nothing

PDFCreatorSetUp = "OK"

End Function
______________________________________
Function PrintToPDFPrinter(rptToPrint As String)

'Private Sub imprimerPDF_Click()
'Call PrintToPDFPrinter("MonEtat")
'End Sub

Dim rpt1 As Report, rpt2 As Report
Dim prtLoop As Printer
Dim rptPrinter As String, Wfound As Boolean
rptPrinter = "E900_ImprimantePDF"

If PDFCreatorINIFound = 0 Then
MsgBox "PDFCreator n'est pas installé sur cet ordinateur", vbOKOnly, "Module PrintToPDFPrinter"
Exit Function
End If

Wfound = False

For Each prtLoop In Application.Printers
With prtLoop
If .DeviceName = "PDFCreator" Then
Wfound = True
End If
End With
Next prtLoop

If Wfound = False Then
MsgBox "Pas d'imprimante PDFCreator définie sur cet ordinateur", vbOKOnly, "Module PrintToPDFPrinter"
Exit Function
End If

DoCmd.OpenReport rptToPrint, acViewDesign, , , acHidden
DoCmd.OpenReport rptPrinter, acViewPreview, , , acHidden

Set rpt1 = Reports(rptToPrint)
Set rpt2 = Reports(rptPrinter)

rpt1.PrtDevNames = rpt2.PrtDevNames

DoCmd.Close acReport, rptPrinter, acSaveNo
DoCmd.OpenReport rptToPrint, acNormal
DoCmd.Close acReport, rptToPrint, acSaveNo

End Function
________________________________________________________
Dans le formulaire
________________________________________________________
....
...
'supprimer le fichier s'il existe
Call DeleteFile(Wchemin)

'passer PDFCretor en mode automatique
Wretour = PDFCreatorSetUp(1, Wshort) 'nom du fichier PDF sans l'extension .PDF

'est-ce que ça c'est bien passé ?
If Wretour <> "OK" Then
MsgBox "Erreur système, le fichier PDF n'a pas été créé", vbOKOnly, "ENVOI D'UN FICHIER PDF PAR MAIL"
Exit Sub
End If

'Créer le fichier PDF à partir d'un état Access
Call PrintToPDFPrinter(stDocName)

'Attendre que le fichier PDF soit créé (Access n'attend pas)
Dim Fso
Set Fso = CreateObject("Scripting.FileSystemObject")
Do While Not (Fso.FileExists(Wchemin))
Call Temporisation(300)
Loop
Set Fso = Nothing

'terminé, passer PDFCreator en mode manuel
Call PDFCreatorSetUp(0, Wshort)
_______________________________________________
Avatar
Merci l'ami !

a+
Arnaud

"J-Pierre" a écrit dans le message de news: %23$cLad$
Oui Anor,

Face à un enthousiasme aussi débordant, je ne pouvais qu'obtempérer.

Voilà le module complet, suivi du code à insérer dans un formulaire. Il y a peu de temps, j'avais aussi publié des commentaires
sur ce forum pour utiliser PDFCreator, je conseille de les lire aussi, en particulier pour la fonction PrintToPDFPrinter...