Impression en pdf: Nommer les documents a partir d'une liste

Bonjour à tous,

je me présente, Christophe 40 ans de la région parisienne.

Je suis un utilisateur régulier d'Excel et je me suis mis a utiliser les macros pour automatiser mes fichiers.

J'utilise beaucoup les forums pour m'aider dans mes créations et cela fonctionne plutôt bien mais la je sèche!!!

Je vous explique mon problème et si quelqu'un peut m'aider a créer ma macro.

Dans mon fichier, j'ai 2 onglets, l'un se nomme Data et l'autre Temoin BAC.

dans l'onglet Data, je recoupe via d'autres macro si des fichiers sont déjà existant (via le nom de ceux-ci) a partir d'une liste.

La liste se situe colonne A, en colonne B, je détermine si je dois créer et en colonne C, les fichier a créer ont leur futur nom et ceux existant sont vide.

Ce que je souhaite faire, c'est pour chaque cellule non vide entre C2 et C50 prendre le texte de cette cellule et réaliser un fichier PDF de l'onglet Temoin BAC vers un dossier précis.

Je vous joins mon fichier.

Merci d'avance pour vos retours.

Christophe

20test.xlsm (19.94 Ko)

Bonjour Christophe du Val d'Oise ,

C'est encore assez vague car on a pas les dossiers en question...

J'ai l'impression qu'une seule colonne pourrait suffire avec les noms complets des fichiers (emplacement + nom). On pourrait alors directement tester si le fichier existe et sinon, exécuter la macro d'édition de PDF.

Voici cependant une proposition de code avec uniquement des chemins complets en colonne A :

Sub parcourir()

Dim t()

With Sheets("Data") 'avec feuille Data
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row 'dern ligne
    For i = 2 To dl 'de la ligne 2 à la fin
        If Dir(.Cells(i, 1).Value) = "" Then 'si fichier n'existe pas
            n = n + 1: ReDim Preserve t(1 To n, 1 To 2) 'incrementation et redimension tableau stockage
            t(n, 1) = .Cells(i, 1).Value 'stocke nom fichier
            t(n, 2) = "OK" 'stocke ok
            Call EditionPDF(.Cells(i, 1).Value) 'enregistre le PDF au nom de ce fichier
        End If
    Next i
    .Range("A2:B" & dl).ClearContents 'efface données
    If n > 0 Then .Cells(2, 1).Resize(n, 2).Value = t 'si création, on les affiche
End With

End Sub

Sub EditionPDF(chemin$) 'édition pdf à améliorer éventuellement
Sheets("Temoin Bac").ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin, ignoreprintareas:=False
End Sub

Cdlt,

Bonjour 3GB,

merci beaucoup pour ton retour!

Cela répond a mon besoin, j'ai adapté mon fichier pour que cela fonctionne avec ta proposition.

Par contre, j'ai une erreur d'exécution 9 qui se produit après avoir créé le premier PDF sur la ligne en rouge ci dessous.

Si tu peux m'aider pour ce problème ca serai top!

Merci par avance et bonne journée!

Sub parcourir()

Dim t()

With Sheets("Data") 'avec feuille Data
dl = .Cells(.Rows.Count, 1).End(xlUp).Row 'dern ligne
For i = 2 To dl 'de la ligne 2 à la fin
If Dir(.Cells(i, 1).Value) = "" Then 'si fichier n'existe pas
n = n + 1: ReDim Preserve t(1 To n, 1 To 2) 'incrementation et redimension tableau stockage
t(n, 1) = .Cells(i, 1).Value 'stocke nom fichier
t(n, 2) = "OK" 'stocke ok
Call EditionPDF(.Cells(i, 1).Value) 'enregistre le PDF au nom de ce fichier
End If
Next i
.Range("A2:B" & dl).ClearContents 'efface données
If n > 0 Then .Cells(2, 1).Resize(n, 2).Value = t 'si création, on les affiche
End With

End Sub

Bonjour,

C'est une erreur de ma part, j'ai apporté une modification en manquant d'assiduité dans mes contrôles. Voici un nouvel essai :

Sub parcourir()

Dim t()

