Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA et macro complémentaire

8 réponses
Avatar
sunburn
Bonjour,
j'ai peut être trouvé ma solution à ma sauvegarde en PDF.
J'ai trouvé une macro complémentaire, sur le site de verity.net

après tests sur un classeur bidon, je voudrais bien l'insérer dans mon
classeur.

le hic, c'est que mon classeur est fait pour s'exécuter sur plusieurs postes
différents. Ne voulant pas faire la manip "outils/macros complémentaires/
..." à chaque fois, j'ai mis cette macro dans un répertoire qui existe sur
tous mes PC :
"C:\Documents and Settings\All Users\Modèles"

De plus, j'ai ma barre d'outils Personnel, donc je ne veux pas le bouton
d'action qui est proposé.

J'ai un userform qui me gère l'impression (4 choix au niveau des pages à
imprimer), et je voudrais que l'action puisse s'executer à partir de ce
userform, en cliquant sur un bouton PDF.

Donc mes questions sont :
- comment automatiser l'appel d'une macro complémentaire au démarrage de mon
classeur ?
- comment appeler une macro complémentaire à partir d'un bouton de commande
d'un userform ?

Je vous remercie de votre aide.

YANN

8 réponses

Avatar
sunburn
Re,
en fait, ça ne me convient pas, donc je supprime ce message.
Désolé.

Mais je suis toujours à la recherche de pouvoir sauvegarder en PDF des pages
de mon classeur, voir mon classeur en entier.
Merci de votre aide en tout cas.

YANN
Avatar
Gloops
Bonjour,

Que donne PrintToPdf ?

Il faut que ce soit sur un environnement où on maîtrise la
configuration, de façon à pouvoir dire à PrintToPdf d'impr imer dans un
fichier avec un nom par défaut comportant probablement la date et
l'heure. Parce que bien sûr, si on demande le nom de fichier à
l'utilisateur final, ce n'est pas terrible -du moins si on veut
automatiser l'exploitation du résultat ensuite.

J'ai vu ici, je crois que c'était il y a deux ans, une API permettan t de
sélectionner l'imprimante par défaut. ça reste dépend ant de reconnaître
l'imprimante voulue (PrintToPdf) avec le même intitulé sur tout es les
machines où est utilisée la macro, moyennant quoi ça march e plutôt pas
mal. Après on peut remettre l'imprimante qu'on avait avant par dé faut,
une autre API permet de la connaître (à condition de l'appeler avant
bien sûr).


______________________________________
sunburn a écrit, le 12/06/2009 08:28 :
Re,
en fait, ça ne me convient pas, donc je supprime ce message.
Désolé.

Mais je suis toujours à la recherche de pouvoir sauvegarder en PDF des pages
de mon classeur, voir mon classeur en entier.
Merci de votre aide en tout cas.

YANN


Avatar
MichDenis
Bonjour Sunburn,

A ) Les procédures dans un module standard
B ) Assure toi de récupérer sur le Net une version récente de l'utilitaire à moins que ta
version installée soit elle-même récente.
C ) Quelques trucs à adapter, prend le temps de lire la sub !

D ) je n'ai pas l'auteur de cette procédure.

'-------------------------------------
Sub printtest()
'La feuille active.
a = ActiveSheet.Name
Call printsheetinpdf(Feuil1)
End Sub

