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

VBA Word Discussion :

comment Retenir une selection "faite via la souris" dans une variable vba (word) ?


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut comment Retenir une selection "faite via la souris" dans une variable vba (word) ?
    Hello à vous tous.

    Explication de mon casse tête..:
    Comme un exemple est souvent bien mieux parlant que beaucoup de prose ..

    Voilà mon exemple :


    Dans Word soit 2 tableaux..

    Admettons qu'avec ma souris je sélectionne la ligne 2 du tableau 2..
    et que je veuille que vba me réduise la ligne ..
    sous word, pas de menu proposé, donc je le fais manuellement via une petite astuce ..
    cela ... je sais le faire .... et le coder en vba..

    Mais, mon pb est qu'avant de réduire cette ligne,
    j'ai besoin d'intervenir sur toutes les lignes de tous les tableaux afin de conserver la valeur initiale de la hauteur de la ligne..
    (je peux en effet avoir besoin de ré-afficher la ligne avec sa hauteur initiale)

    * pour cela, j'utilise une astuce.. je crée une nouvelle colonne dans la page active, (de très petite taille) dans laquelle je copie cette hauteur initiale.....)
    * (pas trouvé d'autre solution pour conserver cette valeur initiale..)
    (je pourrais mettre ces valeurs dans un tableau de vba mais une fois le code/macro terminé, je perds toutes les valeurs..)
    donc comment faire à part mettre cette valeur dans la page .. ?

    Si vous avez une idée, je suis preneur ..
    enfin .. bref ..., fini de verboser en travers ... continuons ..

    De ce fait, je suis parfois obligé d'utiliser (dans mon code vba) le code "Selection.XXX" (pour la création de nouvelle colonne etc.......)
    "XXX" représente objet ou collection ...."

    Mon pb est qu'à partir ou j'utilise une fois ce code "Selection.XXX", je perd la sélection que j'avais faite avec ma souris..
    (le code vba prend le pas sur la sélection faite avec la souris (normal)

    Et ma sélection faite avec la souris est donc perdue...

    (ma sélection peut être 1 ligne, plusieurs lignes contiguës ou non ou le tableau entier..)

    voir cette image :

    Ma Question ..
    comment "mémoriser" cette sélection (lignes ou tableau entier) faite à l'aide de la souris dans une variable "vba"

    En Effet,
    si je peux retenir cette sélection, je pourrais donc agir comme je veux sur les tableaux, et une fois terminé, je pourrais récupérer cette valeur préalablement sauvegardée dans une variable (sélection faite avec la souris) et exécuter mon code vba de "masquage" de ligne ...)
    Voili, voilou ....
    Comprenez vous mon charabia ...

    Dans un 1° temps au moins je voudrais pouvoir sauvegarder dans une variable vba 1 ligne sélectionnée.. d'un certain tableau
    ensuite je verrais pour 2 lignes contiguës

    Mais déjà... comment fait-on pour 1 ligne ..?

    @ vous lire et merci de votre aide

  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,

    Il ne peut y avoir qu'un seul objet Selection en VBA.

    Pour ne pas perdre les valeurs affectées à une variable, il suffit de déclarer la variable en dehors de la procédure.

    http://heureuxoli.developpez.com/off.../?page=page5#5
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut
    Re,

    Je vais aller voir ton lien http://heureuxoli.developpez.com/off.../?page=page5#5

    Il ne peut y avoir qu'un seul objet Selection en VBA.
    1 seul objet .., ok ...

    1 ligne c'est un objet non ?
    2 lignes contiguës ou pas c'est bien un objet composé de 2 lignes non ?

    et ..
    quand on sélectionne toutes les lignes d'un tableau ce n'est pas la même chose que le tableau lui même ?
    (car, quand on regarde sur une feuille word, on a réellement l'impression que c'est la même chose ..)

    car .. 1 tableau c'est bien un ensemble de lignes non ? (avec un nb de colonnes > ou = 1

    Pour ne pas perdre les valeurs affectées à une variable, il suffit de déclarer la variable en dehors de la procédure.
    oui, je vois ce que tu veux dire, "externe à la macro" je crois "Public"
    cad déclarer une variable avec l'attribut Public
    => mais il faudrait donc que cette variable soit "active" dès que l'on ouvre Word, ou je me trompe ?
    (cad pour tout document ouvert..)
    quel est ton avis ?

    Mais quel est le code qui permet de récupérer dans une variable la sélection faite avec une souris ?

    exemple :

    on sélectionne un mot dans un document avec la souris, comment fait-on pour récupérer cette sélection dans une variable vba ?

    @+ et merci de ton aide

  4. #4
    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,

    Un seul Objet Selection.

    Si tu es certain que ton objet sera toujours un tableau, tu peux transférer l'objet tableau contenu dans ta sélection dans une variable Table.

    Tu peux avoir dix objet tables, mais une seule sélection.

    Dans le lien que je te donne, on y explique la portée des variables.

    Le Normal.dot est actif dès l'ouverture de Word.
    On peut aussi ajouter un modèle en tant que complément et ce modèle peut contenir du code.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut
    Re,

    Un seul Objet Selection.

    Si tu es certain que ton objet sera toujours un tableau, tu peux transférer l'objet tableau contenu dans ta sélection dans une variable Table.

    Tu peux avoir dix objet tables, mais une seule sélection.
    ok, admettons que l'objet sélectionné soit toujours un tableau.
    quel est le code qui permet de mettre cette sélection dans une variable ?

    soit 2 tableaux dans mon document word
    sélection du 2° par exemple ..

    j'ai essayé pas mal de solution mais je n'y suis pas parvenu ..

    MaVariable = ???

    le code doit-il commencer par Activedocument ... ou Selection......

  6. #6
    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,

    Une variable table.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oTbl As Table
    Set oTbl = Selection.Tables(1)
    Juste pour la logique, si tu veux utiliser un objet sélectionné, il faut passer par Selection.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut
    Re,

    Juste pour la logique, si tu veux utiliser un objet sélectionné, il faut passer par Selection
    Ok, merci pour l'info.
    -------------------------------------------------------------------------------------------------
    Je viens d'essayer ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oTbl As Table
    Set oTbl = Selection.Tables(1)
    il met bien dans une variable "Table" (qui porte le Nom "oTbl") la table 1 de mon document word.

    Mais donc par ce code, on lui impose le tableau 1 ...
    en fait ce code ne tient pas compte de la sélection faite au préalable par la souris ..

    que je sélectionne le tableau 1 ou 2 ou 3 ou 4 ce code "Set oTbl = Selection.Tables(1)"
    met en mémoire la table 1 et ne se préoccupe pas de ma sélection faite avec ma souris.

    ce que je cherche, c'est de mettre dans une variable le tableau sélectionné avec la souris.

    voyez vous ce que je veux dire..

    Merci de votre aide.

  8. #8
    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,

    Tu doutes !

    Essaies de sélectionner à la souris 2 tables de ton document qui doit en comporter plusieurs, et fait un debug.print sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print Selection.Tables.count
    Selection.Tables(1) ne prend que la première table de la sélection faite à la souris.

    Un objet Selection ne tient compte que de la zone sélectionnée du document.

    Si tu utilises une autre sélection dans ton code, comme il ne peut y avoir qu'une seule sélection, elle est remplacée.


    Si tu sélectionnes à la souris une table et qu'avant de mettre l'objet de la sélection dans une variable, tu changes la sélection, le premier objet est remplacé.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut
    Re,

    Non je ne doute pas de tes propos, simplement ne connaissant pas beaucoup le vba, j'essaye de bien comprendre la syntaxe..

    pour moi il me semblait que Tables(1) concernait le tableau dont l'index porte le N°1..., 2 pour le tableau N°2, etc ....
    car ce code par exemple ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveDocument.Tables(2).Select
    ActiveDocument.Tables(3).Select
    sélectionne le tableau N°2 du document actif et ensuite le tableau N°3.. du même document ...

    donc je pensait que ton code imposait le tableau 1 ..., mais apparemment pas ..., j'avoue que je pige pas le (1) de Selection.Tables(1)
    As tu une explication ?.. de cette "incohérence"

    de plus
    Essaies de sélectionner à la souris 2 tables de ton document qui doit en comporter plusieurs, et fait un debug.print sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print Selection.Tables.count
    Selection.Tables(1) ne prend que la première table de la sélection faite à la souris.
    En effet, exact .., zarbi ....si on selectionne 2 tableaux, seul le 1° est retenu ..

    Un objet Selection ne tient compte que de la zone sélectionnée du document.
    Je comprend, mais dans notre cas, si la zone sélectionnée est composée de plusieurs tables , la selection devrait en tenir compte .. non ?

    Ou alors,

    dans "objet selection" faut-il comprendre que l'objet selection ne prend en fait qu'une partie de la sélection (en fait seulement la 1°) si il y a des sélections multiples
    c'est cela ?

    Si tu sélectionnes à la souris une table et qu'avant de mettre l'objet de la sélection dans une variable, tu changes la sélection, le premier objet est remplacé.
    Je suis OK.., l'objet selection ne prend en compte que la selection active au moment du lancement de la procédure

    1) il faut donc la sauvegarder dans une variable dans un 1° temps exemple SavTbl
    2) et ensuite seulement en vba demander à sélectionner ce que l'on veut si besoin..
    ainsi la 1° sélection (faite à l'aide de la souris par exemple) est sauvegardée dans une variable.. (SavTbl)

    @ te lire et merci de tes infos

  10. #10
    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,

    Incohérence ??

    ActiveDocument.XXX fait référence à l'objet xxx de ActiveDocument

    Selection.xxx fait référence à l'objet xxx de la sélection.

    C'est selon moi assez cohérent, c'est comme si dans une classe, tu as deux élève qui porte le même prénom.
    On les différencie par le nom de famille.

    Dupond.Albert
    Laporte.Albert

    Tous deux correspondent à un élève, mais pas le même.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut
    Selection.xxx fait référence à l'objet xxx de la sélection.

    C'est selon moi assez cohérent, c'est comme si dans une classe, tu as deux élève qui porte le même prénom.
    On les différencie par le nom de famille.

    Dupond.Albert
    Laporte.Albert
    ok, si je comprends bien c'est idem à Classe "Tableaux" (Tables) et on définit oTbl comme étant une variable (un objet) de type tableau (Table)
    Selection.Tables(1) devrait prendre le tableau(1) de la selection..
    et Selection.Tables(2) devrait prendre le tableau(1) de la selection..

    Exemple : plaçons nous dans cette situation :

    je sélectionne 2 tableaux :
    et je place ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oTbl As Table
    Set oTbl = Selection.Tables(2)
    oTbl.Cell(1, 1).Range.Text = "Tableau sélectionné"
    Debug.Print Selection.Tables.Count
    me renvoie sur une erreur "5941, Le Membre de la collection requis n'existe pas ..

    cela devrait placer le tableau 2 dans oTbl selon ce que tu dis non ?

    si je remplace le (2) par (1) [Set oTbl = Selection.Tables(1)]
    le tableau 1 est sélectionné ....

    Mais si je met (2) ... plantage ....
    On a l'impression que l'objet "selection" ne peut faire référence qu'au 1°
    c'est dans ce sens que je parlais d'incohérence..

    Vois tu ce que je veux dire ?

  12. #12
    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,

    Un exemple, tu sélectionnes le tableau du milieu et tu lances le code.
    Fichiers attachés Fichiers attachés
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut
    Un exemple, tu sélectionnes le tableau du milieu et tu lances le code.
    ok, je sélectionne 1 tableau (celui du milieu) => le 2° , je lance.
    cell(2,2) me renvoie bien le texte de la cellule

    Maintenant si je sélectionne 2 tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set oTbl = Selection.Tables(2)
    Debug.Print oTbl.Cell(2, 2).Range.Text
    me renvoie une erreur ...

    or tu dis "Selection.xxx fait référence à l'objet xxx de la sélection."
    Set oTbl = Selection.Tables(2) ne devrait-il pas prendre le tableau 2 de la sélection ?

  14. #14
    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 viens d'essayer et ça fonctionne.

    L'erreur vient de la cellule qui n'existe pas dans le second tableau !!
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Points : 18
    Points
    18
    Par défaut
    Je viens d'essayer et ça fonctionne.

    L'erreur vient de la cellule qui n'existe pas dans le second tableau !!
    j'ai modifié ton fichier avant .....
    Avec celui que je te joins :
    (3 tableaux, chacun ayant plusieurs lignes et plusieurs colonnes à l'intérieur)

    code vba modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oTbl = Selection.Tables(2)

    sélectionne le 2° tableau et le 3° tableau et lance..

    Je précise bien ... sélectionner le 2° et le 3° tableau (pas le 1° Tableau)

    cela renvoie sur une erreur :

    cela marche chez toi ?

    ps..
    je viens de m'apercevoir d'une chose..
    si on sélectionne tout le document, cela renvoie bien la cellule (2,2) du tableau N°2 (de la selection)
    si on sélectionne le tableau N°2 et le tableau N° 3 seulement cela ne marche plus ....
    (le tableau N° 2 correspond au tableau(1) de la sélection et le tableau N°3 correspond alors au tableau(2) de la sélection)

    vois tu ?

    On a l'impression que l'indexation :
    • Selection.Tables(1)
    • Selection.Tables(2)
    • Selection.Tables(3)

    ne fonctionne qu'à la condition exclusive que si le document entier est sélectionné

    ton avis ?
    Fichiers attachés Fichiers attachés

  16. #16
    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,

    Avant de poster, j'avais essayé et ça fonctionne, même si je ne sélectionne pas tout le document.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

Discussions similaires

  1. [XL-2010] Suppression d'une ligne dans une feuille A tout en garder les infos dans une feuille B
    Par sebastien_ofs dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/01/2015, 12h10
  2. Réponses: 6
    Dernier message: 11/12/2014, 11h42
  3. Comment calculer la mesure "cout" dans une table de fait
    Par andy888 dans le forum Conception/Modélisation
    Réponses: 6
    Dernier message: 03/10/2013, 17h30
  4. Réponses: 13
    Dernier message: 23/05/2013, 20h38
  5. [DTS] Comment auditer les transformations sql faites via DTS
    Par danmick dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/08/2005, 07h40

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