Suppression ficher après traitement

Résolu
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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   Statut Membre Dernière intervention   21
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   21 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   21 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci yg_be, je teste cela dès Lundi….


Bon Weekend !
0