With Sheets("Data") 'avec feuille Data
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row 'dern ligne
    if dl < 2 then exit sub
    redim t(1 to dl - 1, 1 to 2)
    For i = 2 To dl 'de la ligne 2 à la fin
        If Dir(.Cells(i, 1).Value) = "" Then 'si fichier n'existe pas
            n = n + 1
            t(n, 1) = .Cells(i, 1).Value 'stocke nom fichier
            t(n, 2) = "OK" 'stocke ok
            Call EditionPDF(.Cells(i, 1).Value) 'enregistre le PDF au nom de ce fichier
        End If
    Next i
    .Range("A2:B" & dl).ClearContents 'efface données
    If n > 0 Then .Cells(2, 1).Resize(n, 2).Value = t 'si création, on les affiche
End With

End Sub

Sub EditionPDF(chemin$) 'édition pdf à améliorer éventuellement
Sheets("Temoin Bac").ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin, ignoreprintareas:=False
End Sub

Ca devrait être mieux maintenant.

Au cas où, pour poster du code, tu peux utiliser l'icône </> qui se trouve sur le ruban de commentaire.

Cdlt,

merci 3GB,

la macro boucle bien, mais j'ai encore un petit soucis.

Cela me créé un fichier même si il en existe déjà un.

Merci encore de ton aide pour ce dernier point.

Christophe du val d'Oise

En principe non. Il faut bien définir le chemin complet comme je l'ai indiqué sur mon premier commentaire. Il y a d'abord vérification de l'existence et création si le fichier n'est pas trouvé dans le répertoire renseigné.

Si tu ne renseignes pas de répertoire, le fichier est créé dans le dossier courant car il a moins de chance d'y exister déjà...

Au top 3GB,

ca fonctionne parfaitement, j'ai ajouté l'extension .pdf qui n'étais pas dans mes premiers essais!

Dernière petite question, dans la macro on supprime les lignes si les références sont déjà existante. Si je souhaite les conserver dans mon fichier que dois-je faire?

J'ai inhibé les 2 dernières lignes du code mais cela me supprime également les OK en colonne B

Sub crea_pdf()

Dim t()

With Sheets("Data") 'avec feuille Data
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row 'dern ligne
    If dl < 2 Then Exit Sub
    ReDim t(1 To dl - 1, 1 To 2)
    For i = 2 To dl 'de la ligne 2 à la fin
        If Dir(.Cells(i, 1).Value) = "" Then 'si fichier n'existe pas
            n = n + 1
            t(n, 1) = .Cells(i, 1).Value 'stocke nom fichier
            t(n, 2) = "OK" 'stocke ok
            Call EditionPDF(.Cells(i, 1).Value) 'enregistre le PDF au nom de ce fichier
        End If
    Next i
    '.Range("A2:B" & dl).ClearContents 'efface données
   '  If n > 0 Then .Cells(2, 1).Resize(n, 2).Value = t 'si création, on les affiche
End With

End Sub

Sub EditionPDF(chemin$) 'édition pdf à améliorer éventuellement
Sheets("Temoin Bac").ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin, ignoreprintareas:=False
End Sub

Re,

Alors, normalement, ce code devrait suffire :

Sub crea_pdf()

With Sheets("Data") 'avec feuille Data
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row 'dern ligne
    If dl < 2 Then Exit Sub
    For i = 2 To dl 'de la ligne 2 à la fin
        If Dir(.Cells(i, 1).Value) = "" Then 'si fichier n'existe pas
            Call EditionPDF(.Cells(i, 1).Value) 'enregistre le PDF au nom de ce fichier
        End If
    Next i
    .range("B2:B" & dl).value = "OK"
End With

End Sub

Sub EditionPDF(chemin$) 'édition pdf à améliorer éventuellement
Sheets("Temoin Bac").ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin, ignoreprintareas:=False
End Sub

En fait, l'intérêt de garder les noms est limité ensuite... C'était surtout pour décorer ! Il y a de toute façon un test d'existence du fichier qui prévaut sur le pointage sur le fichier (car ensuite, Excel ne sait pas si on déplace ou supprime un fichier). Le mieux serait de tout prendre et tout mettre ailleurs...

Re,

tout parfait comme je le voulais!

Un grand merci a toi 3GB!!!!

Je t'en prie Christophe du Val d'Oise !

Bonne continuation !

Rechercher des sujets similaires à "impression pdf nommer documents partir liste"