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 :

Ajout ligne tableau via signet en conservant la mise en forme


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 51
    Points : 25
    Points
    25
    Par défaut Ajout ligne tableau via signet en conservant la mise en forme
    Bonjour,

    Mes péripéties continuent, cependant je me débrouille de plus en plus seul.
    Je voudrais créer un raccourci clavier qui me permettrait de rajouter une ligne au tableau courant.
    Cette ligne existe dans un tableau d'exemple en début de document, je l'ai donc affublé du signet "TableAno".
    N'arrivant pas à conserver la mise en forme lors de l'ajout de la ligne, j'ai donc tenter autre chose, via l'enregistrement de macro, pour splitter le tableau à l'endroit voulu, ajouter la ligne qui conserve sa mise en forme, puis enlever les espacements entre les tableaux pour n'en garder qu'un, voici ce que ca donne :

    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
    16
    17
    18
    Sub Insert_Ano()
     
    ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="TamponMacro2"
        Selection.GoTo What:=wdGoToBookmark, Name:="TableAno"
        Selection.Find.ClearFormatting
        Selection.Copy
    If ActiveDocument.Bookmarks.Exists("TamponMacro2") = True Then Selection.GoTo What:=wdGoToBookmark, Name:="TamponMacro2"
        Selection.SplitTable
        Selection.TypeParagraph
        Selection.TypeParagraph
        Selection.MoveUp Unit:=wdLine, Count:=1
        Selection.Paste
        Selection.Delete Unit:=wdCharacter, Count:=1
        Selection.Delete Unit:=wdCharacter, Count:=1
        Selection.MoveUp Unit:=wdLine, Count:=2
        Selection.Delete Unit:=wdCharacter, Count:=1
    If ActiveDocument.Bookmarks.Exists("TamponMacro2") = True Then ActiveDocument.Bookmarks("TamponMacro2").Delete
    End Sub
    Le problème, c'est que la ligne ajoutée, s'ajoute au DESSUS de la ligne sélectionnée, et du coup pour la dernière ligne, ca ne fonctionne pas ( car on ne peut pas splitter le tableau sur la dernière ligne.

    Ce que j'aimerais, c'est qu'en me positionnant sur la ligne voulu, je puisse ajouter une ligne juste en dessous, scrupuleusement identique (format/texte) à ma ligne source, comprise dans le Bookmark TableAno.


    Existe-t-il un type de commande d'insertion qui permettrait de conserver la mise en forme de la ligne source ?

    En vous remerciant par avance !

  2. #2
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Graineur,

    Tu as du code inutile et il te manque l'essentiel : faire 2 cas un cas lorsque tu es en fin de tableau et un cas pour les autres lignes

    Attention, cette macro fonctionne aussi si tu as mis un signet "DVPTableModele" sur autre chose qu'une ligne, à toi de voir

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Sub DVP_InsertAno()
        '// Sert à vérifier que l'on est dans un tableau
        If Selection.Information(wdWithInTable) = False Then
            Exit Sub
        End If
        '// Sert à vérifier que l'on a le signet "DVPTableModele"
        If ActiveDocument.Bookmarks.Exists("DVPTableModele") = False Then
            Exit Sub
        End If
     
       '// A partir d'ici, tout est OK <=> on a ce qu'il nous faut pour travailler
     
       '// On ajoute un signet pour mémoriser l'endroit où l'on est
        ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="DVPTmp"
       '// On va chercher le modèle à recopier
        Selection.GoTo What:=wdGoToBookmark, Name:="DVPTableModele"
        Selection.Copy
        '// On retourne d'où l'on vient
        Selection.GoTo What:=wdGoToBookmark, Name:="DVPTmp"
     
        '// On selectionne la ligne
        Selection.Tables(1).Rows(Selection.Information(wdStartOfRangeRowNumber)).Range.Select
        '// On déplace le point d'insertion = le curseur
        Selection.MoveDown Unit:=wdLine, Count:=1
        '// On regarde si on est sur la dernière ligne d'un tableau (de toute façon avec les tests précédents, on est dans un tableau)
        If Selection.Information(wdStartOfRangeRowNumber) < Selection.Information(wdMaximumNumberOfRows) Then
            '// On fractionne le tableau
            Selection.SplitTable
            '// On colle le modèle
            Selection.Paste
            '// On raboute le tableau
            Selection.Delete Unit:=wdCharacter, Count:=1
        Else
            Selection.Paste
        End If
        '// On supprime le signet qui mémorise la position
        ActiveDocument.Bookmarks("DVPTmp").Delete
    End Sub
    Attention, pour ne pas rendre la macro trop complexe, je n'ai pas mis la vérification que la ligne que tu veux ajouter soit le modèle (mais je pense que c'est une vérif que tu peux faire toi-même maintenant avec ce que DVP et en particulier Heureux-Oli t'a montré )

    @+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Merci beaucoup, c'est exactement ce qu'il me fallait !
    J'ai fais des test, cependant il y a un cas cela ne fonctionne pas :
    -Lorsque je lance la macro sur l'avant dernière ligne d'un tableau, cela détruit la dernière ligne et la remplace par DVPTableModele.

    Cependant, sur toutes les autres ligne cela fonctionne, et j'ai essayé pour des tableaux de différentes tailles, c'est toujours l'avant dernière qui ne fonctionne pas.

    Byzarre

  4. #4
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Graineur,

    En effet c'est bizarre, d'autant plus que j'ai fait tous mes tests sur l'avant-dernière ligne. Je regarde plus en détails.

    Je viens de vérifier sur mon Mac 2004 (celui qui correspond à ton PC 2003), ça fonctionne sans problème et je ne vois rien dans le code qui amener amener ce comportement. Je continue à chercher.

    @+

  5. #5
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Graineur,

    J'ai trouvé. C'es parce que tu n'as pas sélectionné ton signet ne correspond à une ligne complète du tableau (il te manque la marque de fin de ligne que tu peux voir lorsque tu demandes à Word de montrer les caractères masqués).

    Du coup, est-ce que tu n'as pas sélectionné cette marque volontairement ou non ? Dans le 1er cas, il faut adapter la macro pour qu'elle puisse travailler que sur certaines cellules seulement et pas sur une ligne (Je t'avais averti que la macro n'était pas conçu pour ce cas ) ou bien tu dois étendre ton signet à toute ta ligne. Pour cela, suis les instructions suivantes :
    1. Lance le menu "Insertion > Signet" puis sélectionne "DVPTableModele" et clique sur "Atteindre"
    2. Sors du menu
    3. Lance le menu "Tableau > Sélectionner > Ligne"
    4. Redéfinis ton signet "DVPTableAno" en lançant le menu "Insertion > Signet"puis sélectionne "DVPTableModele" et clique sur "Ajouter"
    5. Sors du menu


    @+

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Superbe, vous êtes vraiment très bon ici
    Tout fonctionne à merveille.
    Je ne vous embêterait plus ... pour le moment !

  7. #7
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Graineur,

    Superbe, vous êtes vraiment très bon ici
    Merci
    Tout fonctionne à merveille.
    C'était le but recherché par toi et par nous
    Je ne vous embêterait plus ... pour le moment !
    C'est pour ça que DVP existe et fonctionne... pour que ceux qui savent (ou parfois qui croient savoir) aident ceux qui ne savent pas encore .

    @+

Discussions similaires

  1. Insertion d'une ligne via macro + copie de la mise en forme conditionnelle
    Par JustyDark dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/04/2015, 08h43
  2. Ajout ligne tableau croisé dynamique
    Par doudou29 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/08/2013, 17h13
  3. ajout ligne avec donnée dans msflexgrid à partir d'une autre form
    Par bastos77 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/03/2009, 17h08
  4. Coller en conservant la mise en forme ligne/colonne
    Par lucarno dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/04/2007, 12h52
  5. Macro Excel: enreg d1 cellule en conservant le mise en forme
    Par repié dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/12/2005, 15h48

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