Faire une boucle pour creer des pdf

Signaler
Messages postés
5
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
6 juin 2014
-
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
-
Bonjour,
J'ai un document Word qui contient une liste de documents Word à mettre en PDF. Je ne suis pas trop douée avec les macros dans Word. Donc pour faire un fichier c'est bon, mais comment traiter du premier au dernier.
Merci à vous pour vos réponses.

6 réponses

Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
344
Bonjour,

J'ai un document Word qui contient une liste de documents Word à mettre en PDF.
Sous quelle forme ?
Un document par ligne ?
Il y a le chemin complet pour accéder au document ou uniquement son nom (et dans ce cas, les documents sont tous dans un même dossier ?)

pour faire un fichier c'est bon,
C'est à dire ?
Pour ouvrir le premier document de ta liste ? ou bien pour Convertir en PDF UN document ?

mais comment traiter du premier au dernier.
Comme dans à peu prêt tous les cas de ce genre ( word ou autre...)... via une boucle .

un truc du genre :
Public Sub LectureDocLinePerLine()
    NomFichierAConvertir  as String
    Dim doc As Document
    Set doc = ActiveDocument
    Dim paras As Paragraphs
     Set paras = doc.Paragraphs
    Dim para As Paragraph
    Dim sents As Sentences
    Dim sent As Range
    For Each para In paras
        Set sents = para.Range.Sentences
        For Each sent In sents
            Debug.Print sent.Text
           
            NomFichierAConvertir = sent.Text
            '---------------
            ' Ici ton  code pour ouvrir tes
            ' fichiers... les convertir..etc...
            '---------------
        Next
    Next
End Sub

Messages postés
5
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
6 juin 2014

Bonjour,
Merci pour votre réponse rapide.
Les documents sont tous dans le même dossier.
Dans le premier document, il y a bien un document par ligne.
Je vais essayer votre code cet après-midi.
Encore merci
Messages postés
5
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
6 juin 2014

Bonsoir,
J'ai essayé le code, mais j'avais un problème dès la 1ere ligne:
 NomFichierAConvertir  as String
Instruction incorrecte à l'intérieur d'un bloc de type, donc j'ai supprimé la ligne et j'ai pu avancer.
Maintenant je suis en err 5174 fichier introuvable alors que le chemin et le nom du fichier sont corrects.
Si je mets le nom du fichier en clair dans la macro cela fonctionne, sinon ça ne fonctionne pas alors que la variable est bonne.

J'ai essayé de regarder dans l'aide et fait différents essais mais le résultat reste le même.
D'avance merci pour votre aide
Bonne soirée
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
344
L'image est trop petite pour que je puisse y lire quoi que ce soit.
Il faudrait la poster sur un autre site (de dépose de fichier) ou refaire un imprime écran en zoomant sur ce que vous souhaitez nous montrer...

Il se peut que le nom du fichier (dans votre liste) contienne des espaces.. ou autre caractère "bizarre".

il est possible de supprimer les espaces (s'ils existent) en début et fin de texte.
 NomFichierAConvertir = Trim(sent.Text)


Ensuite, il faudrait que vous lanciez votre code en mode pas à pas pour voir si les variables sont bonnes.
vous pouvez aussi, pour gérer les éventuelles erreurs, ajouter un petit test sur l'existence du fichier.
Function FileThere(FileName As String) As Boolean
    FileThere = (Dir(FileName) > "")
End Function


Et ajouter dans votre code :
If FileThere(NomFichierAConvertir ) Then
    '
   ' Ici ton  code pour ouvrir tes
    ' fichiers... les convertir..etc..
    '
Else
    MsgBox "Le fichier n'existe pas ! " & NomFichierAConvertir 
End If
Messages postés
5
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
6 juin 2014

Bonjour,
Merci pour votre aide.
Je n'y arrive toujours pas. Le fichier est le bon mais la longueur s'affiche à 12! alors qu'elle n'est que de 11.
Est-ce que je peux faire un truc comme ça (qui me donne une erreur ) :
 NomFichierAConvertir = Trim(sent.Text).Substring(1, 11)
Macro ci-dessous
Sub Relance()
'
' Relance Macro
'
'
'NomFichierAConvertir As String
Dim doc As Document
Set doc = ActiveDocument
Dim paras As Paragraphs
Set paras = doc.Paragraphs
Dim para As Paragraph
Dim sents As Sentences
Dim sent As Range


ChangeFileOpenDirectory "E:\Relance\"
ActiveDocument.SaveAs2 Filename:="NOPIECE.docm", FileFormat:= _
wdFormatXMLDocumentMacroEnabled, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=False, SaveAsAOCELetter:=False, CompatibilityMode:=15

For Each para In paras

Set sents = para.Range.Sentences

For Each sent In sents
Debug.Print sent.Text
NomFichierAConvertir = Trim(sent.Text)
ChangeFileOpenDirectory "E:\Relance\pieces\"
MsgBox " Fichier " & NomFichierAConvertir
MsgBox "Longueur" & Len(NomFichierAConvertir)
' ne Fonctionne pas
'Documents.Open Filename:=NomFichierAConvertir, ConfirmConversions:=False, _
'ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
'PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
'WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=1252
' Fonctionne
Documents.Open Filename:="R000451.TXT", ConfirmConversions:=False, _
ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=1252

If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Font.Size = 14
Selection.TypeText Text:="PIN"
Selection.InsertSymbol Font:="+Corps", CharacterNumber:=199, Unicode:=True
Selection.TypeText Text:="ON S.A.S"
Selection.TypeParagraph
Selection.Font.Size = 12
Selection.TypeText Text:="8, rue de la Vacquerie"
Selection.TypeParagraph
Selection.TypeText Text:="75011 Paris"
Selection.TypeParagraph
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.EscapeKey
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
NomFichierAConvertir, ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
True, UseISO19005_1:=False
ActiveDocument.Close
Windows("NOPIECE").Activate


MsgBox " Fichier inexistant " & NomFichierAConvertir

Next
Next
ActiveDocument.Close
End Sub
C'est juste un fichier "Nopiece.txt" qui contient des no de relances clients "R000451.TXT", "R000482.TXT" .. sur lesquels je fais une mise en page avec ajout d'une entête et PDF pour envoi par mail en auto par la suite (ma macro en VBA est déjà faite heureusement!!!).
Encore merci
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
344
substring en VBA ??
Cette commande n'existe pas.

Sub test()

Dim str As String
str = "ceci est un test !  "

'Suppression des espaces avant et apres la chaine
str = Trim(str)
Debug.Print str

'suppression du dernier caractère
str = Left(str, Len(str) - 1)
Debug.Print str

End Sub


Messages postés
5
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
6 juin 2014

C'est super, ça a fonctionné.
J'ai supprimé le dernier caractère.
Encore merci, je vais pouvoir avancé dans mon projet.
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
344
Bonjour,
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane