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

Macros et VBA Excel Discussion :

VBA Calculer le nombre de mots à l'intérieur d'un code html


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Par défaut VBA Calculer le nombre de mots à l'intérieur d'un code html
    Bonjour,

    Je dois calculer dans excel le nombre de mots d'une sélection de cellule qui contient ou pas du code html. Ce texte provient d'extraction de wordpress.

    Typiquement dans l'exemple: <td valign="top"><strong>toto fait du velo</strong></td> Word compte 5 mots, alors qu'il n'y en a que 4. Ce qui ne se trouve pas entre deux balises est compté comme un mot.

    Je souhaiterais connaître le nombre de mots qui apparaît visuellement dans l'éditeur de texte sans compter les caractères de balises.

    Pour compliquer un peu, j'ai besoin d'exclure les chaines de caractères qui contiennent des chiffres type "AGR0103" ou "01234"entre des balises ou pas.

    Est ce que vous avez une idée?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    tu peux faire cela en 2 etapes :
    1/ recuperer le texte qui est celui que tu cherches
    2/ Passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ubound(Split(" ",tontexte))
    pour récupérer la valeur max
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Par défaut
    bonjour merci de votre réponse. Juste pour préciser j'ai de vagues souvenir de VBA de l'école...

    J'ai trouvé ce code sur le net, mais il compte comme Word. Comment adapter avec Ubound(Split(" ",tontexte)).

    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
    Function traitementcomptermotrange(range As range)
    Dim NombreMots As Integer
    Dim departrecherche As Integer
    Dim newdepartrecherche As Integer
    Dim x As Integer
    Dim cellule As Variant
    Dim totalmots As Integer
    totalmots = 0
    For Each cellule In range 'Faire les opérations suivantes pour chaque cellule de la plage
        NombreMots = 1 'Initialisation du nombre de mot (on commence à 1)
        departrecherche = 1 'Initialisation de la recherche (caractère 1)
        newdepartrecherche = 1 'Initialisation nouvelle position départ
        For x = 1 To Len(cellule) 'Parcourir tous les caractères de la cellule
            If Not InStr(departrecherche, cellule, " ", 1) = 0 Then 'Si espace vide trouvé
                NombreMots = NombreMots + 1 'Incrémenter de 1 le nombre de mot
                newdepartrecherche = InStr(departrecherche, cellule, " ", 1) + 1 'Changement position de recherche
                departrecherche = newdepartrecherche 'nouvelle position de départ pour rechercher espace vide
            Else
                totalmots = totalmots + NombreMots 'Si pas d'espace vide trouvé alors on sort de la boucle
                Exit For
            End If
        Next
    Next
    traitementcomptermotrange = totalmots 'renvoi le nombre de mots total trouvé
    End Function
    merci de votre aide

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    attention à ne pas oublier qu'un tableau issu de Split commencera toujours à l'indice 0
    et un simple split va récupérer des portions de balises seules qui contiennent un espace, comme <td valign="top"><strong>toto

    une proposition de fonction, probablement perfectible qui exclut les portions contenant les deux chaines que tu as indiqué ainsi que les portions qui commencent par "<".
    Je n'ai pas le recul nécessaire pour juger si cette exclusion des "<*" est suffisante pour tout cas possible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function NB_MOTS(Source As Range) As Long
    Dim MesMots, i As Long, NbMots As Long
        MesMots = Split(Source.Value, " ")
     
        For i = LBound(MesMots) To UBound(MesMots)
            If Not MesMots(i) Like "*AGR0103*" And Not MesMots(i) Like "*01234*" And Not MesMots(i) Like "<*" Then NbMots = NbMots + 1
        Next i
     
        NB_MOTS = NbMots
    End Function
    cette fonction est utilisable depuis les feuilles de calcul Excel ou dans une procédure VBA

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Par défaut
    Merci beaucoup! mes cours de vba reviennent un peu

    j'ai testé avec par exemple l'exemple, j'obtiens 14 alors qu'il y a 8 mots selon moi: "150g" et "3380380046940" contiennent des chiffres et ne devraient pas être comptés. On s'était mal compris. La fonction If Not MesMots(i) Like "*AGR0103*" me sera utile pour autre chose.

    Code HTML : 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
    <div id="myText" style="visibility: hidden;">Copyright@brand</div>
    <table cellspacing="0" cellpadding="0">
    <tbody>
    <tr>
    <td valign="top"><b>Code</b></td>
    <td valign="top">LPDF0002</td>
    </tr>
    <tr>
    <td valign="top"><b>EAN</b></td>
    <td valign="top">3380380046940</td>
    </tr>
    <tr>
    <td valign="top"><b>Poids net</b></td>
    <td valign="top">150g</td>
    </tr>
    <tr>
    <td valign="top"><b>Langue d’étiquetage</b></td>
    <td valign="top">fr/de/nl/it</td>

    Je souhaiterais également pouvoir compter plusieurs cellules à la fois. Est ce que vous pouvez me donner encore un coup de pouce pour améliorer ?

Discussions similaires

  1. Calculer le nombre de mots dans un fichier texte
    Par attounsi dans le forum Pascal
    Réponses: 0
    Dernier message: 22/11/2013, 21h03
  2. calculer le nombre de mots identiques
    Par narjes81 dans le forum Débuter
    Réponses: 3
    Dernier message: 03/01/2011, 00h33
  3. un programme qui calcule le nombre des mots
    Par komat dans le forum Débuter
    Réponses: 3
    Dernier message: 06/12/2010, 22h46
  4. Réponses: 0
    Dernier message: 19/11/2010, 15h03
  5. [TSQL] calculer le nombre de mot dans une cellule
    Par ricachu dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 31/07/2006, 11h12

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