Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Extraire des données d'un pdf et les copier dans excel

gali2

XLDnaute Nouveau
Bonjour
Je souhaiterais rechercher dans toutes les pages d’un PDF les chaînes de caractères spécifiées, extrait le texte entre celles-ci et copie le contenu dans un classeur Excel avec un collage spécial en feuille de calcul XML.

J'ai Adobe Acrobat Pro

ci dessous ma macro que j'utilise


Sub ExtractTextBetweenStringsToXML()
Dim AcroApp As Object
Dim AcroDoc As Object
Dim jsObj As Object
Dim pdfPath As String
Dim textContent As String
Dim startIndex As Long, endIndex As Long
Dim extractedText As String
Dim ws As Worksheet
Dim currentPage As Integer, totalPages As Integer
Dim outputRow As Integer

' Initialiser la feuille cible
Set ws = ThisWorkbook.Sheets(1) ' Modifiez si nécessaire
outputRow = 1 ' Ligne où commencer à écrire dans Excel

' Sélectionner un fichier PDF
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Sélectionnez un fichier PDF"
.Filters.Clear
.Filters.Add "Fichiers PDF", "*.pdf"
If .Show = -1 Then
pdfPath = .SelectedItems(1)
Else
MsgBox "Aucun fichier sélectionné.", vbExclamation
Exit Sub
End If
End With

' Ouvrir Adobe Acrobat
Set AcroApp = CreateObject("AcroExch.App")
Set AcroDoc = CreateObject("AcroExch.PDDoc")

' Charger le fichier PDF
If Not AcroDoc.Open(pdfPath) Then
MsgBox "Impossible d'ouvrir le fichier PDF.", vbCritical
Exit Sub
End If

' Obtenir l'objet JavaScript du PDF
Set jsObj = AcroDoc.GetJSObject
totalPages = AcroDoc.GetNumPages

' Parcourir toutes les pages du PDF
For currentPage = 0 To totalPages - 1
' Extraire le texte de la page actuelle
textContent = jsObj.GetPageNthWordQuads(currentPage, 0)

' Rechercher la chaîne "FICHE N°"
startIndex = InStr(1, textContent, "FICHE N°", vbTextCompare)

' Rechercher la chaîne "CONSIGNES DE SÉCURITÉ"
endIndex = InStr(startIndex, textContent, "CONSIGNES DE SÉCURITÉ", vbTextCompare)

' Vérifier si les deux chaînes sont trouvées
If startIndex > 0 And endIndex > 0 Then
' Extraire le texte entre les deux chaînes
extractedText = Mid(textContent, startIndex, endIndex - startIndex)

' Coller le texte extrait dans Excel
ws.Cells(outputRow, 1).Value = extractedText
outputRow = outputRow + 1
End If
Next currentPage

' Sauvegarder le contenu extrait au format XML
Dim xmlRange As Range
Set xmlRange = ws.UsedRange
xmlRange.Copy
ws.Cells(1, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

MsgBox "Extraction terminée et collée au format XML.", vbInformation

' Nettoyage et fermeture
AcroDoc.Close
AcroApp.Exit
Set AcroApp = Nothing
Set AcroDoc = Nothing
Set jsObj = Nothing
End Sub


Les etapes souhaitées sont les suivante

1. Sélection du fichier PDF

2. Ouverture avec Adobe Acrobat

3. Recherche des chaînes

4. Recherche d'une chaine de caractère et enregistrer la position

5. Recherche d'une 2ème chaine de caractère et enregistrer la position

6. Si les deux chaînes sont trouvées, extraire le texte entre ces deux positions.

7. Coller dans excel la selection avec le collage spécial en format XML.


La macro se déroule mais rien n'est copié
Les 2 positions restent à 0 tout au long de la macro

Est ce quelqu'un aurait une idée

Par avance merci de votre aide

Salutations
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Est-ce que tu traces le texte récupéré pour vérifier qu'il contient quelque chose ?
Perso je ne peux pas tester car pas de Adobe PDF Library. Quelqu'un en aurait une ?
 
Dernière édition:

jurassic pork

XLDnaute Occasionnel
Hello,
Il est bien gentil kiki29 mais même en visionnant ses tutos cela ne va pas je pense résoudre le problème de gali2. gali2 il faut que tu regardes le texte que tu extrais du pdf en mettant un :
VB:
Debug.Print textcontent
juste après l'extraction de textcontent et vérifier alors que :
1 - textcontent contient bien le contenu de la page PDF
2 - Le FICHE N° ait les mêmes caractères que la chaîne que tu compares car parfois l'espace n'a pas la même valeur.
3 - même chose pour CONSIGNES DE SÉCURITÉ et en particulier là vérifier les accents.

Ami calmant, J.P
 

gali2

XLDnaute Nouveau
Bonjour à tous
Merci pour vos reponses
J'essais de faire un extract au boulot d'un bout du ficher pour pouvoir vous le transferer et je verifierai tous les conseils que vous m'avez fournis
Par avance merci
Pour info j'ai essayé avec les macro de la liste des contributions ça n'a pas fonctionné
Bonne soirée
 

Dudu2

XLDnaute Barbatruc
Pour info il 2 ressources qui permettent de récupérer du texte d'un PDF au besoin, pour ceux qui n'ont pas les librairies d'Adobe Pro ou veulent essayer autre chose.
 
Dernière édition:

kiki29

XLDnaute Barbatruc
Salut, datant de 2019 voir ici
 

gali2

XLDnaute Nouveau
Salut, datant de 2019 voir ici
Re, un échantillon de fichier PDF ( sans données confidentielles ) serait le bienvenu pour essai.
Bonjour
J'ai recupéré 1 pdf et un excel d'exemple pour monter l'etat dans le pdf et l'etat attentu dans l'excel
J'ai pas eu le temps d'essayer vos conseils
Dès que je peux je reviens vers vous
Bonne soirée
 

Pièces jointes

  • testepure.pdf
    192.1 KB · Affichages: 9
  • test epure.xlsx
    17 KB · Affichages: 6

kiki29

XLDnaute Barbatruc
Salut, avec le post 6 ( Acrobat Reader ) j'obtiens ceci, il te restera à insérer la macro de mise en forme ne conservant que les infos utiles,ce qui n'est pas tjs une sinécure.
 

Pièces jointes

  • essai_pdf2xls_Acrobat_Reader.xlsx
    9.7 KB · Affichages: 9

gali2

XLDnaute Nouveau
Bonjour
J'avais également obtenu ce type de fichier mais ingerable car apres je doit faire d'autres traitements
En manuel je recherche le texte, le selectionne et le copie avec le formatage puis le colle au format special xml dans excel et optient le fichier excel que je vous ai envoyé
Je voulais faire la meme chose en automatique
Merci quand meme d'avoir essayé
Bonne journée
 

jurassic pork

XLDnaute Occasionnel
Hello,
effectivement ton fichier pdf n'a pas une structure facile à lire les tables qui sont dedans ne sont pas "propres" et avec Power query par extraction de tables on obtient pas de résultats meilleurs qu'avec l'extraction de texte. Pour ta manipulation manuelle tu utilises un lecteur PDF ? lequel ? où tu lis tes données dans autre chose qu'un PDF ? tu fais les opérations en plusieurs fois morceau de texte par morceau de texte ou tu sélectionnes carrément toute la partie entre les deux balises ?
Ami calmant, J.P
 

gali2

XLDnaute Nouveau
Bonjour
Je le fais avec adobe pro
et je selectionne entre "fiche n°" et "consigne de securite"
Bonne journée
 

Discussions similaires

Réponses
2
Affichages
656
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…