[VB .NET] Traitement vba trop lent ??

Traitement vba trop lent ?? [VB .NET] - VB/VBA/VBS - Programmation

Marsh Posté le 29-01-2004 à 12:36:20    

Bonjour !
 
Alors voici mon problème : il s'avère que je dois effectuer une recherche de termes spécifiques dans un document rtf en "automatisant" Word ; les termes trouvés doivent être surlignés. Le problème est que le nombre de termes (stockés dans une hashtable) peut être particulièrement important et au final, je me rends compte que le traitement devient particulièrement lent.
j'utilise du vba directement intégré dans VB .NET et je pense que c'est à cela qu'est dû la lenteur... Voici mon code :
 


        Dim oW As Word.Application = New Word.Application
        Dim oWDoc As Word.Documents = oW.Documents
        Dim d As DictionaryEntry
 
        oWDoc.Open(path)
 
        For Each d In hash_bdd
            temp = Split(d.Value, ";", 3, CompareMethod.Text)
 
            With oWDoc.Application.ActiveDocument.Range.Find
                .ClearFormatting()
                .Text = temp(0) 'Texte recherché
                .MatchWholeWord = True 'On cherche l'expression exacte
                .Highlight = False
                With .Replacement 'On définit les params de remplacement
                    .ClearFormatting()
                    .Text = temp(0) 'Le texte n'est pas remplacé, donc on garde le même terme
                    .Highlight = True 'Mais on le surligne !
                End With
                .Execute(Replace:=Word.WdReplace.wdReplaceAll, Format:=True)
            End With
        Next d


 
Voilou. Alors ma question serait de savoir s'il n'y a pas moyen d'utiliser des fonctions proprement internes à VB .NET (contenues dans le composant Microsoft Word 9.0 Object Library, par exemple) et qui seraient peut-être bcp plus efficaces que les fonctions utilisées par le biais de vba...
Voilà si qqun peut m'éclairer, merci bcp !
 :hello:


---------------
Sans ma barbe, quelle barbe !
Reply

Marsh Posté le 29-01-2004 à 12:36:20   

Reply

Marsh Posté le 29-01-2004 à 15:07:57    

Alors je viens de trouver, ça va bien 4x plus vite...
Voici mon code :


        For Each d In hash_bdd
            temp = Split(d.Value, ";", 3, CompareMethod.Text)
 
            wordRange.Find.ClearFormatting()
            wordRange.Find.Text = temp(0)
            wordRange.Find.MatchWholeWord = True
            wordRange.Find.Replacement.Highlight = True
            wordRange.Find.Execute(, , , , , , , , , , replaceAll, , , , )
        Next d


 
Je me demande maintenant s'il n'y a pas moyen d'encore optimiser cela... (pas moyen de passer outre le replace ??? Si je mets le surlignage simplement sur le find, ça ne marche pas :/)  
Et comment changer la couleur du surlignage ??? Parce que la propriété highlightcolorindex dépend de Range, et si je la modifie, tout le texte est alors surligné o_O


---------------
Sans ma barbe, quelle barbe !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed