Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1611 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème avec .find

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec .find

n°1422677
acorsa
Posté le 09-08-2006 à 09:40:50  profilanswer
 

Bonjour,
J'ai un problème avec le find...je m'explique je voudrais simplement remplacer ds un texte la suite de caractère "&&" par un nombre [1] puis [2]....et c'est ça le problème j'incrémente un compteur et je dois remplacer la cha9ne de caractère par un nombre différent à chaque fois.
Le problème c'est que mon code me remplace bien les "&&" avec un nombre qui s'incrémente ms c pas ds l'ordre, par exemple le 2 premiers serotn 1 et 2 puis ça va de 2 en 2, donc le 4 eme à la valeur 3 etc..enfin c'est n'impoorte quoi!!
Si vous avez déjà rencontré ce problème...please give me a solution!!!  
Merci

mood
Publicité
Posté le 09-08-2006 à 09:40:50  profilanswer
 

n°1422720
zephyron1
Posté le 09-08-2006 à 11:14:03  profilanswer
 

:heink: Bizarre en effet... Mais find() c'est pas super super comme fonction.
Tu as regardé ce topic : http://forum.hardware.fr/hardwaref [...] 3792-1.htm ?
Regardes mon dernier post dessus, ça peut être utile.

n°1422772
acorsa
Posté le 09-08-2006 à 11:56:51  profilanswer
 

je viens de trouver le problème ct tout con....Bon mtnt autre question (ms je vais créer un nouveau message)  
Je veux remplacer des mots et pour cela je fais une boucle While..et j'ai rien trouvé de bien pour m'arrêter.While i <> ActiveDocument.Words.Count n'est pas efficace car il y a trop de mots ds mon document.Il faudrait un truc du genre While (!EOF) ms ça n'existe pas en VB.
T'as une idée?

n°1422819
kiki29
Posté le 09-08-2006 à 13:26:41  profilanswer
 

Un peu en retard mais inspiré du Delete Crochets si cela peut rendre service


Option Explicit
 
Private Function FindReplace(Chaine As String) As String
Dim Pos As Long, Taille As Long
Dim strR As String, strL As String, Str As String
Dim Cpt As Long, Ch As String
Dim ChRecherchée As String
 
    Cpt = 0
    ChRecherchée = "&&"
 
    Do
        Pos = InStr(Chaine, ChRecherchée )
        Taille = Len(Chaine)
        If Pos > 0 Then
            Cpt = Cpt + 1
            Ch = "[" & Cpt & "]"
            strL = Left(Chaine, Pos - 1)
            strR = Right(Chaine, Taille - Pos - Len(ChRecherchée) + 1)
             
            Str = strL & Ch & strR
            Chaine = Str
        End If
    Loop Until Pos = 0
 
    Application.StatusBar = "Nb Remplacement : " & Cpt
    FindReplace = Chaine
End Function
 
 
Public Sub Remplacer()
Dim Str As String
    ActiveDocument.Select
    Str = Selection
    Selection = FindReplace(Str)
    Application.ScreenRefresh
End Sub


Message édité par kiki29 le 09-08-2006 à 13:58:57
n°1422865
acorsa
Posté le 09-08-2006 à 14:15:42  profilanswer
 

merci ms je vais mieux t'expliquer mon problème...
Je te montre mon code je pense que c plus rapide au niveau exécution:
 
Sub add_ID(ref As Integer)
 
Selection.Find.ClearFormatting
 
reference = ref
 
With Selection.Find
    While i <> ActiveDocument.Words.Count
        .Forward = True
        .ClearFormatting
        .MatchWholeWord = True
        .MatchCase = False
        .Wrap = wdFindStop
        .Execute FindText:="&&"
         
        If Selection.text = "&&" Then
            Selection.Delete
            Selection.InsertBefore ("[" & reference & "]" )
            Selection.Style = "monStyle"
            Selection.Font.Color = wdColorRed
            Selection.Font.Underline = wdUnderlineNone
            Selection.Font.Bold = True
            reference = reference + 1
        End If
         
    i = i + 1
    refTotal = reference - 1
    Wend
