Suppression ficher après traitement

Résolu/Fermé
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 - 19 mars 2020 à 19:45
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 - 23 mars 2020 à 11:33
Bonjour,

J'ai une macro qui ouvre un fichier pdf sous excel et qui après avoir mis en forme le fichier ouvert sous excel sauvegarde le fichier en pdf sur un autre répertoire.

Je souhaiterais, une fois le fichier traité, celui-ci soit supprimé du répertoire source et passe au suivant…..

Pouvez-vous m'aider svp ?

Option Explicit
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) _
As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess _
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As _
Long, ByVal uExitCode As Long) As Long
Public Const SYNCHRONIZE = &H100000
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Sub copy_data_pdf()
Dim task As Long 'D?claration des variables
Dim handle As Long 'D?claration des variables
Dim result As Long 'D?claration des variables
Dim Pos As Integer 'D?claration des variables
Dim Cel As range 'D?claration des variables
Dim Nom As String 'D?claration des variables
' Ouverture du fichier et Changement du chemin d' adobe program as per your desktop
task = Shell("C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe " & "E:\00-Dossiers Partag?s\00-Dossiers des Projets\54-Pygos\Fichiers traitement\11-Sc?narios ADD\DSG\*.pdf", vbNormalFocus)
handle = OpenProcess(SYNCHRONIZE Or STANDARD_RIGHTS_REQUIRED Or &HFFF, False, task)
Application.Wait Now + TimeValue("00:00:2") ' Attente x seconde(s)
SendKeys "^a", True ' select all using ctrl a
Application.Wait Now + TimeValue("00:00:2") ' Attente x seconde(s)
SendKeys "^c" ' copy all using ctrl c
Application.Wait Now + TimeValue("00:00:2") ' Attente x seconde(s)
Windows("Classeur4.xlsm").Activate ' activation du classeur cible
range("a2").Select
ActiveSheet.Paste
For Each Cel In range("A1:A" & range("A65536").End(xlUp).Row)
Pos = InStr(1, Cel.Text, "/")
If Pos > 2 Then
Nom = Mid(Cel.Text, Pos - 2, 10)
If IsDate(Nom) Then
Cells(Cel.Row, "D") = CDate(Nom)
End If
End If
Next Cel
result = TerminateProcess(handle, 0) ' fermeture du pdf
result = CloseHandle(handle)
'Recherche des dates a incr?menter pour chaque champ de la DSG
For Each Cel In range("A1:A" & range("A65536").End(xlUp).Row)
Pos = InStr(1, Cel.Text, "/")
If Pos > 2 Then
Nom = Mid(Cel.Text, Pos - 2, 10)
If IsDate(Nom) Then
Cells(Cel.Row, "D") = CDate(Nom)
End If
End If
Next Cel
Export_PDF
End Sub
Sub Export_PDF()
Dim chemin As String, fichier As String
chemin = "e:\00-Dossiers Partag?s\00-Dossiers des Projets\54-Pygos\Fichiers traitement\11-Sc?narios ADD\DSG\Result"
fichier = chemin & "\" & range("f2") & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
fichier, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
End Sub

Merci d'avance !


Configuration: Windows / Edge 17.17134
A voir également:

1 réponse

yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 Ambassadeur 1 557
Modifié le 20 mars 2020 à 10:22
bonjour,
merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
tu écris "un fichier", "le fichier", "le fichier", "le fichier": s'agit-il du même fichier? peux-tu expliquer plus clairement, peut-être en nommant les fichiers?
"passer au suivant": peux-tu être plus précis?
ta macro est présente dans quel fichier?
je suppose que, pour le moment, ta macro traite un fichier bien précis, et fait cela correctement.
souhaites-tu améliorer ta macro pour supprimer le fichier traité, et faire tout cela pour plusieurs fichiers?

en analysant un peu plus le code, je me dis qu'un des soucis est que le VBA ne connait pas le nom du fichier en cours de traitement. à moins que le nom du fichier soit présent dans son contenu, comme le nom du fichier destination est présent dans son contenu?
l'autre technique serait, au lieu d'utiliser * pour ouvrir un fichier, de découvrir le nom du fichier à ouvrir, de le spécifier, puis de le supprimer.
1
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 21
20 mars 2020 à 12:14
Bonjour, yb_be,

Je souhaite en effet améliorer ma macro pour supprimer le fichier traité, et faire tout cela pour plusieurs fichiers?

Actuellement, je prends le fichier traité et je le supprime.

Exemple :

Test1.pdf
Test2.pdf
Test3.pdf
Test10.pdf

La macro traite les fichiers ci-dessus par ordre croissant....

Test1.pdf
Test10.pdf
Test2.pdf
Test3.pdf

Cordialement,
0
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 1 557 > PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023
Modifié le 20 mars 2020 à 12:49
le nom du fichier source est-il présent dans son contenu, comme le nom du fichier destination est présent dans le contenu du fichier source?
0
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 21 > yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024
20 mars 2020 à 16:15
Actuellement la macro est lancée depuis un fichier nommé pdf_Vers_Excel.xlsm


La macro prend le 1er fichier pdf trouvé dans le répertoire DSG , ceci par ordre alphabétique.


Les données du fichier ouvert, Test1.pdf sous adobe sont collés dans la colonne A du modèle Classeur4.xlsm

Ensuite une copie du modèle est enregistrée, avec comme nom de fichier (info dans cellule F2), sous le répertoire Recup, pour un autre traitement ultérieur.

Le traitement fini du 1er fichier, je souhaite :

1. supprimer le fichier traité sous le répertoire DSG (Test1.pdf) et,

2. relancer la macro autant de fois, que le répertoire DSG contient des fichiers pdf.

Merci D'avance !
0
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 1 557 > PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023
20 mars 2020 à 17:53
essayons ceci:
remplacer
task = Shell("C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe " & "E:\00-Dossiers Partag?s\00-Dossiers des Projets\54-Pygos\Fichiers traitement\11-Sc?narios ADD\DSG\*.pdf", vbNormalFocus)

par
Dim fichiersource As String, dossiersource as string
dossiersource= _
    "E:\00-Dossiers Partag?s\00-Dossiers des Projets\54-Pygos\Fichiers traitement\11-Sc?narios ADD\DSG\"
fichiersource = Dir(dossiersource + "*.pdf")
Do While fichiersource <> ""
    task = Shell("C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe " & _
        dossiersource + fichiersource , vbNormalFocus)

et ajouter ceci avant
End Sub
:
    kill (dossiersource + fichiersource)
    fichiersource=dir()
loop
0
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 21 > yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024
20 mars 2020 à 18:20
Merci yg_be, je teste cela dès Lundi….


Bon Weekend !
0