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

VBA Access Discussion :

découper un texte pour en faire plusieurs enregistrements


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut découper un texte pour en faire plusieurs enregistrements
    Bonsoir,

    J'ai créé une (très modeste) G.E.D., celle-ci est fondée sur le bulletin des arrêts de la cour de cassation.

    Ma table est constituée de trois colonnes : "date + RG", "abstract", "résumé"

    Pour l'instant, je me contente de faire de longs "copier/coller" pour alimenter ma table.

    Ce bulletin reprend les différents arrêts "intéressants", chaque arrêt se trouvant dans un long fichier .doc, chaque arrêt étant sous cette forme :

    N°1933

    ARCHITECTE ENTREPRENEUR
    Article 1792 du Code civil - Construction d'ouvrage accessoire empiétant sur le fonds d'autrui - Démolition - Responsabilité de l'architecte.

    Doit être déclaré responsable et tenu à garantir le maître de l'ouvrage de toute condamnation l'architecte chargé d'une mission complète de maîtrise d'oeuvre ayant autorisé l'implantation d'un ouvrage accessoire (soutènement par clouage) empiétant sur la propriété voisine sans le consentement du propriétaire du fonds servant et conduisant à la démolition de cet élément, laquelle rend l'ouvrage principal impropre à sa destination.

    CA Saint-Denis (ch. civile), 23 mai 2008 - RG n° 07/00052

    M. Creze, Pt. - Mme Pony et M. Fievet, conseillers.

    Je vais utiliser les balises "code" pour vous préciser chaque champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1933 ARCHITECTE ENTREPRENEUR
    Article 1792 du Code civil - Construction d'ouvrage accessoire empiétant sur le fonds d'autrui - Démolition - Responsabilité de l'architecte.
     
    C'est ce que je dois avoir dans le champ "abstract"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Doit être déclaré responsable et tenu à garantir le maître de l'ouvrage de toute condamnation l'architecte chargé d'une mission complète de maîtrise d'oeuvre ayant autorisé l'implantation d'un ouvrage accessoire (soutènement par clouage) empiétant sur la propriété voisine sans le consentement du propriétaire du fonds servant et conduisant à la démolition de cet élément, laquelle rend l'ouvrage principal impropre à sa destination.
     
    C'est ce que je dois avoir dans le champ "résumé"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CA Saint-Denis (ch. civile), 23 mai 2008 - RG n° 07/00052
     
    C'est ce que je dois avoir dans le champ "DATE+RG"
    Quelqu'un aurait-il une idée pour automatiser ce que je fais en "copier/coller".

    L'idée c'est qu'à chaque fois que l'on trouve "N°" dans le texte de départ (.doc) jusqu'au prochain "N°", on découpe ce qu'il y a entre ces deux "signets" pour créer un enregistrement et remplir la table.

    Pour votre information, si cela peut aider, l'abstract et le n° sont en gras dans le texte d'origine.

    Si quelqu'un a une idée ...

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Si les arrêtés sont toujours structurés de la même manière, tu peux peut-être t'en sortir avec les fonctions InStr(), et Mid().

    Peut-être en fonction du nombre de retour chariot ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Aurais-tu un document complet sous la main que l'on puisse réellement se rendre compte de sa structure.
    Il est fort possible que l'on puisse automatiser un maximum l'opération, y compris la recherche des fichiers.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci à vous deux.

    Voici l'url de la source que je copie dans mon document word pour, ensuite, faire un copier/coller dans ma base :

    http://www.courdecassation.fr/public...ets_12018.html

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    C'est moins compliqué que tu ne le penses !

    Si tu copie sous format HTML, tu as des signets, des titres.

    Le signet se trouve en début d'article !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci.

    Je n'y avais pas pensé

    Il y a des balises h4, h5, br ...

    Je vois bien comment ajouter un enregistrement à une table (je le fais dans le cadre d'une table qui liste un répertoire pour exporter des fichiers jpg dans un doc) ...

    Comment fais-je pour scruter mon fichier .txt ...

    Je suppose que le vba doit indiquer que chaque enregistrement (i.e. chaque arrêt pour moi) est compris entre les balises "/div" et "div" et que les parties qui m'intéressent sont rangées de la manière suivante :

    abstract : compris dans les balises h4 et h5

    date + rg : contenu dans les balises p sur un critère de recherche dans le texte compris dans cette balise avec les lettres "RG" et "/"

    contenu : contenu dans les balises p sur un critère de recherche dans le texte compris dans cette balise excluant les lettres "RG" et "/"

    De plus, je dois faire une boucle sur un critère du type ... "tant qu'il y a une balise h4 (ou h5) avec un "N°" on boucle"

    Ensuite, n'ayant pas besoin de la dernière ligne concernant le nom des magistrats ... j'exclus le texte où il y un "Pt."

    C'est en théorie ... mais en pratique je fais comment ...

    Merci encore ...

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr

    Avec un control webbrowser, on peut naviguer sur la page web et parcourir ses éléments.

    Avec un formulaire contenant :
    - un control Webbrowser nommé WebBrowser0
    - une zone de texte nommée TxtURL
    - un bouton nommé BtnAjoutArrets

    Mettre l'URL dans la zone TxtURL et cliquer sur le bouton pour ajouter les arrêts.

    Voici la procédure sur click sur la bouton BtnAjoutArrets :
    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
     
    Private Sub BtnAjoutArrets _Click()
    Dim lElt As Object
    Dim lId As String
    Dim labstract As String
    Dim lresume As String
    Dim lDATE_RG As String
    Dim lBegin As Boolean
    Dim lEnd As Boolean
    On Error GoTo Gestion_Erreurs
    ' Navigue vers la page Web
    Me.WebBrowser0.Object.Navigate Me.TxtURL.Value
    ' Attend que le Browser soit prêt
    Do Until Me.WebBrowser0.Object.ReadyState = 4
        DoEvents
    Loop
    ' Travaille sur le document html
    With Me.WebBrowser0.Object.Document
        ' Boucle sur toutes les balise html de la page
        For Each lElt In .all
            ' Action fonction de la balise
            Select Case lElt.tagName
                ' balise a
                Case "A"
                    ' Si commence par c => c'est un arrêt
                    If lElt.Name Like "c*" Then
                        ' Début de l'arrêt = Vrai
                        lBegin = True
                        ' Id de l'arrêt
                        lId = lElt.Name
                        ' Initialise les données de l'arrêt
                        lresume = ""
                        lDATE_RG = ""
                        ' L'extrait est dans l'élément parent (h4)
                        labstract = lElt.parentelement.outertext
                        labstract = Replace(labstract, vbCrLf, " ")
                    End If
                ' balise h5
                Case "H5"
                    ' Si on a commencé un arrêt
                    If lBegin Then
                        ' Ajoute le texte à l'extrait
                        labstract = labstract & vbCrLf & lElt.outertext
                    End If
                ' balise p
                Case "p"
                    ' Si on a commencé un arrêt
                    If lBegin Then
                        ' Si contient "RG n°" alors c'est la fin de l'arrêt avec la date
                        If InStr(1, lElt.outertext, "RG n°", vbTextCompare) <> 0 Then
                            ' Date + RG
                            lDATE_RG = lElt.outertext
                            ' Fin de l'arrêt
                            lBegin = False
                            lEnd = True
                        Else
                            ' Sinon c'est une partie du résumé
                            lresume = lresume & IIf(lresume = "", "", vbCrLf) & lElt.outertext
                        End If
                    End If
                ' balise div ou ul
                Case "div", "ul"
                    ' Si on était dans un arrêt, une de ces balises marque la fin de l'arrêt (div devrait suffire, j'ai ajouté ul au cas où)
                    If lBegin Then
                        lBegin = False
                        lEnd = True
                    End If
                ' Autre balise
                Case Else
                    ' Si on rencontre une autre balise => on n'est plus sur une fin d'arrêt
                    If lEnd Then lEnd = False
            End Select
            ' Si fin d'arrêt
            If lEnd Then
                ' Ajoute l'arrêt à la table
                ' on double les éventuels guillemets pour éviter les erreurs
                DoCmd.SetWarnings False
                DoCmd.RunSQL "insert into  Tcassation values(""" & _
                        Replace(lId, """", """""") & """,""" & _
                        Replace(labstract, """", """""") & """,""" & _
                        Replace(lresume, """", """""") & """,""" & _
                        Replace(lDATE_RG, """", """""") & """)"
                DoCmd.SetWarnings True
            End If
        Next
    End With
    Exit Sub
    Gestion_Erreurs:
    MsgBox "Erreur " & Err.Number & ", " & Err.Description
    End Sub
    Les données sont ajoutées dans une table Tcassation contenant les champs :
    Id => texte
    Abstract => Mémo
    Resume => Mémo
    DATE+RG => Mémo

    On peut faire la même chose en parcourant un fichier, mais avec les balises html c'est plus carré.
    Il faut juste que le format de la page ne change pas.

    Pour voir ce que contient une balise, mettre un point d'arrêt et regarder le contenu de lElt dans la fenêtre "Variables locales".
    Ou alors un espion sur Me.WebBrowser0.Object.Document pour voir ce que contient le document html.

    Au passage, notez les droits d'auteur pour la reproduction :
    http://www.courdecassation.fr/inform...teur_9247.html

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    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
     
    Sub ImporterTexte()
    On Error Resume Next
    Dim wApp As Word.Application
    Dim oDoc As Word.Document
    Dim pAra As Paragraph
     
    Dim rs As DAO.Recordset
    Dim sql As String
     
    sql = "Select * From T1"
     
    Set rs = CurrentDb.OpenRecordset(sql)
     
    Set wApp = New Word.Application
    Set oDoc = wApp.Documents.Open(CurrentProject.Path & "\n.docm")
     
    For Each pAra In oDoc.Paragraphs
        If pAra.Style = "Titre 4" Then
            rs.Update
            rs.AddNew
            rs.Fields(1) = pAra.Range.Text
        ElseIf pAra.Style = "Titre 5" Then
            rs.Fields(2) = pAra.Range.Text
        ElseIf pAra.Range.Text Like "CA*" Then
            Debug.Print "ok 1 "
            rs.Fields(4) = pAra.Range.Text
        ElseIf pAra.Range.Text Like "M. *" Then
            Debug.Print "ok 2"
            rs.Fields(5) = pAra.Range.Text
        ElseIf Not pAra.Range.Text Like "CA*" Or Not pAra.Range.Text Like "M.*" Then
            rs.Fields(3) = rs.Fields(3) & pAra.Range.Text
     
     
        End If
    Next pAra
     
    rs.Update
     
    rs.Close
    Set rs = Nothing
    Set oDoc = Nothing
    wApp.Quit
    Set wApp = Nothing
    End Sub
    Voilà ce que j'obtiens.

    A toi de voir, il te suffit de remplacer T1 par la table de ton choix.

    J'ai vu trop tard que Arkham était déjà passé.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup ...

    Je teste ce soir et constate la parfaite réactivité de ce forum ...

    Encore merci et espère pouvoir mettre une balise "résolu" ...

    Maintenant, si je peux vous rendre service ...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé le Code d'arkham et il fonctionne à merveille.

    Par contre, y a-t-il moyen de modifier ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                    If lBegin Then
                        ' Si contient "RG n°" alors c'est la fin de l'arrêt avec la date
                        If InStr(1, lElt.outertext, "RG n°", vbTextCompare) <> 0 Then
                            ' Date + RG
                            lDATE_RG = lElt.outertext
                            ' Fin de l'arrêt
                            lBegin = False
                            lEnd = True
                        Else
                            ' Sinon c'est une partie du résumé
                            lresume = lresume & IIf(lresume = "", "", vbCrLf) & lElt.outertext
                        End If
    Concernant "RG n°" ...

    En effet, cette recherche fonctionne impeccable pour les arrêts de Cour d'appel qui sont, nécessairement, référencés par "RG n°".

    Par contre, si je veux utiliser ce code pour les arrêts de la Cour de Cassation, la présentation est différente (http://www.courdecassation.fr/public...ets_12017.html).

    J'ai remarqué en remplaçant "RG n°" par "com." (arrêt chambre commerciale) ou "civ." ou "soc." ... cela fonctionne.

    J'aimerai faire en sorte que si"RG N°" alors ... sinon si civ. alors ... sinon si com. alors ... sinon si "soc." alors ... et si rien de tout çà, alors c'est un résumé ...

    J'ai essayé d'ajouter des if then et des else if ... mais cela ne fonctionne plus au niveau de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Case "div", "ul"
                    ' Si on était dans un arrêt, une de ces balises marque la fin de l'arrêt (div devrait suffire, j'ai ajouté ul au cas où)
                    If lBegin Then
                        lBegin = False
                        lEnd = True
                    End If
    Access m'indique "case" sans "select case" ... je sèche (encore une fois) ...

    Concernant Heureux-oli, j'essaye ton code mais tout le texte se met dans une colonne avec divers enregistrements ... et les caractères accentués sont tronqués ...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Bonjour, j'ai modifié le code d'arkham et cela fonctionne (youpi) :

    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
                    If lBegin Then
                        ' Si contient "RG n°" alors c'est la fin de l'arrêt avec la date
                        If InStr(1, lElt.outertext, "Civ.", vbTextCompare) <> 0 Then
                            ' Date + RG
                            lDATE_RG = lElt.outertext
                            ' Fin de l'arrêt
                            lBegin = False
                            lEnd = True
                        End If
     
                        If InStr(1, lElt.outertext, "Com.", vbTextCompare) <> 0 Then
                             ' Date + RG
                            lDATE_RG = lElt.outertext
                            ' Fin de l'arrêt
                            lBegin = False
                            lEnd = True
                        End If
                        If InStr(1, lElt.outertext, "RG n°", vbTextCompare) <> 0 Then
                             ' Date + RG
                            lDATE_RG = lElt.outertext
                            ' Fin de l'arrêt
                            lBegin = False
                            lEnd = True
     
                        Else
                            ' Sinon c'est une partie du résumé
                            lresume = lresume & IIf(lresume = "", "", vbCrLf) & lElt.outertext
                        End If
     
                    End If
    Par contre, il reste un problème celui de l'abstract ...

    En effet, quand j'ai un abstract "papier" comme celui-ci :

    1° AIDE JURIDIQUE
    Aide juridictionnelle. - Demande. - Cassation. - Pourvoi. - Délai. - Interruption. - Condition.
    2° CASSATION
    Pourvoi. - Pourvoi incident. - Recevabilité. - Irrecevabilité du pourvoi principal. - Portée.

    Je n'enregistre dans ma base que

    1° AIDE JURIDIQUE

    Alors que je voudrai enregistrer l'ensemble ...

  12. #12
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    en remplaçant :
    par :
    ??

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Effectivement ... c'était tout bête !

    Un mot à vous deux : M E R C I !

    Et une balise "résolu", une !

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

Discussions similaires

  1. [Débutant] Faire plusieurs enregistrement en ADO.net vers Access
    Par aA189 dans le forum VB.NET
    Réponses: 5
    Dernier message: 23/12/2011, 15h51
  2. Créer un vecteur de texte pour y faire appel
    Par Aphelio dans le forum MATLAB
    Réponses: 4
    Dernier message: 07/05/2011, 21h11
  3. Partir d'un gros fichier pour en faire plusieurs petits
    Par Bruno13 dans le forum Débuter
    Réponses: 12
    Dernier message: 07/10/2009, 13h12
  4. Réponses: 2
    Dernier message: 02/02/2006, 18h21
  5. Réponses: 12
    Dernier message: 27/08/2004, 15h42

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