End With
 
End Sub
 
ça ça marche, mon problème est de le modifier pour que la boucle s'arrête dès qu'il n'y a plus rien à remplacer.


Message édité par acorsa le 09-08-2006 à 14:19:35
n°1422985
kiki29
Posté le 09-08-2006 à 16:10:48  profilanswer
 

Eh bien au niveau temps y'a pas photo : sur un doc bidon de 94 pages le mien : 0.6 s, ton code 19 s,sans compter qu'il ne fonctionne pas correctement

n°1423019
kiki29
Posté le 09-08-2006 à 16:37:55  profilanswer
 

Maintenant les temps sont comparables et ton code fonctionne correctement, reste peut etre à l'optimiser


Sub add_ID(ref As Long)
Dim Reference As Long, RefTotal As Long
     
    ActiveDocument.Select
    Selection.Find.ClearFormatting
    Reference = ref
 
    With Selection.Find
        .Execute FindText:="&&"
        If Selection.Find.Found = False Then Exit Sub
        With Selection
            .Delete
            .InsertBefore ("[" & Reference & "]" )
            .Style = "monStyle"
            .Font.Color = wdColorRed
            .Font.Bold = True
            .MoveRight Unit:=wdCharacter, Count:=1
            Reference = Reference + 1
        End With
         
        While Selection.Find.Found = True
            .Forward = True
            .ClearFormatting
            .MatchWholeWord = True
            .MatchCase = False
            .Wrap = wdFindStop
            .Execute FindText:="&&"
            If Selection.Find.Found = True Then
                With Selection
                    .Delete
                    .InsertBefore ("[" & Reference & "]" )
                    .Style = "monStyle"
                    .Font.Color = wdColorRed
                    .Font.Bold = True
                    .MoveRight Unit:=wdCharacter, Count:=1
                    Reference = Reference + 1
                End With
            End If
            RefTotal = Reference - 1
        Wend
    End With
End Sub


Message édité par kiki29 le 09-08-2006 à 16:54:51
n°1423034
acorsa
Posté le 09-08-2006 à 16:50:11  profilanswer
 

Alors là....chapeau!!!
Je te remercie vraiment...tu me donne de quoi bien terminer ma journée!!!
Merci beaucoup!

n°1423042
acorsa
Posté le 09-08-2006 à 16:54:06  profilanswer
 

Bon là je viens de tester et retester sur des gros fichiers et je me dois de te re-remercier!!!
C'est là qu'on voit les pros qd même!!!
Merci!

n°1423044
kiki29
Posté le 09-08-2006 à 16:55:54  profilanswer
 

Je viens de rajouter après ton post dans le code un :


       If Selection.Find.Found = False Then Exit Sub  


 
après le 1er .execute
 


    With Selection.Find  
        .Execute FindText:="&&"  
        If Selection.Find.Found = False Then Exit Sub  <<<<<<<<<<<
        .....


Message édité par kiki29 le 09-08-2006 à 17:51:02
mood
Publicité
Posté le 09-08-2006 à 16:55:54  profilanswer
 

n°1423130
acorsa
Posté le 09-08-2006 à 18:01:22  profilanswer
 

pkoi ça marchait très bien?

n°1423162
kiki29
Posté le 09-08-2006 à 19:03:42  profilanswer
 

Essaie sans en moulinant 2 fois le même fichier ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème avec .find

 

Sujets relatifs
Probleme d'affichage aprés une balise divProbleme url include
rmi probleme d'executionProblème sur un flux de lecture à partir d'un fichier .txt
probleme iframe easyphpProblème avec la méthode Find
[Scripts Shell] Commandes find & echo - probleme d'affichage[VBA] problème et recherche de date avec Find...
[BATCH] Problème avec reg findproblème avec find et grep ss unix
Plus de sujets relatifs à : Problème avec .find


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR