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 :

Comment compter les mots dans un champ texte


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Comment compter les mots dans un champ texte
    Bonsoir,

    Dans l'une de mes tables, j'ai un champ texte long, dans lequel j'enregistre mes descriptifs touristiques pour chaque point d'intérêt. Ayant besoin de faire traduire ces textes, les organismes me demande combien de mots je dois faire traduire, pour pouvoir m'établir un devis. J'ai vu qu'il y avait des posts pour compter les caractères, mais sur les mots, ce que j'ai trouvé ne donne rien, parce que je ne sais comment appliquer du code vba pour faire une requete sur un champ précis, dans une table précise.

    Quelqu'un aurait il déjà procédé à un comptage de mots ?

    En vous remerciant par avance
    Nath

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Bonsoir,

    Il faudrait regarder du côté de la fonction split(chaîne, séparateur) :

    Le séparateur pourrait être l'espace , étudier aussi les caractères de ponctuation ou l'apostrophe.

    La fonction split va éclater le texte en mots copiés dans un tableau.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    t=split(texte," ")
     
    nbMots = UBound(t)+1
    La fonction UBound(t) donne l'indice de la borne supérieure du tableau. t

    Cdlt,

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Une astuce consiste à remplacer les ponctuations par des espaces.
    Aussi remplacer les espaces double par des espaces simples tant qu'on peut le faire.
    Et enfin faire un trim.

    Comme cela il ne reste plus que des mots séparé par un espace et on peut faire le split.

    A+

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Ouille ! je ne comprends pas bien ce langage car je ne suis pas programmeur. Tout d'abord, je vais faire une requête pour récupérer ma colonne de champs "Descriptif", pour ne pas altérer l'original que j'utilise en fusion de document.

    Ensuite, je vais devoir retirer la ponctuation et rectifier les éventuels double-espaces. Mais comment je fais çà ?

    Merci pour votre aide

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    En ajoutant les conseils de Marot,

    Tu peux essayer cette fonction en la copiant dans un module indépendant d'Access :

    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
    Public Function cptMots(c As String) As Long
    Dim t As Variant
     
    ' Remplace la ponctuation par un espace
    c = Replace(c, ".", " ")
    c = Replace(c, ",", " ")
    c = Replace(c, ";", " ")
    c = Replace(c, ":", " ")
    c = Replace(c, "'", " ")
     
    c = Trim(c) ' élimine les espaces avant et après
     
    ' réduit les multiples espaces à 1 espace
    c = Replace(c, "    ", " ")
    c = Replace(c, "   ", " ")
    c = Replace(c, "  ", " ")
     
    t = Split(c, " ")
     
    cptMots = UBound(t) + 1 ' Renvoi le nombre d'éléments du tableau
     
    End Function
    Ensuite, dans la requête, appeler cette fonction dans un champ calculé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbreMots : CptMots([Descriptif])
    A tester,

    Cdlt,

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Je viens de procéder à l'instant. j'ai donc créé un modèle en copiant le code fourni. j'y ai fait appel dans ma requête.

    Plusieurs messages m'indiquant un souci .

    - tout d'abord que l'appel de la fonction contient des parenthèses ou point inadaptés. J'ai donc essayé en retirant l'un ou l'autre des parenthèses. En vain
    - puis j'ai essayé de retirer l'expression NbreMots : et le message est "type de données incompatible dans l'expression du critère

    Donc cela ne fonctionne pas en l'état.

    Une autre idée ?

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Pouvez-vous copier le SQL de votre requête tel que vous l'avez avec la formule que je vous ai donné ?

    Il faut aller dans l'éditeur SQL et faire un copié-collé du code.

    Cdlt,

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Bonjour,
    Word, une valeur sûre :

    Nom : _compteur de mots.JPG
Affichages : 1359
Taille : 22,1 Ko

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonjour,
    Word, une valeur sûre :

    Nom : _compteur de mots.JPG
