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

VB.NET Discussion :

Naviguer dans word


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut Naviguer dans word
    Ou l'art de travailler à l'aveugle...

    J'ai beaucoup de mal avec word ^^ Je me retrouve à l'heure actuel à travailler sur un modèle word, composé d'une multitude de textes fixes. On vient de me demander d'ajouter à côté d'un texte une mention "douteux", donc en gros juste du texte, en rouge et gras qui vient s'insérer dans une phrase après un retour à la ligne.

    J'ai testé plusieurs choses, le premier truc qui coince, c'est la sélection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    otab(j).Content.Select()
                        oWord.Selection.Find.Text = "A070-G/B/L cassé Eau (concA)"
                        oWord.Selection.Find.Replacement.Text = "A070-G/B/L cassé Eau (concA)"
                        oWord.Selection.Find.Execute(Replace:=Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll)
    J’émets sans trop d'assurance l'hypothèse que à partir de la j'ai mon curseur qui est où je le souhaite.

    Après voilà le déroulement, capturé par macro tant bien que mal (mal foutu le système de macro word, comparé à Excel).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oWord.Selection.MoveRight(Count:=1)
                        oWord.Selection.TypeParagraph()
                        oWord.Selection.TypeText("Douteux")
                        oWord.Selection.MoveLeft(Count:=7, Extend:=WdMovementType.wdExtend)
                        oWord.Selection.Font.Bold = 1
                        oWord.Selection.Font.ColorIndex = WdColorIndex.wdRed
    Résultat : la selection n'a pas opéré, mon douteux est en fin de page tout en bas, bien séparé d'un retour à la ligne, en gras et rouge mais pas au bon endroit.

    J'ai aussi testé la méthode fufu sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    otab(j).Content.Select()
                        oWord.Selection.Find.Text = "A070-G/B/L cassé Eau (concA)"
                        oWord.Selection.Find.Replacement.Text = "A070-G/B/L cassé Eau (concA)" & vbcrlf & "douteux"
                        oWord.Selection.Find.Execute(Replace:=Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll)
    Mais là il survole le code sans rien faire (soit il trouve pas, soit la string de replacement lui plait pas.

    Help ^^

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Hello,

    désolé je réponds vite fait mais je pense que tu oublies de boucler sur le résultat et de sélectionner un nouveau range.
    Exemple de notre fonction de remplacement :
    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
        Public Sub Replace(ByVal strAChanger As String, ByVal strRempla As String)
            Dim rng As Microsoft.Office.Interop.Word.Range = DocWord.Range
     
            rng.Find.ClearFormatting()
            rng.Find.Forward = True
            rng.Find.Text = strAChanger
            rng.Find.Execute()
     
            Do While rng.Find.Found
                Dim rng2 As Microsoft.Office.Interop.Word.Range = DocWord.Range(rng.Start, rng.End)
                rng2.Select()
                rng2.Text = strRempla
                rng.Find.Execute()
            Loop
        End Sub

  3. #3
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Bonjour,

    Une réponse c'est déjà du luxe ^^

    En fait, je ne pense pas, dans mon cas, je sais, et ce sera toujours vrai, que la chaîne de caractère recherché n’apparaîtra qu'une fois, et si je n'utilise pas une procédure pour le faire c'est également parce que je ne souhaite que placer mon curseur, pour ensuite effectué un saut de ligne et écrire.

    J'ai cherché un peu partout, je suis tombé sur une page du msdn qui n'apparaissait pas avant (on dit merci à google, duckduckgo m'a permis d'avoir des résultats neutres contrairement à lui), j'ai trouvé une ligne qui pourrait changer la donne, je suis en train d'effectué un test (un peu long le programme) : oWord.Selection.Select(), parce que visiblement, il sélectionne pas le texte trouvé tout seul ...

    Marche pas ... la selection qui est retenu reste celle du otab(j).content.select :/

    Re edit : "When the item is found that matches the search criteria, it is automatically selected."
    Ba ... ça marche pas u_u Je pense finalement que le problème vient d'autre chose que le find, reste à savoir quoi.

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    On dirait effectivement qu'il coince à la sélection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    otab(j).Content.Select()
    Tu as essayé de le faire sur tout le document pour voir si ça donnait de meilleur résultat?

  5. #5
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Ba en fait otab(j).content c'est pas sensé sélectionner tout le document ? (sauf les textbox créé et le header/footer)

    C'est pas le premier cas où je dois récupérer le texte, dans mon exemple "concA" est un mot clé remplacé par une valeur plus explicite dans mon programme (par une petite fonction replace de ma création justement). La différence là c'est que je peux pas mettre de mot clé :/ l'ajout de "douteux" est soumis à conditions.

    Du coup, je vais tenter de copier mot pour mot le code vb.net (j'aime pas faire ça) et on verra...

  6. #6
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut


    Bon premièrement : avant de copier le msdn j'ai changé la chaine recherché, diminué la taille de la recherche, on sait jamais, ça restait assez spécifique. Ca n'a pas suffit ^^
    Ensuite j'ai fait le test : si ça marche, alors fait ça, sinon fait rien. Pas suffit.
    Et enfin j'ai changé la formule pour mettre directement : selection.find.execute("ma chaine").

    Et là ça fonctionne, ces trois éléments sont indispensables par contre, y compris la condition :/
    Du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if oWord.Selection.Find.Execute("cassé Eau (concA)") then
                    oWord.Selection.MoveRight(Count:=1)
                    oWord.Selection.TypeParagraph()
                    oWord.Selection.TypeText("Douteux")
                    oWord.Selection.MoveLeft(Count:=7, Extend:=WdMovementType.wdExtend)
                    oWord.Selection.Font.Bold = 1
                    oWord.Selection.Font.ColorIndex = WdColorIndex.wdRed
    end if
    Merci pour ton aide Sankasssss, sans me donner spécialement de solution, tu m'as tout de même permis de chercher au bon endroit ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. (VBA Word]Naviguer dans un tableau word
    Par aA189 dans le forum VBA Word
    Réponses: 6
    Dernier message: 17/09/2006, 20h14
  2. Reconnaître du style dans Word
    Par semaj_james dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 24/06/2004, 08h12
  3. [VB6] Modification objet OLE dans Word sous VB
    Par zworg dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/02/2004, 08h20
  4. Réponses: 2
    Dernier message: 19/01/2004, 12h19
  5. Fusion directe dans word
    Par wozzy dans le forum Access
    Réponses: 10
    Dernier message: 03/06/2003, 21h02

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