IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lire dans un pdf et modifier le nom du pdf en fonction du texte rechercher


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Lire dans un pdf et modifier le nom du pdf en fonction du texte rechercher
    Bonjour,
    Je souhaiterais lire dans un pdf et modifier le nom du pdf en fonction du texte rechercher.

    Je m'explique, j'ai, d'une part, une liste de noms et d'autre part un dossier plein de pdf.

    Je souhaiterais faire tourner un code pour ouvrir chaque pdf, vérifier la présence de l'un de ces noms et, en cas de présence du nom, modifier le nom du pdf en y incluant le nom en question.

    J'ai un code qui fait le boulot, sauf, la lecture dans le pdf et la modification du nom (je pense qu'il faut fermer le pdf et modifier son nom ensuite s'il est ouvert?)


    Quelqu'un voit une solution?



    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 681
    Par défaut
    Salut,

    le renommage du fichier pdf n'est pas un défi, par contre la recherche dans le pdf par un code VBA c'est plus compliqué, utilisant des librairies Acrobat par exemple.

    Est-ce qu'au moins ton pdf est exploitable pour une recherche de mot ? Tu as des exemples de code ici et là sur le web anglophone
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Ce ne sont pas des scannes mais des pdf générés dans lesquels on peut faire du contrôle f par exemple

  4. #4
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 260
    Par défaut
    Bonjour

    on peut lire facilement dans un pdf avec Power Query

    exemple pour récupérer un tableau pris au hasard sur le site de l'INSEE (https://www.insee.fr/fr/statistiques...FTLo1_prod.pdf, page 4)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let
        Source = Pdf.Tables(Web.Contents("https://www.insee.fr/fr/statistiques/fichier/1906517/ENTFRA15g_FTLo1_prod.pdf"), [Implementation="1.3"]),
        Table001 = Source{[Id="Table008"]}[Data]
    in
        Table001
    Stéphane

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Comment je l'intègre dans mon code vba et comment gérer la recherche d'un mot donné?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Je crains que la solution ne s'applique pas à un pdf "texte" dans lequel chercher un mot un peu comme par un controle f? Cette solution ne s'applique t elle pas uniquement aux fichiers pdf comportant des tableaux?

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 197
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    Je m'explique, j'ai, d'une part, une liste de noms et d'autre part un dossier plein de pdf.
    La liste de noms se trouve où ? Dans un tableau structuré ?
    On pourrait mettre l'ensemble des noms des fichiers du dossier plein de pdf dans un tableau structuré aussi avec le chemin et le nom du PDF et une colonne avec le nom modifié.
    Faire une requête qui vient lire tous les noms de cette liste et chercher pour chaque pdf si un des noms de la liste des noms est présent et modifier alors le nom du fichier PDF si un des noms est trouvé

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    La liste de noms se trouve où ? Dans un tableau structuré ?
    On pourrait mettre l'ensemble des noms des fichiers du dossier plein de pdf dans un tableau structuré aussi avec le chemin et le nom du PDF et une colonne avec le nom modifié.
    Faire une requête qui vient lire tous les noms de cette liste et chercher pour chaque pdf si un des noms de la liste des noms est présent et modifier alors le nom du fichier PDF si un des noms est trouvé
    Je crois comprendre que cela correspond bien à ce que je veux faire.
    J'ai procédé en rentrant tous les noms dans une variable tableau et j'en suis à chercher les nom dans les pdf avec et je comptais fermer le pdf et renommer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fermer_Un_Programme (Acrobat.exe)
     
         Name Fichier As Dossier & ENSTAB(i) - Fichier
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fermer_Un_Programme (Acrobat.exe)
    =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Fermer_Un_Programme(Prog As String)
    Dim StrComputer As String, objWMIService As Object
    StrComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!" & StrComputer & "rootcimv2")
    Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" & Prog & "'")
    For Each objProcess In colProcessList
    objProcess.Terminate
    Next
     
    End Sub

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Je me disais, peut-être bêtement, qu'il me manque ma brique de lecture dans le pdf pour chercher un nom donner dans ma boucle et s'il est trouver, renommer le fichier avec le nom cherché et trouvé

  10. #10
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 260
    Par défaut
    Bonjour

    Un exemple qui ne répond pas exactement à votre besoin mais dont vous pouvez vous inspirer

    Les factures éditées en pdf dans mon système de facturation sont déversées dans un dossier mais le nom donnés automatiquement est du type chrono date + heure d'édition. J'aimerai avoir le n° de facture à la place

    Je me retrouve donc avec des factures ayant comme nom : 20230315_145030.pdf
    Dans les pdf, le n° de facture est en ligne 1 de la page 1 (mais je ne connais pas le n° de colonne) je sais juste que ça commence par "Facture" ou par "Avoir"


    j'ai donc créé une requête Power Query nommée "Factures" (en dur, pas en VBA)
    en rouge, le choix de la page 1, de la ligne 1, et recherche du n° de facture ou d'avoir - A adapter pour vous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let
        Source = Folder.Files("C:\Temp\Factures"),
        Filtre_pdf = Table.SelectRows(Source, each [Extension] = ".pdf" ),
        Choix_Colonne1 = Table.SelectColumns(Filtre_pdf,{"Content", "Name"}),
        Contenu_Page1 = Table.AddColumn(Choix_Colonne1, "Personnalisé", each Pdf.Tables([Content]){[Name="Page001"]}[Data]{0}),
        Recherche_numéro = Table.AddColumn(Contenu_Page1, "Nouveau_Nom", each List.Select(Record.FieldValues([Personnalisé]),each Text.StartsWith(_,"Facture") or Text.StartsWith(_,"Avoir")){0}),
        Nom_Colonne = Table.RenameColumns(Recherche_numéro,{{"Name", "Ancien_Nom"}}),
        Suppression_Erreur = Table.RemoveRowsWithErrors(Nom_Colonne, {"Nouveau_Nom"}),
        Choix_Colonne2 = Table.SelectColumns(Suppression_Erreur,{"Ancien_Nom", "Nouveau_Nom"})
    in
        Choix_Colonne2
    En VBA j'actualise la requête Power Query et je crée une copie des factures avec le bon nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ActiveWorkbook.Connections("Requête*-*Factures").Refresh
     
        For i = 1 To Range("Factures").Rows.Count
            FileCopy "C:/Temp/Factures/" & Range("Factures").Cells(i, 1), "C:/Temp/Factures renommées/" & Range("Factures").Cells(i, 2) & ".pdf"
        Next i
    Attention, "Requête*-*Factures" les * sont des espaces insécables

    Stéphane

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Ca ressemble bien en effet.
    Si je pouvez passer uniquement en VBA ca serait parfait mais sinon je ferai requête +vba

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/01/2022, 10h04
  2. lire un fichier pdf afin de l'inclure dans une base de donnée
    Par arfman dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 15/05/2009, 10h09
  3. ajout d'un element dans une liste et modifier son nom
    Par fibi007 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/04/2008, 17h50
  4. lire un fichier pdf dans un lecteur flash
    Par Totuch dans le forum Intégration
    Réponses: 2
    Dernier message: 14/01/2008, 04h01
  5. Modifier le nom d'un champ dans une requête
    Par Neuromancien2 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 01/10/2007, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo