Suppression ficher après traitement [Résolu]

Signaler
Messages postés
172
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
23 mars 2020
-
yg_be
Messages postés
10153
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 mars 2020
-
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

Messages postés
10153
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 mars 2020
572
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.
PYGOS69
Messages postés
172
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
23 mars 2020
2 > yg_be
Messages postés
10153
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 mars 2020

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 !
yg_be
Messages postés
10153
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 mars 2020
572 > PYGOS69
Messages postés
172
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
23 mars 2020

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
PYGOS69
Messages postés
172
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
23 mars 2020
2 > yg_be
Messages postés
10153
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 mars 2020

Merci yg_be, je teste cela dès Lundi….


Bon Weekend !
PYGOS69
Messages postés
172
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
23 mars 2020
2 > yg_be
Messages postés
10153
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 mars 2020

Bonjour yg_be,

Merci !! C'est magique ????
Bonne journée !
yg_be
Messages postés
10153
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 mars 2020
572 > PYGOS69
Messages postés
172
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
23 mars 2020

parfait, peux-tu alors marquer la discussion comme résolue?