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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Hello,
tu parles de format spécial XML : c'est ce que te proposes entre autres le collage spécial d'Excel ?
Adobe Acrobat pro peut exporter un pdf en xml alors peut-être que quand on fait un copier , il met aussi dans le presse-papier des données en format XML. Moi je ne peux pas essayer je n'ai pas Acrobat Pro.
Ami calmant, J.P
 
Bonjour
J'ai essayé
C'est pas propre
Hello,
finalement pour lire le texte d'un PDF c'est beaucoup plus simple car Word est capable d'ouvrir des PDF et de les convertir. Il suffit alors de récupérer ce que l'on veut dans le document Word. Voici un exemple d'utilisation en VBA :

VB:
Sub lectureFicPDF()
    Dim fichier$
    Dim objword As Object, pdfdoc As Object
        fichier = "d:\temp\PDF\testepure.pdf"
        Set objword = CreateObject("Word.Application")
        objword.Visible = True
        'Application.DisplayAlerts = wdAlertsNone
        Set pdfdoc = objword.Documents.Open(Filename:=fichier, Format:="PDF Files", ConfirmConversions:=False)
                ' Affichage du texte présent
        Debug.Print pdfdoc.Content.Text
        pdfdoc.Close
        objword.Quit
    'Application.DisplayAlerts = wdAlertsAll
    Debug.Print "Lecture Terminée" 
End Sub
Testé avec un Office 2016 32 bits. Je ne sais pas pourquoi mais avec le pdfdoc.content.Text j'ai des caractères "BEL" en début de ligne alors faire :
VB:
 Debug.Print Replace(pdfdoc.Content.Text, Chr(7), "")
Dans un premier temps on met l'objet Word visible pour voir ce qui se passe dedans car il peut y avoir des messages d'avertissement bloquant.
Ami calmant, J.P
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

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