Affichages : 1359
Taille : 22,1 Ko
    Les gens aiment toujours mieux bricoler leur truc perso

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Pour info, si je cherche une solution plutôt que de recourir à word, c'est que je ne me vois pas vraiment faire du copier/coller de champ texte plus de 2000 fois entre access et word. S'il est possible de faire cette opération en une fois, pourquoi s'en priver. D'autant que j'ai lu que d'autres avaient eu le même besoin que moi, ce qui peut donc s'avérer utile.

    Je dois faire faire un devis pour de la traduction et l'on me demande le nombre de mots contenus dans mes fiches touristiques. Ces fiches vont de 200 à près de 1000 mots.

    Pour le code, je l'ai copié tel qu'indiqué en copier-collé dans la partie "critère" car je pensais que c'était là qu'il fallait le mettre après avoir créé ma requête pour extraite le champ Descriptif de ma table point d'intérêt. Ai-je mal fait ?

    Merci

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Bonsoir,
    autant utiliser les outils Word, je te propose ce code qui va lire ta table, remplir un document Word et afficher le nombre de mots à la fin:
    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
    Function fcompterMots()
    Dim oApWord As Object
    Dim oDb As DAO.Database, oRst As DAO.Recordset
    Dim sSQL As String
     
     sSQL = "select * from matable;"
     Set oDb = CurrentDb
     Set oRst = oDb.OpenRecordset(sSQL)
     
    Set oApWord = CreateObject("Word.Application")
    '    oApWord.Visible = True
     
    oApWord.Documents.Add
    ' créer un nouveau document Word
    With oApWord.ActiveDocument
    ' remplir le document
        Do Until oRst.EOF
            .Range.Text = .Range.Text & oRst.Fields("MonLongChamp").Value
            oRst.MoveNext
        Loop
    End With
     
    ' afficher le nombre de mots
    MsgBox oApWord.ActiveDocument.ComputeStatistics(wdStatisticWords) & " mots"
    oApWord.Quit False
     
    End Function

  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Citation Envoyé par Nath78 Voir le message
    Bonjour,

    Pour info, si je cherche une solution plutôt que de recourir à word, c'est que je ne me vois pas vraiment faire du copier/coller de champ texte plus de 2000 fois entre access et word. S'il est possible de faire cette opération en une fois, pourquoi s'en priver. D'autant que j'ai lu que d'autres avaient eu le même besoin que moi, ce qui peut donc s'avérer utile.

    Je dois faire faire un devis pour de la traduction et l'on me demande le nombre de mots contenus dans mes fiches touristiques. Ces fiches vont de 200 à près de 1000 mots.

    Pour le code, je l'ai copié tel qu'indiqué en copier-collé dans la partie "critère" car je pensais que c'était là qu'il fallait le mettre après avoir créé ma requête pour extraite le champ Descriptif de ma table point d'intérêt. Ai-je mal fait ?

    Merci
    Le code doit être placé dans un module indépendant, il faut créer un module et copier le code dedans, ça va aussi pour la fonction de tee-grandbois.

    Cdlt,

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    J'ai enregistré le code pour transférer les données de ma colonne descriptif dans word, dans un module comme indiqué.

    Ne pouvant ajouter de champ calculé dans la requête permettant d'extraire de ma table la colonne Descriptif, j'ai ouvert ma table T_Points_intérêt. Mais je ne vois pas comment utiliser ce champ, car je ne retrouve pas le nom du module enregistré avec le code fourni. Je ne sais pas comment indiquer à un champ de type calculé comment exécuter le module que vous m'avez indiqué.

    Désolée, le langage de programmation reste très très très incompréhensible pour moi.

  14. #14
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Pour la partie Word, je laisse tee-grandbois te répondre,

    mais concernant ma fonction, vous la copiez dans un module indépendant, et après dans la requête vous crée un champ calculé nbreMots avec les ":" du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbreMots : cptMots([Descriptif])
    ça n'a rien de bien sorcier

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Citation Envoyé par Nath78 Voir le message
    J'ai enregistré le code pour transférer les données de ma colonne descriptif dans word, dans un module comme indiqué.

    Ne pouvant ajouter de champ calculé dans la requête permettant d'extraire de ma table la colonne Descriptif, j'ai ouvert ma table T_Points_intérêt. Mais je ne vois pas comment utiliser ce champ, car je ne retrouve pas le nom du module enregistré avec le code fourni. Je ne sais pas comment indiquer à un champ de type calculé comment exécuter le module que vous m'avez indiqué.

    Désolée, le langage de programmation reste très très très incompréhensible pour moi.
    Le module une fois créé, il faut le modifier :
    remplacer matable par T_Points_intérêt
    remplacer MonLongChamp par Descriptif
    Ensuite, toujours dans VBA, rester dans la fonction et appuyer sur l'icône entourée qui va exécuter le code,
    attendre le message qui affichera le nombre de mots.
    Nom : VBA_ExecuterCode.JPG
