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

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Word COM Addin : comment itérer sur chaque élément d'une sélection de textes non consécutifs (touche Ctrl)
    Bonjour,

    Je développe un complément COM Addin pour Word 2007/2007 qui aide les utilisateurs à poser des styles "Custom" dans un flux de texte.

    Je n'ai aucun problème pour appliquer mes styles sur le paragraphe placé sous un curseur unique, ou sur toute une sélection de texte même si elle s'étend sur plusieurs paragraphes consécutifs.

    En revanche, lors que mon développement essai d'appliquer mes styles sur des sélection de textes non consécutifs (fait en sélectionnant différent morceaux de textes dans le document à l'aide de la touche 'Ctrl'), mon selection.Range.Style = myStyle n'impacte que le dernier style sélectionné à l'aide de la touche Ctrl.

    Comment est-il possible d’itérer sur l'ensemble des blocs composant ma sélection?

    Merci d'avance,

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je ne pense pas que ce soit possible.
    Word ne traite qu'un seul objet sélection. Dans le cas d'une sélection multiple, il n'en traite qu'un morceau et en l'occurrence, le dernier.


    Mais, dans le cas des styles je pense uqe ça fonctionne, essaie d'appliquer le style sans utiliser le range de l'objet selection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Style = "Mon style"

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bien vu Heureux-oli,

    Si je fais un mySelection.Style="monStyle" sur une sélection de texte non consécutif, monStyle est correctement appliqué sur l'ensemble des parties sélectionnées.

    En revanche, ça ne solutionne pas mon problème puisque j'ai besoin d'appliquer des traitements différents sur chacun des blocs de la sélection et c'est pour cela que j'essayais d'itérer sur chacun d'entre eux.

    Sur un bloc consécutif de paragraphes, je fonctionnais comme ça :
    For i=0 as Integer to mySelection.Range.paragraphs.count
    Dim myStyle as Word.Style = customStyle(i)
    mySelection.Range.paragraph(i).Style = myStyle
    i++
    next i
    Malheureusement, en cas de sélection non consécutive, je n'ai trouvé aucune collection sur laquelle itérer.

    Merci quand même, j'ai appris quelque chose.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre aide.

    J'ai finalement trouvé une solution qui me convient, la voici :
    J'utilise l’événement WindowSelectionChange pour récupéré chaque changement dans la sélection du corps de texte.
    Si la touche Ctrl est pressée à ce moment, j'ajoute la nouvelle sélection à ma liste de sélection.
    Sinon, je vide ma liste de sélection et j'ajoute la nouvelle sélection à ma liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public mySelectionStack as New ArrayList
     
    Private Sub myWordApp_WindowSelectionChange(ByVal Sel As Selection) Handles myWordApp.WindowSelectionChange
    	If My.Computer.Keyboard.CtrlKeyDown Then    'Si la touche CTRL est préssée, on ajoute la nouvelle sélection à la pile de sélection
    		mySelectionStack.Add(Sel.Range)
    	Else                                        'Sinon, l'utilisateur a fait une sélection standard, on réinitialise la pile avec juste la nouvelle sélection
    		mySelectionStack = New ArrayList()
    		mySelectionStack.Add(Sel.Range)
    	End If
    End Sub
    Ensuite je peux faire un For Each sur chaque élément de mon tableau pour faire des traitements particuliers sur chaque partie de mes sélections non contiguës.

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Bien pensé !

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2015, 15h11
  2. [XL-2007] Cibler des cellules sur chaque ligne dans une sélection
    Par Ghuron dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/09/2014, 09h59
  3. Réponses: 2
    Dernier message: 25/08/2011, 17h43
  4. FAQ : Comment alterner les couleurs de chaque élément d'une liste déroulante ?
    Par yoghisan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 04/06/2007, 14h15
  5. Réponses: 1
    Dernier message: 09/05/2007, 15h58

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