'-------------------------------------
Sub printsheetinpdf(shsheet As Object)
Dim pdfjob As Object
Dim SpdFname As String
Dim SpdFpath As String
SpdFname = "denis" & ".pdf" 'Nom du fichier, à adapter
SpdFpath = "C:UsersDMDocuments" ' à adapter
Call killtask("PDFCreator.exe")
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
With pdfjob
If .cstart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = SpdFpath
.cOption("AutosaveFilename") = SpdFname
.cOption("AutosaveFormat") = 0
.cClearCache
End With
shsheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
With pdfjob
.cDefaultprinter = defaultprinter
.cClearCache
Application.Wait (Now + TimeValue("0:00:03"))
.cClose
End With
Set pdfjob = Nothing
End Sub
'-------------------------------------
Sub killtask(sappname As String)
Dim oProclist As Object
Dim oWMI As Object
Dim oProc As Object
Set oWMI = GetObject("winmgmts:")
If IsNull(oWMI) = False Then
Set oProclist = oWMI.InstancesOf("win32_process")
For Each oProc In oProclist
If UCase(oProc.Name) = UCase(sappname) Then
oProc.Terminate (0)
End If
Next oProc
Else
MsgBox "Killing """ & sappname & """ - Can't create WMI Object.", vbOKOnly +
vbCritical, "CloseAPP_B"
End If
Set oProclist = Nothing
Set oWMI = Nothing
End Sub
'-------------------------------------
Avatar
Gloops
MichDenis a écrit, le 12/06/2009 14:57 :
shsheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"



Oops, c'est vrai que j'ai confondu, je crois bien que c'est sous Access
que j'ai eu à gérer ça, en tout cas une application où l'instruction
d'impression n'a pas d'argument ActivePrinter (comme, je viens
d'essayer, Word).
Donc, ma précédente intervention est hors sujet ...
Avatar
MichDenis
Dans Excel, on peut aussi utiliser des lignes de code comme :
A )
Connaître le nom de l'imprimante active :
Msgbox Application.ActivePrinter

B )
Pour déterminer une imprimante pour l'impression d'un fichier
Application.ActivePrinter = "Canon LBP-465 sur LPT1:"

Mais la procédure soumise répond à ce type de question :
'**********************************************
j'essaye d'imprimer un document word en pdf en passant par vb d'excel.
Pour le pdf j'utilise PDFCreator.
Voici le code que j'utilise
DocWord.Application.ActivePrinter = "PDFCreator"
DocWord.Application.PrintPreview = False
DocWord.PrintOut Copies:=1, PrintTofile:=True, OutputFileName:=Chemin & Sheets(i).Name &
".pdf"

Le problème ce pose avec PrintToFile. S'il est à false il m'ouvre une popup pour valider
l'enregistrement.
Comme j'ai une centaine de fichier à faire je souhaite faire "sauter" cette demande. En
mettant PrintToFile à true il ne me demande plus de valider l'enregistrement (ce qui est
super) par contre qd je veux ouvrir le fichier pdf créé il me sort qu'il ne peut l'ouvrir
car le fichier n'est pas supporté ou endommagé.
Quelqu'un aurais t il une idée pour éviter ce problème.
'**********************************************


"Gloops" a écrit dans le message de groupe de discussion :

MichDenis a écrit, le 12/06/2009 14:57 :
shsheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"



Oops, c'est vrai que j'ai confondu, je crois bien que c'est sous Access
que j'ai eu à gérer ça, en tout cas une application où l'instruction
d'impression n'a pas d'argument ActivePrinter (comme, je viens
d'essayer, Word).
Donc, ma précédente intervention est hors sujet ...
Avatar
Gloops
A ce que je comprends, dans l'exemple, avec PrintToFile:=True, c'est
Word qui gère l'ouverture du fichier (en partant du principe que Doc Word
est un objet document Word), et qui le gère mal dirait-on, héla s car ça
simplifierait bien les choses. (Ah, je remarque que dans Word,
l'Intellisense ne reconnaît OutputFileName que si on le cite en prem ier.)

Avec PrintToFile:úlse, c'est PDFCreator qui gère l'ouverture du
fichier. Le prochain truc à lire semble donc être le fichier
C:Program FilesPDFCreatorPDFCreator_french.chm
qui donne des détails sur la façon de paramétrer PDFCreato r, de
l'appeler ...

Il est possible de paramétrer PDFCreator de façon qu'il donne u n nom de
fichier avec la date et l'heure, de préférence au format
année-mois-jour-heure, de façon que le tri alphanumérique donne le
dernier fichier créé, et qu'en l'ouvrant juste après la cr éation on
tombe a priori sur le bon (avec un tri sur le nom, j'imagine que là il
faut recourir à FileSystemObject, à moins de tout charger dans un
tableau pour trier après lecture du répertoire). Il est alors p ossible
dans le code appelant de lui donner un autre nom.

C'est vrai qu'il doit y avoir de quoi s'amuser un peu si on veut
modifier la configuration pendant la macro et la restaurer à la fin,
j'imagine que dans ce cas le profil administrateur peut être né cessaire.

Mais je n'ai pas épuisé les exemples fournis dans le réper toire
pluginsPDFForge
________________________________________
MichDenis a écrit, le 13/06/2009 13:22 :
Dans Excel, on peut aussi utiliser des lignes de code comme :
A )
Connaître le nom de l'imprimante active :
Msgbox Application.ActivePrinter

B )
Pour déterminer une imprimante pour l'impression d'un fichier
Application.ActivePrinter = "Canon LBP-465 sur LPT1:"

Mais la procédure soumise répond à ce type de question :
'**********************************************
j'essaye d'imprimer un document word en pdf en passant par vb d'excel.
Pour le pdf j'utilise PDFCreator.
Voici le code que j'utilise
DocWord.Application.ActivePrinter = "PDFCreator"
DocWord.Application.PrintPreview = False
DocWord.PrintOut Copies:=1, PrintTofile:=True, OutputFileName:=Ch emin & Sheets(i).Name &
".pdf"

Le problème ce pose avec PrintToFile. S'il est à false il m'o uvre une popup pour valider
l'enregistrement.
Comme j'ai une centaine de fichier à faire je souhaite faire "saut er" cette demande. En
mettant PrintToFile à true il ne me demande plus de valider l'enre gistrement (ce qui est
super) par contre qd je veux ouvrir le fichier pdf créé il me sort qu'il ne peut l'ouvrir
car le fichier n'est pas supporté ou endommagé.
Quelqu'un aurais t il une idée pour éviter ce problème.
'**********************************************


Avatar
MichDenis
Merci Gloops pour tes commentaires, j'en prends bonne note.
La réalité est que je n'utilise pas cet utilitaire et ce dernier n'est
pas installé sur mon ordinateur. J'avais eu l'occasion de tester à
une reprise la procédure soumise et elle fonctionne. Cependant,
ma connaissance de cet utilitaire est plutôt limitée.


"Gloops" a écrit dans le message de groupe de discussion :

A ce que je comprends, dans l'exemple, avec PrintToFile:=True, c'est
Word qui gère l'ouverture du fichier (en partant du principe que DocWord
est un objet document Word), et qui le gère mal dirait-on, hélas car ça
simplifierait bien les choses. (Ah, je remarque que dans Word,
l'Intellisense ne reconnaît OutputFileName que si on le cite en premier.)

Avec PrintToFile:úlse, c'est PDFCreator qui gère l'ouverture du
fichier. Le prochain truc à lire semble donc être le fichier
C:Program FilesPDFCreatorPDFCreator_french.chm
qui donne des détails sur la façon de paramétrer PDFCreator, de
l'appeler ...

Il est possible de paramétrer PDFCreator de façon qu'il donne un nom de
fichier avec la date et l'heure, de préférence au format
année-mois-jour-heure, de façon que le tri alphanumérique donne le
dernier fichier créé, et qu'en l'ouvrant juste après la création on
tombe a priori sur le bon (avec un tri sur le nom, j'imagine que là il
faut recourir à FileSystemObject, à moins de tout charger dans un
tableau pour trier après lecture du répertoire). Il est alors possible
dans le code appelant de lui donner un autre nom.

C'est vrai qu'il doit y avoir de quoi s'amuser un peu si on veut
modifier la configuration pendant la macro et la restaurer à la fin,
j'imagine que dans ce cas le profil administrateur peut être nécessaire.

Mais je n'ai pas épuisé les exemples fournis dans le répertoire
pluginsPDFForge
________________________________________
MichDenis a écrit, le 13/06/2009 13:22 :
Dans Excel, on peut aussi utiliser des lignes de code comme :
A )
Connaître le nom de l'imprimante active :
Msgbox Application.ActivePrinter

B )
Pour déterminer une imprimante pour l'impression d'un fichier
Application.ActivePrinter = "Canon LBP-465 sur LPT1:"

Mais la procédure soumise répond à ce type de question :
'**********************************************
j'essaye d'imprimer un document word en pdf en passant par vb d'excel.
Pour le pdf j'utilise PDFCreator.
Voici le code que j'utilise
DocWord.Application.ActivePrinter = "PDFCreator"
DocWord.Application.PrintPreview = False
DocWord.PrintOut Copies:=1, PrintTofile:=True, OutputFileName:=Chemin & Sheets(i).Name &
".pdf"

Le problème ce pose avec PrintToFile. S'il est à false il m'ouvre une popup pour valider
l'enregistrement.
Comme j'ai une centaine de fichier à faire je souhaite faire "sauter" cette demande. En
mettant PrintToFile à true il ne me demande plus de valider l'enregistrement (ce qui est
super) par contre qd je veux ouvrir le fichier pdf créé il me sort qu'il ne peut
l'ouvrir
car le fichier n'est pas supporté ou endommagé.
Quelqu'un aurais t il une idée pour éviter ce problème.
'**********************************************


Avatar
Gloops
MichDenis a écrit, le 15/06/2009 16:30 :
Merci Gloops pour tes commentaires, j'en prends bonne note.
La réalité est que je n'utilise pas cet utilitaire et ce dern ier n'est
pas installé sur mon ordinateur. J'avais eu l'occasion de tester à  
une reprise la procédure soumise et elle fonctionne. Cependant,
ma connaissance de cet utilitaire est plutôt limitée.





Ah, ben tu demandes une idée, je donne ;)