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

Excel Discussion :

conversion tableaux dans PDF en Excel


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut conversion tableaux dans PDF en Excel
    Bonjour,
    J'ai essayé avec les logiciels Acrobat ou Word de transformer des "tableaux" de données contenus dans un fichier PDF en tableau Excel.
    Sans succès...
    J'ai mis en PJ le fichier PDF en question (sachant que j'en 20 autres que je voudrais convertir et ayant la même structure que le PDF que j'ai joint)
    Il y a 3 types de tableau
    De la page 18 à 24 il y a des données de mariages.
    Je souhaite récupérer un tableau Excel avec
    en colonne A la date de mariage
    en colonne B le nom suivi du ou des prénoms de l'épouse
    en colonne C le nom suivi du ou des prénoms de l'époux

    remarque 1: je peux gérer à la main les exceptions (absence de prénom par exemple)
    remarque 2: les noms sont, sauf erreur de saisie toujours en majuscule et les prénoms en minuscule sauf la première lettre en majuscule

    De la page 61 à 70 il y a des naissances.
    Je souhaite récupérer un tableau Excel avec
    en colonne A la date de naissance
    en colonne B le nom suivi du ou des prénoms du nouveau-né
    en colonne C le ou les prénoms du père
    en colonne D le nom suivi du ou des prénoms de la mère

    De la page 100 à 105 il y a des décès.
    Je souhaite récupérer un tableau Excel avec
    en colonne A la date de décès
    en colonne B le nom suivi du ou des prénoms du mort suivi de l'âge de décès (cette dernière donnée parfois absente)

    remarque 3: il y a 2 colonnes de décès par page

    Je suis surtout intéressé par les mariages et naissances.
    Si les décès posent trop de problèmes laisser tomber

    En vous remerciant par avance

    haltero
    Images attachées Images attachées

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    Quelle version d'Excel As-tu ? Dans le power query de la version 365 il y a un connecteur PDF pour les PDF avec des tableaux.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    J'ai 2007.
    Mais je veux bien installer une autre version mais il faudrait que la fonction que tu indiques soit testée avant.
    cdlt
    nota je suis pas très très fort en Excel et c'est un euphémisme..

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Moi je n'ai pas excel 365 mais j'ai essayé ton fichier avec un logiciel d'extraction de données de PDF (tabula (gratuit)). Il ne détecte pas de tableaux donc soit le logiciel n'est pas terrible ou soit ce qui ressemblent à des tableaux dans ton fichier ne sont pas vraiment des tableaux. Dans ce cas il faut extraire le texte et le trier .
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    J'ai extrait une page des mariages et utilisé des fonctions d'Acrobat de transformation en txt, Word, Excel, et quelques autres mais pour prendre le cas de transformation en Excel je récupère un tableau avec une seule colonne et des cellules avec un nombre variables de lignes du "tableau" PDF.
    En transformant en Word, la page obtenue a une très bonne tête mais en passant de Word en txt par exemple, je récupère aussi un fichier ayant plusieurs ligne du fichier PDF sur une même ligne txt.
    Des caractères doivent être interprétés comme des caractères de contrôles (retour ligne par exemple)
    C'est pourquoi j'ai pensé partir d'Excel et transformer ma page PDF mais je n'ai pas vu (dans la version 2007 d'Excel) d'entrée PDF.
    Mes connaissances en Excel étant très limitées je fais appel à des cadors.

    Cdlt

  6. #6
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    J'ai trouvé une solution pour transformer le fichier PDF en txt
    Je sélectionne les lignes du fichier PDF et fait une copie sans formatage dans le bloc-notes au format ANSI (pour la reconnaissance des caractères accentués, ç, etc..)
    Je récupère donc un fichier txt qu'il faut retravailler sous Excel et j'ai encore besoin de votre aide.
    Un modérateur peut-il me dire ce que je dois faire.
    (fermer le sujet et en recréer un autre ?)
    Merci
    haltero

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    Voici une solution partielle :
    Le principe :
    IL faut partir d'un fichier avec des caractères ANSI (à cause du VBA).
    Voici une procédure pour récupérer le texte d'un PDF (qui est souvent en UTF8) et l'écrire dans un fichier en ANSI.
    1 - Ouvrir le document PDF avec Acrobat Reader ou un Navigateur (ex: Chrome)
    2 - Sélectionner tout le texte du PDF (CTRL A).
    3 - Ouvrir un nouveau document dans Notepad++ (pas Notepad) et coller le contenu du presse-papier dedans.
    4 - Dans le menu Encodage de notepad++ choisir Encoder en Ansi.
    5 - Sauvegarder ce nouveau document en format .txt. C'est lui qu'on utilisera par la suite


    Le principe de l'extraction des informations.
    On ouvre le fichier texte généré précédemment pour pouvoir le lire ligne par ligne.
    Pour se synchroniser avec les zones à extraire on a une expression de départ et une expression de fin pour chaque zone à extraire.
    Dans le créneau des zones, on fera appel à une expression régulière pour extraire les informations et les écrire dans la feuille en cours à partir de A1.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    Dim curRow As Integer ' variable globale - ligne courante
     
    Sub LireTextePDF()
        Dim fso As Object
        Dim output As Object
        Dim Deb, Fin
        Dim EnCours As Boolean
        Deb = "TABLE ALPHABETIQUE DES MARIAGES DE"
        Fin = "Actes Relevés et Réalisés par"
        Set fso = CreateObject("Scripting.FileSystemObject")
        Dim sourceFile As Object
        Dim myFilePath As String
        Dim line As String
        myFilePath = "D:\Temp\EtatCivil2.txt"
        Set sourceFile = fso.OpenTextFile(myFilePath, ForReading)
        curRow = 0
        EnCours = False
        'Mariages
        Do While Not sourceFile.AtEndOfStream ' while we are not finished reading through the file
            line = sourceFile.ReadLine
            If InStr(1, line, Deb) > 0 Then
               EnCours = True
               Range("A1").Offset(curRow, i).Value = "Mariages"
               curRow = curRow + 1
            End If
            If InStr(1, line, Fin) > 0 Then
               EnCours = False
               Exit Do
            End If
            If EnCours Then RecupMariages (line)
        Loop
        'Naissances
            Deb = "Table Alphabétique des Baptêmes de"
            Fin = "Actes Relevés et Réalisé"
            Do While Not sourceFile.AtEndOfStream ' while we are not finished reading through the file
            line = sourceFile.ReadLine
            If InStr(1, line, Deb) > 0 Then
               EnCours = True
               'Range("A1").Offset(curRow, i).Value = "Naissances"
               curRow = curRow + 1
            End If
            If InStr(1, line, Fin) > 0 Then
               EnCours = False
               Exit Do
            End If
            'If EnCours Then RecupNaissances (line)
        Loop
        ' Décès
            Deb = "Table alphabétique des décès de"
            Fin = "Fin du registre"
            Do While Not sourceFile.AtEndOfStream '
            line = sourceFile.ReadLine
            If InStr(1, line, Deb) > 0 Then
               EnCours = True
               Range("A1").Offset(curRow, i).Value = "Décès"
               curRow = curRow + 1
            End If
            If InStr(1, line, Fin) > 0 Then
               EnCours = False
               Exit Do
            End If
            If EnCours Then RecupDécès (line)
        Loop
        sourceFile.Close
    End Sub
     
    Sub RecupMariages(maChaine)
    Dim objReg As RegExp
    Dim objMatches, Match As Object
    Set objReg = New RegExp
    objReg.Pattern = "(\d{2}/.+/\d{2,})\s([A-Z'È]{2,})\s(.+?)([A-Z'È]{2,}.*?)\s(.+)$"
    Set objMatches = objReg.Execute(maChaine)
    For Each Match In objMatches             'The variable match will contain the full match
        a = Match.Submatches.Count           'total number of groups in the full match
        For i = 0 To a - 1
            Range("A1").Offset(curRow, i).Value = Trim(Match.Submatches.Item(i))
            'Debug.Print Match.Submatches.Item(i)  'display each group
        Next
    curRow = curRow + 1
    Next
    Set objReg = Nothing
    End Sub
    Sub RecupNaissances(maChaine)
    Dim objReg As RegExp
    Dim objMatches, Match As Object
    Set objReg = New RegExp
    objReg.Pattern = "(\d{2}/.+/\d{2,})\s([A-Z'È]{2,})\s(.+?)([A-Z'È]{2,}.*?)\s(.+)$"
    Set objMatches = objReg.Execute(maChaine)
    For Each Match In objMatches             'The variable match will contain the full match
        a = Match.Submatches.Count           'total number of groups in the full match
        For i = 0 To a - 1
            Range("A1").Offset(curRow, i).Value = Trim(Match.Submatches.Item(i))
            'Debug.Print Match.Submatches.Item(i)  'display each group
        Next
    curRow = curRow + 1
    Next
    Set objReg = Nothing
    End Sub
    Sub RecupDécès(maChaine)
    Dim objReg As RegExp
    Dim objMatches, Match As Object
    Set objReg = New RegExp
    objReg.Pattern = "(\d{2}/.+/\d{2,})\s([A-Z'È]{2,}.+)\s(.+)$"
    Set objMatches = objReg.Execute(maChaine)
    For Each Match In objMatches             'The variable match will contain the full match
        a = Match.Submatches.Count           'total number of groups in the full match
        For i = 0 To a - 1
            Range("A1").Offset(curRow, i).Value = Trim(Match.Submatches.Item(i))
            'Debug.Print Match.Submatches.Item(i)  'display each group
        Next
    curRow = curRow + 1
    Next
    Set objReg = Nothing
    End Sub
    J'ai désactivé la partie naissances car il y a un gros problème : le prénom de l'enfant est mélangé à celui du père (comment le reconnaître ?)
    Il y a des cas tordus (par exemple TISSIER dit LA COSTE) et d'autres qui pourraient arriver (caractères accentués en Majuscule, Particule dans le nom ex : DE , LE etc...)

    Nom : xlEtatCivil.PNG
Affichages : 145
Taille : 60,5 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    J'ai installé Notepad++ et créé un fichier txt en suivant tes instructions.
    Comment est-ce que j'utilise le prog que tu as fourni dans Excel ?
    pas à pas car comme je l'ai dit Excel et moi cela fait deux!
    Pour les exceptions avec des surnoms ou des particules dans les noms je les corrigerai à la main, ce n'est pas un problème.
    J'ai un nombre fini de communes à traiter donc ce n'est pas un soucis.
    Dans tous les cas merci pour ton aide

    Cdlt
    haltero

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    En Pièce jointe un classeur avec le code VBA .
    Dans un Excel récent pour accéder au code il faut que l'onglet Développeur soit accessible dans le ruban (Options Excel/Personnaliser le ruban --> partie Onglets Principaux : cocher Developpeur)
    Pour Editer le code : Visual Basic - Module1 -> Modifier le chemin du fichier txt
    Lancer la macro LireTextePdF


    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Dans un Excel récent ====> qu'appelles-tu un Excel récent ?
    pour accéder au code il faut que l'onglet Développeur soit accessible dans le ruban (Options Excel/Personnaliser le ruban --> partie Onglets Principaux : cocher Developpeur)
    =====> OK
    Pour Editer le code : Visual Basic - Module1 -> Modifier le chemin du fichier txt
    ======> si je comprends bien tu me demandes de modifier le source en mettant mon chemin d'accès ===> je l'ai fait (myFilePath = "c:\test\change.txt")
    Lancer la macro LireTextePdF:
    =====> la macro semble s'exécuter mais le tableau reste vide

    Je te mets le fichier txt en PJ.

    Cdlt
    haltero
    Fichiers attachés Fichiers attachés

  11. #11
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    ça marche mais c'est vachement long.
    toutes mes excuses et surtout tous mes remerciements.

    Encore merci et bonne soirée.

  12. #12
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Bonjour à tous
    Citation Envoyé par jurassic pork Voir le message
    Hello,
    Dans le power query de la version 365 il y a un connecteur PDF pour les PDF avec des tableaux
    Je pense que c'est dispo dans 2021 aussi.

    Ci-joint un Traitement PowerQuery sur ton pdf. On indique le chemin et nom du pdf sur l'onglet Choix

    Les mariages sont faciles à obtenir sauf qu'on ne peut différencier l'époux et l'épouse l'ordre n'étant pas fixe : j'ai mis Epoux 1 et Epoux 2.
    Mais les baptêmes et les décès posent plus de problème notamment certaines lignes se retrouvent considérées comme faisant partie d'un même enregistrement et cela oblige à redécouper ces paquets.

    J'ai laissé les numéros de pages pour se repérer.

    J'ai repéré les débuts de listes par la ligne Table alphabétique des ... et les fins par une ligne commençant par Actes ou Fin du registre

    J'espère que c'est le même principe dans les autres PDF

    Le traitement prend 15 secondes sur mon PC
    Fichiers attachés Fichiers attachés
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  13. #13
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    Pour JP:
    Lorsque j'ai dit que c'était très long en réalité c'était fini mais ta solution n'affichait rien car j'avais omis de mettre "table..." en début de source.
    Donc en ajoutant "table..." cela marche "presque bien"
    En effet j'ai remarqué que les dates incomplètes du genre "/MM/AAAA" donc avec omission du jour (ce qui décale la ligne de 2 caractères vers la gauche) ne se retrouve pas dans le fichier Excel généré.
    J'ajoute donc le jour dans le fichier txt pour bypasser.
    Un "petit compteur" de ligne lues comparé aux nb de lignes générées serait le bienvenu (c'est un suggestion…)
    Autre petit soucis ta solution pour les accents ne marche pas avec la version 2007.
    En effet Excel 2007 me retransforme les accents en caractères spéciaux.
    En recherchant sur internet pour voir s'il n'y avait pas un paramètres pour Excel 2007, je suis tombé sur ce code que j'utilise en l'ajoutant dans ta solution mais il faut qu'à chaque fois je la réintègre.
    Si tu pouvais me renvoyer ta solution avec cette routine intégrée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub remplace_csv()
    ReDim A_Remplacer(0 To 26)
    ReDim Remplacants(0 To 26)
    Dim I As Byte
    A_Remplacer = Array("î", "é", "→", "Ü", "ù", "â", "è", "à ", "’", "€", "®", "Ø", "°", "ç", "ô", _
                      "«", "»", "û", "ê", "…", "/ø", "ø", "À", "É", "È", " à ", "Ö")
    Remplacants = Array("î", "é", Chr(26), "Ü", "û", "â", "è", "à", "'", "€", "®", "Ø", "°", "ç", "ô", _
                      Chr(34), Chr(34), "û", "ê", "..", "ø", "ø", "A", "E", "E", " à ", "Ö")
    For I = 0 To 26
        Cells.Replace What:=A_Remplacer(I), Replacement:=Remplacants(I), LookAt:=xlPart
    Next I
    End Sub
    Pour 78chris:
    Je te remercie pour ta solution qui est trop complète!!!
    En effet tu as regroupé les nom et prénom(s) mais cela ne m'arrange pas.
    En effet la personne qui a fait ces listes est un généalogiste et a donc créé 2 lignes par mariage: une avec le nom de l'époux suivi du nom de l'épouse et une autre avec le nom de l'épouse suivi du nom de l'époux.
    Donc multiplié le nb de mariages réels par 2.
    il a fait cela par ce que toutes les listes officielles de l'état civil contiennent le nom de l'époux suivi du nom de l'épouse uniquement donc triées alphabétiquement sur le nom de l'époux.
    Si bien quand on fait une recherche à partir de nom de l'épouse il faut analysé toute la "colonne" de droite qui contient l'épouse.
    Une recherche dans une grande ville devint très vide fastidieuse…
    Mon fichier Excel des mariages contient environ 100 000 entrées mais j'ai plusieurs onglets: trié sur nom époux, nom épouse, date, bref j'utilise (modestement) les fonctionnalités d'Excel
    Avant des outils comme Excel on se tapait tout à la main.
    Donc pour en revenir à notre sujet, je trie le fichier Excel sur le prénom du premier époux et supprime toutes les lignes contenant un prénom féminin pour éliminer les doublons.

    Pour JP et 78chris
    Une solution automatique m'intéresse mais j'ai l'impression que ce doit pas être simple (et moi me prend très peu de temps)
    Comment as-tu résolu la ligne 523 d'un certain TISSIER dit LA COSTE Antoine - c'est bon mais comment as-tu distingué le surnom du nom de l'épouse qui suit?

    Quand à l'automatisation des listes de baptêmes/naissances (question que m'avait posée JP et à laquelle je n'avais pas répondu - toutes mes excuses) je crée un fichier txt et je j'aligne par décalage à la main et après j'utilise la fonction Convertir.
    C'est long mais je n'ai pas trouvé de solution automatique à mon niveau
    à votre niveau il y a peut-être une solution:
    en faisant un copier (simple sans formatage)/coller dans un txt vous avez la possibilité de repérer le début d'une ligne par les "/" de la date sachant que le(s) prénom(s) du père ont 3 blancs avant et après par exemple.

    Donc 78chris une solution moins perfectionnée (c a dire sans regroupement des noms et prénoms) m'intéresse mais il faut que je trouve un Excel 2016 par exemple (j'ai 2007) et JP si tu trouves la solution pour les qq lignes qui passent à la trappe plus me renvoyer ta macro avec la gestion des caractères.

    Dans tous les cas un grand MERCI (oui je sais c'est à la mode en ce moment…) et vous vous occupez d'un vieux!!

  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    Citation Envoyé par haltero2 Voir le message
    Bonjour,
    Pour JP:
    En effet j'ai remarqué que les dates incomplètes du genre "/MM/AAAA" donc avec omission du jour (ce qui décale la ligne de 2 caractères vers la gauche) ne se retrouve pas dans le fichier Excel généré.

    Un "petit compteur" de ligne lues comparé aux nb de lignes générées serait le bienvenu (c'est un suggestion…)

    Autre petit soucis ta solution pour les accents ne marche pas avec la version 2007.
    En effet Excel 2007 me retransforme les accents en caractères spéciaux.
    Pour le Point 1 j'ai modifié le motif pour prendre en compte le cas où le jour de la date est absent.
    Pour le Point 2 j'ai ajouté un compteur pour afficher le nombre d'événements dans la fenêtre d'exécution du VBA. Pour compter le nombre d'événements dans le fichier source pour comparer, il faut utiliser le compteur de recherches de notepad++ avec un motif en expression régulière et faire la recherche sur une zone sélectionnée :

    Nom : CompteurEvents.PNG
Affichages : 114
Taille : 57,0 Ko

    Pour le Point 3 c'est louche es-tu sûr que ton fichier source est encodé en Ansi ? En pièce jointe un fichier source en ANSI.
    Voici le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    Const ForReading = 1
    Const ForWriting = 2
    Const ForAppending = 8
    Dim curRow As Integer ' variable globale - ligne courante
    Sub LireTextePDF()
        Dim fso As Object
        Dim output As Object
        Dim Deb, Fin
        Dim EnCours As Boolean
        Dim sourceFile As Object
        Dim myFilePath As String
        Dim line As String
        Dim NbEvents As Integer
        Deb = "TABLE ALPHABETIQUE DES MARIAGES DE"
        Fin = "Actes Relevés et Réalisés par"
        Set fso = CreateObject("Scripting.FileSystemObject")
        myFilePath = "D:\Temp\EtatCivil2.txt"
        Set sourceFile = fso.OpenTextFile(myFilePath, ForReading)
        curRow = 0
        EnCours = False
        'Mariages
        NbEvents = 0
        Do While Not sourceFile.AtEndOfStream ' while we are not finished reading through the file
            line = sourceFile.ReadLine
            If InStr(1, line, Deb) > 0 Then
               EnCours = True
               Range("A1").Offset(curRow, i).Value = "Mariages"
               curRow = curRow + 1
            End If
            If InStr(1, line, Fin) > 0 Then
               EnCours = False
               Exit Do
            End If
            If EnCours Then NbEvents = NbEvents + RecupMariages(line)
            ' do something with the line...
        Loop
        Debug.Print ("Nombre de mariages : ") & CStr(NbEvents)
        'Naissances
        NbEvents = 0
        Deb = "Table Alphabétique des Baptêmes de"
        Fin = "Actes Relevés et Réalisé"
        Do While Not sourceFile.AtEndOfStream '
            line = sourceFile.ReadLine
            If InStr(1, line, Deb) > 0 Then
               EnCours = True
               'Range("A1").Offset(curRow, i).Value = "Naissances"
               curRow = curRow + 1
            End If
            If InStr(1, line, Fin) > 0 Then
               EnCours = False
               Exit Do
            End If
            'If EnCours Then  NbEvents = NbEvents + RecupNaissances (line)
        Loop
        'Debug.Print ("Nombre de naissances : ") & CStr(NbEvents)
        ' Décès
        NbEvents = 0
        Deb = "Table alphabétique des décès de"
        Fin = "Fin du registre"
        Do While Not sourceFile.AtEndOfStream '
            line = sourceFile.ReadLine
            If InStr(1, line, Deb) > 0 Then
               EnCours = True
               Range("A1").Offset(curRow, i).Value = "Décès"
               curRow = curRow + 1
            End If
            If InStr(1, line, Fin) > 0 Then
               EnCours = False
               Exit Do
            End If
            If EnCours Then NbEvents = NbEvents + RecupDécès(line)
            ' do something with the line...
        Loop
        Debug.Print ("Nombre de décès : ") & CStr(NbEvents)
        sourceFile.Close
    End Sub
    Function RecupMariages(maChaine) As Integer
    Dim objReg As Object
    Dim objMatches, Match As Object
    RecupMariages = 0
    Set objReg = CreateObject("VBScript.RegExp")
    objReg.Pattern = "(\d{0,2}/.+/\d{2,})\s([A-Z'È]{2,})\s(.+?)([A-Z'È]{2,}.*?)\s(.+)$"
    Set objMatches = objReg.Execute(maChaine)
    For Each Match In objMatches             'The variable match will contain the full match
        a = Match.Submatches.Count           'total number of groups in the full match
        For i = 0 To a - 1
            Range("A1").Offset(curRow, i).Value = Trim(Match.Submatches.Item(i))
            'Debug.Print Match.Submatches.Item(i)  'display each group
        Next
        curRow = curRow + 1
        RecupMariages = 1
    Next
    Set objReg = Nothing
    End Function
     
     
    Function RecupNaissances(maChaine) As Integer
    Dim objReg As Object
    Dim objMatches, Match As Object
    RecupNaissances = 0
    Set objReg = CreateObject("VBScript.RegExp")
    objReg.Pattern = "(\d{0,2}/.+/\d{2,})\s([A-Z'È]{2,})\s(.+?)([A-Z'È]{2,}.*?)\s(.+)$"
    Set objMatches = objReg.Execute(maChaine)
    For Each Match In objMatches             'The variable match will contain the full match
        a = Match.Submatches.Count           'total number of groups in the full match
        For i = 0 To a - 1
            Range("A1").Offset(curRow, i).Value = Trim(Match.Submatches.Item(i))
            'Debug.Print Match.Submatches.Item(i)  'display each group
        Next
        curRow = curRow + 1
        RecupNaissances = 1
    Next
    Set objReg = Nothing
    End Function
    Function RecupDécès(maChaine)
    Dim objReg As Object
    Dim objMatches, Match As Object
    RecupDécès = 0
    Set objReg = CreateObject("VBScript.RegExp")
    objReg.Pattern = "(\d{0,2}/.+/\d{2,})\s([A-Z'È]{2,}.+)\s(.+)$"
    Set objMatches = objReg.Execute(maChaine)
    For Each Match In objMatches             'The variable match will contain the full match
        a = Match.Submatches.Count           'total number of groups in the full match
        For i = 0 To a - 1
            Range("A1").Offset(curRow, i).Value = Trim(Match.Submatches.Item(i))
            'Debug.Print Match.Submatches.Item(i)  'display each group
        Next
        curRow = curRow + 1
        RecupDécès = 1
    Next
    Set objReg = Nothing
    End Function
    A noter que la discussion n'est pas dans le bon forum -> Macros et VBA Excel

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Re
    Citation Envoyé par haltero2 Voir le message

    Donc 78chris une solution moins perfectionnée (c a dire sans regroupement des noms et prénoms) m'intéresse !
    Découper n'est pas un PB dans la mesure où le nom est en majuscule on trouve facilement le point de découpe à part pour les mélange Maj/MIn comme TISSIER dit LA COSTE Antoine où il faut regarder de plus près comment faire.

    Il y a d'ailleurs un cas dans les Baptêmes où faute de nom en majuscule je n'ai pu identifier la mère (ligne 169).

    Tu ne parles que des mariages : as-tu regardé les 2 autres ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  16. #16
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Finalement, j'ai essayé le classeur de 78Chris et ses requêtes en Power Query M sous Excel 2016 et Excel 2019 -> le PDF.Tables dans Power Query fonctionne ! Donc on peut lire des fichiers PDF. L'avantage majeur par rapport à la solution VBA, c'est qu'il n'y a pas besoin de manipuler le fichier PDF pour le transformer en Texte et de le transformer en ANSI pour le VBA. Et les résultats semblent les mêmes (avec un bonus sur les naissances).
    Bravo 78Chris !
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  17. #17
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    pour les caractères ANSI sous l'onglet encodage il y a ANSI et convertir en ANSI +++> je ne cochais qu'ANSI et ne convertissais donc rien ++++> donc OK
    pour les dates incomplètes ta nouvelle version est correcte
    pour les compteurs d'enregistrement ce n'est pas pour moi la suggestion de compter les enregs d'entrée et de sortie mais pour celui qui écrit le programme car je t'ai donné un fichier txt pour mettre au point le programme mais je ne sais pas si les autres fichiers que j'ai encore à traiter n'auront pas une structure qui le feront dérailler.
    perso je garde le nb de lignes à partir de Notepad++ car comme j'élimine la moitié des lignes à la main je vérifie toujours qu'il m'en reste la moitié à la fin

    Pour l'erreur de forum je dois faire quelque chose ?

    Merci encore (mais je vais poster au moins une autre demande...)

  18. #18
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Finalement, j'ai essayé le classeur de 78Chris et ses requêtes en Power Query M sous Excel 2016 et Excel 2019 -> le PDF.Tables dans Power Query fonctionne ! Donc on peut lire des fichiers PDF. L'avantage majeur par rapport à la solution VBA, c'est qu'il n'y a pas besoin de manipuler le fichier PDF pour le transformer en Texte et de le transformer en ANSI pour le VBA. Et les résultats semblent les mêmes (avec un bonus sur les naissances).
    Bravo 78Chris !

    Si je comprends bien il faut que je passe au moins en Excel 2016 pour être tranquille....

  19. #19
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Tu ne parles que des mariages : as-tu regardé les 2 autres ?

    Je suis en Excel 2007 - le PowerQuery existe-t-il et si oui comment l'activer ?

  20. #20
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2022
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Janvier 2022
    Messages : 99
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par haltero2 Voir le message
    Tu ne parles que des mariages : as-tu regardé les 2 autres ?

    Je suis en Excel 2007 - le PowerQuery existe-t-il et si oui comment l'activer ?
    J'ai téléchargé un complément PowerQuery à partir d'un site Microsoft mais à l'installation il me dit qu'il me faut la version 2010 ou 2013...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Selection de tableaux dans des feuilles excel vba
    Par LittleMouse1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/07/2018, 09h11
  2. Modifier des tableaux d’un PDF dans Excel
    Par lamotin dans le forum Excel
    Réponses: 3
    Dernier message: 30/03/2016, 12h31
  3. Exporter plusieurs tableaux dans un onglet (EXCEL)
    Par Sissie dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 14/08/2009, 13h49
  4. [FPDF] tableaux dans pdf
    Par frboyer dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/04/2009, 15h15
  5. Fonctions VBA renvoyant des tableaux dans Excel
    Par phil_75 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2006, 00h19

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