Extraction de donnée d'un PDF normé vers un Excel

Bonjour à toutes et à tous!

J'aimerai développer un script vba/vbs afin d'extraire des données d'un fichier PDF normé et les enregistrer dans un fichier excel.

En pj, une image d'un bout de page où j'ai volontairement caché le texte. Si vous souhaitez avoir un exemple d'un fichier pdf normé comme les miens, je vous invite à suivre ce lien http://www.ssi.gouv.fr/administration/bonnes-pratiques/

Je souhaite que le script fasse :

  • la détection des rectangles bleu et jaune;
  • qui récupère les données dans ces rectangles (il n'y a que le texte à l'intérieur des rectangles qui m'intéresse) et le numéro de page où se trouvait le texte;
  • les colles dans un fichier Excel.

J'ai essayé d'enregistrer depuis adobe Reader en format texte, mais chaque mot est séparé par un retour chariot.

Merci par avance de votre aide

fichier pdf

Bonsoir Mauro,

J'ai jeté un oeil sur les PDFs de la page "http://www.ssi.gouv.fr/administration/bonnes-pratiques/" et j'ai constaté que tous n'étaient de format identique.

Peux-tu indiquer au moins l'un de ces PDF que tu veux traiter?

Mauro,

Et le nom d'un PDF à traduire? Peut-être ai-je une solution à proposer...

Bonsoir Mauro,

J'ai jeté un oeil sur les PDFs de la page "http://www.ssi.gouv.fr/administration/bonnes-pratiques/" et j'ai constaté que tous n'étaient de format identique.

Peux-tu indiquer au moins l'un de ces PDF que tu veux traiter?

Bonjour Gvialles,

oui par exemple http://www.ssi.gouv.fr/administration/guide/recommandations-de-securisation-dun-pare-feu-stormshield-network-security-sns/

le document version 1, la version 2 n'a pas le même format normé.

Merci de ton aide

OK Mauro, j'y vois plus clair dans ta demande.

As-tu accès à l'un des composants suivants :

  • Convertiseur WORD DOCX dans ACROBAT READER DC
  • Acrobat Access X.X Type Library (accessibility.api)

J'ai Acrobat Reader version 11 d'installé sur les postes de bureau.

Je ne vois pas où puis-je trouver :

  • Convertiseur WORD DOCX
  • Acrobat Access X.X Type Library (accessibility.api)

Cela fait bien longtemps que j'ai quitté Adobe comme lecteur de fichier PDF (en usage personnel). Cela justifie mes faiblesses avec ce soft

OK, si tu as Acrobat Reader 11, tu dois pouvoir convertir en WORD docX :

capture exportword

Aussi, je te propose d'explorer le process suivant :

  • Tu convertis en DOCX le PDF.
  • Dans un Excel, un formulaire te permets d'indiquer le DOCX issu de la conversion.
  • Un Vba utilisant les objets WORD, réalise la recherche et le report des éléments que tu veux extraire du PDF dans un feuille.

Si tu es d'accord sur ce process, je peux te guider pour l'écriture du VBA.

Je suis ouvert à toute solution dans la mesure ou le SI me le permet

Cependant, sur Reader 11, je ne trouve pas l'option pour le convertir au format word.

Quand je fais "enregistrer sous autre --> texte (txt)" cela me donne un fichier txt avec un retour chariot après chaque mots.

Bonjour Mauro,

Je propose un début de solution dans le classeur joint. Je l'ai testé la conversion du PDF https://www.ssi.gouv.fr/administration/guide/recommandations-de-securisation-dun-pare-feu-stormshield-network-security-sns/. Il est donc à adapter en fonction fonction du format des autres PDF à résumer.

516summarize-pdf.xlsm (42.18 Ko)

Bonjour GVIALLES,

Je vais jeter un oeil, je te remercie.

Désolé du délai de réponse, j'étais malade et incapable d'utiliser un ordinateur. Je reviens ici une fois ton fichier testé

Mauro

PS : petit test, je n'ai pas trop eu le temps de tester plus en profondeur car je dois rattraper mon retard

erreur

Bonsoir Mauro,

Il est nécessaire que tu références l'application WORD dans VBA.

Pour réaliser ce référencement, tu vas dans VBA, tu choisis dans le menu Outils/Références... et dans la liste tu cherches "Microsoft Word xx" et tu coches devant. Comme ça :

referencementword

Bonjour GVIALLES,

Franchement, vous êtes un dieu d'Excel !

Cela me donne envie de creuser plus car c'est vraiment très très puissant !

Merci beaucoup de votre aide !

PS : La colonne C correspond à quelque chose du document? Je vais jeter un oeil sur ton code vba pour corriger le numéro de page, car elle ne correspond pas avec l'extraction.

Ex : J'ai un rectangle /!\ en page 5 dans le pdf et le world qui une fois extrait est assigné à la page 4 dans le fichier Excel. Ce qui est faux.

Je vais aussi supprimer les "+" en début de colonne B mais aussi les lignes avec R1 R2 R3 RX et les "!" pour les mettre dans une colonne face à la ligne correspondante. Comme ci-dessous :

colonne r

Pourrais-je abuser une dernière fois de ton aide?

Si j'ai bien compris le code, c'est ici que tu écris sur le fichier Excel

        Select Case sZoneType
            Case cZoneAttention
                lPage = oShape.Anchor.Sections(1).Index + cFirstPage
                lTop = i
                For j = 1 To oShape.GroupItems.Count
                    Set oItem = oShape.GroupItems(j)
                    If oItem.TextFrame.HasText Then
                        If Len(sTexte) = 0 Then
                            sTexte = "! "
                        End If
                        sTexte = sTexte & oItem.TextFrame.TextRange.Text
                    End If
                Next
            Case cZoneRecommandation
                lPage = oShape.Anchor.Sections(1).Index + cFirstPage
                sTexte = oShape.TextFrame.TextRange.Text
                lTop = i
                If Left(sTexte, 1) <> "R" Then
                    sTexte = ""
                Else

                End If
            Case cZoneRecommandationBis
                lPage = oShape.Anchor.Sections(1).Index + cFirstPage
                sTexte = "+ " & oShape.TextFrame.TextRange.Text
                lTop = i
            Case Else
                sTexte = ""
        End Select

        If Len(sTexte) > 0 Then
            addnewline sTexte, lPage, lTop
        End If

Voir ici

Sub addnewline(zText As String, zPage As Long, zTop As Long)
    Dim oSheet As Excel.Worksheet
    Dim oCell As Excel.Range

    lRow = lRow + 1
    Set oSheet = ThisWorkbook.Worksheets(cSheetname)
    Set oCell = oSheet.Cells(lRow, 1)

    With oCell
        .Value = zText
        .WrapText = True
        .Offset(, 1) = zPage
        .Offset(, 1).VerticalAlignment = xlCenter
        .Offset(, 1).HorizontalAlignment = xlCenter
        .Offset(, 2) = zTop
    End With

    Set oSheet = Nothing
    Set oCell = Nothing
End Sub

Pour le coup, le code est trop complexe pour moi et le modeler comme la photo ci-dessus va être compliqué pour mes petites compétences en vbs.

Bonjour Mauro,

Je suis un peu booké aujourd'hui pour reprendre le sujet. Je m'y penche demain et te donne des news.

Bonjour Mauro,

Je suis un peu booké aujourd'hui pour reprendre le sujet. Je m'y penche demain et te donne des news.

Bonjour GVialles,

C'est très aimable à toi tu m'as déjà beaucoup aidé !

Rechercher des sujets similaires à "extraction donnee pdf norme"