Affichages : 1316
Taille : 21,0 Ko
    Cela peut être très long à cause de la communication entre applications assez consommatrice de ressources.

  16. #16
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je trouve enfin un peu de temps pour reprendre mon travail sur les fonctions de ma base de données.

    Merci à vous tous pour votre aide.

    J'ai repris la solution de Tee_grandbois qui me semble la plus simple de prime abord. Elle est surtout très très facile à comprendre. Merci. Toutefois, quand j'active le lancement du module, une pop-up s'ouvre pour me demander un nom de macro. J'en déduis qu'il faut aussi créer une fonction macro. Ce que je ne sais pas faire non plus. Une idée sur le comment faire aussi bien expliqué ?

    Mille merci à vous. Que ferait on sans vous et votre génie ? ;-)

    Citation Envoyé par tee_grandbois Voir le message
    Le module une fois créé, il faut le modifier :
    remplacer matable par T_Points_intérêt
    remplacer MonLongChamp par Descriptif
    Ensuite, toujours dans VBA, rester dans la fonction et appuyer sur l'icône entourée qui va exécuter le code,
    attendre le message qui affichera le nombre de mots.
    Nom : VBA_ExecuterCode.JPG
Affichages : 1316
Taille : 21,0 Ko
    Cela peut être très long à cause de la communication entre applications assez consommatrice de ressources.

  17. #17
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonjour

    une pop-up s'ouvre pour me demander un nom de macro
    Normal sur une fonction. On ne peut pas l'exécuter avec la flèche ou la touche F5 ; il faut l'appeler.

    Soit tu la transformes en Sub (ne pas oublier de modifier également le End) et là, si ton curseur est dans le code, tu peux utiliser la flèche ou la touche F5,
    soit tu crées un Sub pour appeler la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
        Call fcompterMots()
    End Sub

  18. #18
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Bonjour titi95 et Nath78,
    Citation Envoyé par titi95
    Normal sur une fonction. On ne peut pas l'exécuter avec la flèche ou la touche F5 ; il faut l'appeler.
    oui, il est possible de lancer une fonction ou un Sub avec la flèche d'exécution (ou touche F5) j'ai bien précisé la méthode d'exécution:
    Citation Envoyé par tee_grandbois
    Ensuite, toujours dans VBA, rester dans la fonction et appuyer sur l'icône entourée qui va exécuter le code,
    attendre le message qui affichera le nombre de mots.
    sinon, il existe une deuxième solution :
    Citation Envoyé par Nath78
    Toutefois, quand j'active le lancement du module, une pop-up s'ouvre pour me demander un nom de macro.
    il suffit de sélectionner la "macro" à lancer depuis cette pop-up qui affiche toutes les "macros" du module.

    Cela fonctionne uniquement avec des fonctions et des Sub n'ayant pas de paramètres en entrée d'où l'utilisation du terme "macro".

  19. #19
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Pour concrétiser l'idée de User() je te joins une petite base de données.

    Tu y trouveras
    1. Une table qui contient le résumé de livres.
    2. Une requête qui te permet de compter les mots de chaque résumé.
    3. Un module qui reprend la fonction développée par User.


    Tu trouveras dans la requête la façon d'utiliser la fonction cptMots

    N'hésite pas à revenir vers nous
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Compter les éléments dans un champ
    Par sucreMan dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 22/05/2008, 12h11
  2. Réponses: 3
    Dernier message: 13/03/2007, 13h40
  3. [VBA-A]Remplacer les espaces dans un champ texte
    Par Ericka dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/05/2006, 15h31
  4. Réponses: 10
    Dernier message: 29/04/2006, 10h40
  5. [HTML] formulaire gérer les espaces dans un champs texte
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h17

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