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 :

Récupération info txt dans tables


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut Récupération info txt dans tables
    re Bonjour,

    Je récupère des infos via le web sur des livres que j'incorpore par un copier/coller dans un champ memo d'une table sous access. Je désire extraire de ce champ memo le titre et l'auteur. Le champ memo se compose ainsi :

    txt txt txt txt
    txt txt
    Titre LE LIVRE
    txt txt txt txt
    Auteur MONSIEUR DUPONT
    txt txt txt txt txt
    txt txt

    Je cherche à faire des requettes de selections chaines de caractères sur le champ memo pour les transférer dans une table mais ca ne marche pas
    metrci de m'apporter une solution svp....

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 841
    Points
    23 841
    Par défaut
    Regarde l'aide l'instruction Instr() qui te permet de rechercher la position de départ d'un texte dans une chaîne de caractères. Tu vas aussi avoir besoin de Mid() qui te permet de découper un morceau de chaîne dans une autre.

    Personnelement, je ferai une fonction publique qui retrouverai les morceaux dont j'ai besoin car le faire directement dans une requête peut s'avérer délicat à mettre au point.

    Si tu as besoin d'un exemple de code, dit-le.

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    ho que oui un exemple de code ou la maniere de proceder me permetrait de comprendre l"execution.
    une fonction public???
    merci

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 841
    Points
    23 841
    Par défaut
    À mettre dans un module :

    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
    public function TrouverDonnees(prmDonnees as string, prmTexte as string) as string
       dim result as string
       dim debutDonnees as long
       dim c as string
     
       debutDonnees=instr(prmTexte, prmDonnees)
       if debutDonnees<>0 then
         debutDonnees=debutDonnees+len(prmDonnees) :'Saute l'identifiant de données
         debutDonnees=debutDonnees+1:'Saute l'espace après l'identifiant de données
     
         dim i as long:for i=debutDonnees to len(prmTexte)
           c=mid(prmTexte,i,1):'Récupère un caractère
     
           if c=vbLf or c=vbCr then
                'Saut de ligne ou Retour à la ligne détermine la fin des données
                exit for
              else
                result=result & c:'Ajoute le caractère lu au résultat
           end if
     
         next i
     
       end if
     
       TrouverDonnees=result
    end function
    Après il te suffit dans une requête MAJ de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TrouverDonnees("TITRE";[NomTonChampMemo])
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TrouverDonnees("AUTEUR";[NomTonChampMemo])
    pour récupérer l'info.

    Note : Code non testé.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut direct.......
    houa!!!!!! direct comme une lettre a la poste je te remercie beaucoup, on vois ton professionnalisme sur la question. Merci beaucoup.

    une question: sur chaque requette maj le module public recalcul les données?

    Désirant compléter ma procédure, puis-je automatiser ma procédure copier/coller de ma page web dans le control mémo par un bouton action?

    merci

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 841
    Points
    23 841
    Par défaut
    Citation Envoyé par pascalourox Voir le message
    houa!!!!!! direct comme une lettre a la poste je te remercie beaucoup, on vois ton professionnalisme sur la question. Merci beaucoup.
    20 ans de métier ça finit par se voir ;-).

    une question: sur chaque requette maj le module public recalcul les données?
    Je ne suis pas sur de comprendre ta question.

    Chaque fois tu appeles cette fonction elle est exécutée donc dans une requête MAJ elle sera exécuter autant de fois qu'il y a d'enregistrement x 2 puisque tu as 2 champs.

    Cela peut être un problème car cela ralentit énormément l'exécution de la requête mais c'est tellememt plus simple à écrire que cela en vaut le coup. Mais tu ne semble pas avoir un volume très important, sinon tu ne ferais pas des copier-coller manuel, donc ce ne devrait pas être un problème majeur.

    Désirant compléter ma procédure, puis-je automatiser ma procédure copier/coller de ma page web dans le control mémo par un bouton action?
    Je ne sais vraiemnet pas. Je suppose que oui puisque Access est capable d'interagir avec le presse papier de Windows mais je ne l'ai fait qu'une seule fois et c'étais il y a trop longtemp.

    Je t'invite à jeter un oeil à la FAQ et à créer une nouvelle discussion sur ce sujet si tu ne trouves rien.

    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut un tout petit prob!
    tout marche bien, un seul probleme il ne faut pas lire la première ligne du champ memo (certains caractères font partie de ma recherche et le retour de chaine est erronée).

    Quelle instruction de code dois-je rajouter au code ci dessus

    exemple de mon fichier memo

    blablablabal blabla bla EDITEUR blabla blablabla blabla
    blabla
    bla
    bla
    bla
    Editeur blablablabla bla
    blabla
    bla
    ...

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 841
    Points
    23 841
    Par défaut
    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
    public function TrouverDonnees(prmDonnees as string, prmTexte as string) as string
       dim result as string
       dim debutDonnees as long
       dim c as string
     
       dim texte as string   dim i as long
     
       for i=1 to len(prmTexte)
         c=mid(prmTexte,i,1):'Récupère un caractère
     
           if c=vbLf or c=vbCr then
                'Saut de ligne ou Retour à la ligne détermine la fin des données
                texte=mid(prmTexte, i+1):'Récupère la fin du texte après la 1ère ligne
                exit for
           end if
     
       next i    
     
       debutDonnees=instr(texte, prmDonnees)
       if debutDonnees<>0 then
         debutDonnees=debutDonnees+len(prmDonnees) :'Saute l'identifiant de données
         debutDonnees=debutDonnees+1:'Saute l'espace après l'identifiant de données
     
         for i=debutDonnees to len(texte)
           c=mid(texte,i,1):'Récupère un caractère
     
           if c=vbLf or c=vbCr then
                'Saut de ligne ou Retour à la ligne détermine la fin des données
                exit for
              else
                result=result & c:'Ajoute le caractère lu au résultat
           end if
     
         next i
     
       end if
     
       TrouverDonnees=result
    end function

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    Re bonjour, apres une petite période d'absence

    J'ai essayer le rajout du code, je suis à l'identique, la première ligne du champ et toujours lu donc le retour de chaine n'est pas bon (du moin les donnees pour moi ne sont pas exploitable).

    Il faudrait peut etre mettre une comparaison de chaine lors de la lecture de la chaine "editeur" et continuer la recherche si la chaine ne correspond pas jusqu'au prochain "editeur" rencontré?

    Merci

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    re: Juste une précision. dans la discution précedente, l'automatisation du copier/coller est faite et cela marche à merveille grace à des conseils avisés sur les formulaires.

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 841
    Points
    23 841
    Par défaut
    Citation Envoyé par pascalourox Voir le message
    Re bonjour, apres une petite période d'absence

    J'ai essayer le rajout du code, je suis à l'identique, la première ligne du champ et toujours lu donc le retour de chaine n'est pas bon (du moin les donnees pour moi ne sont pas exploitable).
    Tu peux exécuter le code lpas à pas et voir pourquoi la 1ère fin de ligne n'est pas reconnu. Pour connaître le code numérique correspond à un caractère il faut utiliser Acs(LeCaractere). Actuellement il teste Chr(13) (vbCr) et Chr(10) (vbLF).

    Il faudrait peut etre mettre une comparaison de chaine lors de la lecture de la chaine "editeur" et continuer la recherche si la chaine ne correspond pas jusqu'au prochain "editeur" rencontré?

    Merci
    Tu peux faire cela aussi gérer un compteur qui compte le nombre de fois où tu as éditeur et réagir quand il est égale à 2.

    Un truc auquel je viens de penser tu pourrais utiliser la commande Split() pour trabdormer ta chaîne en un tableau de ligne, cela simplifierai le code.

    A+

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut Tjr le même prob
    Re: Aprés differents essais j'ai avancé sur d'autres points mais celui ci reste encore non résolu et je suis bloqué.

    Tout Marche bien sauf que le mot "editeur" se trouve deux fois dans le texte manipulé.

    Le code sur la non lecture de la première ligne du texte ou se trouve le premier mot editeur ne fonctionne pas.

    Le fait de détablir un compteur sur "editeur" avec validation de la chaine trouvé non plus.

    La requette MAJ avec la variable TrouverDonnées "editeur" sur le 1er code fait qu'il ne lit pas le texte en entier. Il valide la recherche et passe à la 2ème recherche TrouverDonnées. Le compteur de la variable m'indique toujours 1 malgrés que le mot mot "editeur soit plusieurs fois dans le texte. Split meme prob.

    y a t'il une soluce au probème... merci d'avance.

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 841
    Points
    23 841
    Par défaut
    La solution que je t'ai fournie est correcte en principe mais c'est la mise en pratique qui pêche.

    Avec le code suivant pour voir ce que tu lis au niveau binaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function AfficherChar(prmDonnees as string)
       dim i as integer
       for i=1 to len(prmDonnees)
          debug.print mid(prmDonnees,i,1), asc(mid(prmDonnees,i,1))
       next i
    end sub
    Ceci va t'afficher les caractères contenus dans prmDonnees et la valeur ascii correspondante. Normalement tu devrais voir 13 et 10 dans la colonne Ascii, à la fin de chaque ligne mais il se peut très bien que tu ai autre chose.

    Avec ça tu devrais pouvoir adapter le code fourmit pour répondre à tes besoins.

    A+

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut Tjrs même Probleme sur lecture control txt
    rebonjour,

    Ce dois être moi qui me mélange les pinceaux...

    Je fais suivre un exemple de la base pour étudier le code d'extraction des données du control mémo.

    Le problème et sur l'extraction des données suite à la recherche sur le mot éditeur.

    Merci d'avance pour la solution.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 42
    Points
    42
    Par défaut fichier access baserecup.mdb
    fichier exemple baserecup.zip

Discussions similaires

  1. Importation fichier txt dans table SQL server
    Par vito30620 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/09/2013, 08h41
  2. [WD14] charger fichier txt dans table
    Par KANACHE dans le forum WinDev
    Réponses: 15
    Dernier message: 17/05/2011, 12h37
  3. Load fichier txt dans table DB2
    Par enovia dans le forum DB2
    Réponses: 3
    Dernier message: 01/12/2010, 13h19
  4. Mapping et récupération de données dans table externe
    Par titouille dans le forum Hibernate
    Réponses: 2
    Dernier message: 06/06/2008, 10h04
  5. Problème de récupérations de données dans une table mysql
    Par Helpine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/03/2006, 20h07

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