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 Word Discussion :

Incrémentation simultané de 2 variables


Sujet :

VBA Word

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Incrémentation simultané de 2 variables
    Bonjour,

    Dans le cadre d'un projet je souhaiterais que mon programme détecte les mots-clés (que j'ai ultérieurement définis) dans un document Word purement textuel.

    Pour cela j'utilise l'outil Dictionnaire où tous les mots du fichier en question sont répertoriés, ensuite je veux qu'il compare chaque mots à la liste de mots clés que j'ai défini, cela sous-entend qu'il y a une boucle for dans une boucle for et que l'incrémentation des 2 variables se fasse simultanément. Ci-ci¡ontre l'extrait du programme qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    MotsCles = Array("blo", "bla")
    
    For Each wd In Selection.Words
        tmp = Split(LCase(wd.Text), "'")
        For i = 0 To UBound(tmp)
            For Each k In dict.keys
                For y = 0 To UBound(MotsCles)
                    If k <> MotsCles(y) Then dict.Remove k
                Next y
            Next k
         If dict.Exists(tmp(i)) Then dict(tmp(i)) = dict(tmp(i)) + 1 Else dict(tmp(i)) = 1
         Next i
    Next wd
    Je veux que l'incrémentation de y et k se fasse en même temps.

    Je remercie toute aide qui me sera utile pour confronter ce gros problème si besoin j'afficherais le programme complet :

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 4 388
    Points : 11 174
    Points
    11 174
    Billets dans le blog
    30
    Par défaut
    Citation Envoyé par Dunilca0 Voir le message
    Bonjour,

    La chaîne "'" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp = Split(LCase(wd.Text), "'")
    est considéré comme un mot à part entière, le résultat de la fonction Split par rapport à un mot ne peut être que vide.
    Le chargement de votre variable dictionnaire doit prendre un temps non négligeable et la comparaison avec chaque mot dans vos boucles doit encore dégrader un peu plus le temps de traitement.
    Vous pourriez arriver au même résultat avec ce genre de 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
     
    Sub Test()
     
    Dim MotsCles As Variant, Tmp() As Variant
    Dim I As Long, J As Long
     
        ActiveDocument.Select
     
        With Selection
     
            MotsCles = Array("blo", "bla")
            ReDim Tmp(UBound(MotsCles), 1)
            For I = LBound(Tmp, 1) To UBound(Tmp, 1)
                Tmp(I, 0) = MotsCles(I)
                Tmp(I, 1) = 0
            Next I
     
            For J = 1 To .Words.Count
                For I = LBound(Tmp, 1) To UBound(Tmp, 1)
                    If InStr(1, .Words(J), Tmp(I, 0), vbTextCompare) > 0 Then Tmp(I, 1) = Tmp(I, 1) + 1
                Next I
            Next J
     
        End With
     
        For I = LBound(Tmp, 1) To UBound(Tmp, 1)
            Debug.Print Tmp(I, 0) & " : " & Tmp(I, 1)
        Next I
     
    End Sub
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Eric,

    Premièrement, je ne saurais autrement pas vous remercier qu'en vous remerciant, votre programme est beaucoup plus compact et correspond tout à fait à ce que je cherche ! Mille mercis !
    Juste, ce que je cherche est une phrase au lieu d'un seul mot quelles modifications dois-je apporter au programme ? C'est-à-dire, si au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MotsCles = Array ("bla","blo")
    j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MotsCles = Array ("bla blo bli","blo", "blu bli bla)
    Je vous remercie d'avance

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 4 388
    Points : 11 174
    Points
    11 174
    Billets dans le blog
    30
    Par défaut
    Citation Envoyé par Dunilca0 Voir le message
    Il faut juste travailler au niveau paragraphe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            For J = 1 To .Paragraphs.Count
                For I = LBound(Tmp, 1) To UBound(Tmp, 1)
                    If InStr(1, .Paragraphs(J).Range, Tmp(I, 0), vbTextCompare) > 0 Then Tmp(I, 1) = Tmp(I, 1) + 1
                Next I
            Next J
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

Discussions similaires

  1. [XL-2010] Incrémentation périodique d'une variable en VBA
    Par frankytactik dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/02/2013, 20h00
  2. [VBA-E] guillements dans une variable string
    Par repié dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/03/2006, 14h42
  3. [VBA] ne reconnait pas une variable
    Par gyzmo5 dans le forum Access
    Réponses: 6
    Dernier message: 26/01/2006, 13h26
  4. [VBA] taille max d'une variable public
    Par gigs dans le forum Général VBA
    Réponses: 9
    Dernier message: 23/11/2005, 16h27
  5. [VBA] Mettre un tableau de variable en paramètre
    Par loacast dans le forum Général VBA
    Réponses: 10
    Dernier message: 15/11/2005, 12h28

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