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
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 SubCdlt,
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 SubCa 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 SubRe,
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 SubEn fait, l'intérêt de garder les noms est limité ensuite... C'était surtout pour décorer
Re,
tout parfait comme je le voulais!
Un grand merci a toi 3GB!!!!
Je t'en prie Christophe du Val d'Oise !
Bonne continuation !