[Word 2010] Copier coller dans un tableau en VBA
Résolu/Fermé
iratihel
Messages postés
39
Date d'inscription
jeudi 17 janvier 2013
Statut
Membre
Dernière intervention
24 avril 2013
-
15 mars 2013 à 15:11
iratihel Messages postés 39 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 24 avril 2013 - 19 mars 2013 à 10:08
iratihel Messages postés 39 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 24 avril 2013 - 19 mars 2013 à 10:08
A voir également:
- [Word 2010] Copier coller dans un tableau en VBA
- Tableau croisé dynamique - Guide
- Supprimer une page word - Guide
- Tableau word - Guide
- Espace insécable word - Guide
- Copier coller pdf - Guide
10 réponses
Le Pingou
Messages postés
12034
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
22 mars 2024
1 425
15 mars 2013 à 23:01
15 mars 2013 à 23:01
Bonjour,
Peut-être une piste par la : https://vb.developpez.com/faqvba/?rechercher=wORD+%26+TABLEAU
Peut-être une piste par la : https://vb.developpez.com/faqvba/?rechercher=wORD+%26+TABLEAU
iratihel
Messages postés
39
Date d'inscription
jeudi 17 janvier 2013
Statut
Membre
Dernière intervention
24 avril 2013
5
18 mars 2013 à 09:36
18 mars 2013 à 09:36
Bonjour et merci de vous pencher sur le sujet.
Le Pingou, merci pour ton lien, mais je n'ai rien trouvé qui puisse me faire avancer vers une solution.
M@rina, j'ai des signets et des champs auto sur la 2nde ligne du tableau et je souhaite conserver uniquement le texte et non pas les signets. Je dois recopier la ligne 2 vers la ligne 3 avec le contenu des signets mais pas les liens des signets. Et par la suite, il faut qu'à chaque modification du document, je puisse conserver l'historique des modifs. C'est pour ça que je ne fais pas un simple copier/coller de la ligne 2 vers la 3, sinon, à chaque activation de la macro, la ligne 3 va être écrasée et je vais perdre mon historique. D'où l'insertion d'une ligne entre les lignes 2 et 3 avant le collage.
Ensuite, je colle cellule par cellule, car le collage spécial du texte avec wdPasteText ou PasteAndFormat me recopie les 2 premières cellules sur toute la ligne au lieu de me recopier les bonnes valeurs:
Version | Date | Auteur | Relecteur | Commentaires
1 |10/03| Moi | Lui | Création
me donnera en collant la ligne directement avec une méthode wdPasteText ou PasteAndFormat:
Version | Date | Auteur | Relecteur | Commentaires
1 |10/03| 1 | 10/03 | 1
Donc, avec le collage cellule par cellule, j'arrive à obtenir ce que je souhaite, mais word me colle un petit carré après le texte et je n'arrive pas à trouver comment le supprimer...
Le Pingou, merci pour ton lien, mais je n'ai rien trouvé qui puisse me faire avancer vers une solution.
M@rina, j'ai des signets et des champs auto sur la 2nde ligne du tableau et je souhaite conserver uniquement le texte et non pas les signets. Je dois recopier la ligne 2 vers la ligne 3 avec le contenu des signets mais pas les liens des signets. Et par la suite, il faut qu'à chaque modification du document, je puisse conserver l'historique des modifs. C'est pour ça que je ne fais pas un simple copier/coller de la ligne 2 vers la 3, sinon, à chaque activation de la macro, la ligne 3 va être écrasée et je vais perdre mon historique. D'où l'insertion d'une ligne entre les lignes 2 et 3 avant le collage.
Ensuite, je colle cellule par cellule, car le collage spécial du texte avec wdPasteText ou PasteAndFormat me recopie les 2 premières cellules sur toute la ligne au lieu de me recopier les bonnes valeurs:
Version | Date | Auteur | Relecteur | Commentaires
1 |10/03| Moi | Lui | Création
me donnera en collant la ligne directement avec une méthode wdPasteText ou PasteAndFormat:
Version | Date | Auteur | Relecteur | Commentaires
1 |10/03| 1 | 10/03 | 1
Donc, avec le collage cellule par cellule, j'arrive à obtenir ce que je souhaite, mais word me colle un petit carré après le texte et je n'arrive pas à trouver comment le supprimer...
iratihel
Messages postés
39
Date d'inscription
jeudi 17 janvier 2013
Statut
Membre
Dernière intervention
24 avril 2013
5
18 mars 2013 à 12:19
18 mars 2013 à 12:19
J'ai pensé à une autre solution mais je ne sais pas du tout comment l'intégrer.
Je lance ma macro avec le code du 1er post. J'obtiens donc le résultat que je souhaite mais avec un caractère suplémentaire, le petit "carré".
Pour l'enlever, je pensais utiliser les fonctions Left et Len. Comme ça je récupère le nombre de caractères de la chaine, je copie la chaine -1 caractère et je remplace le contenu de ma cellule. Mais le soucis, c'est que je ne sais pas utiliser ces 2 fonctions...
J'ai trouvé des exemples, mais je n'arrive pas à les exploiter. J'ai tenté avec le code ci-dessous, mais je ne suis pas certaine que j'utilise correctement ces fonctions, j'ai même l'impression de faire un peu n'importe quoi :
J'ai une erreur 424. Mais je sais pas trop comment la résoudre.
Et qui plus est, j'ai 6 cellules à traiter... ça risque de faire très lourd à gérer.
Quelqu'un aurait une petite idée à me suggérer? D'avance merci.
Je lance ma macro avec le code du 1er post. J'obtiens donc le résultat que je souhaite mais avec un caractère suplémentaire, le petit "carré".
Pour l'enlever, je pensais utiliser les fonctions Left et Len. Comme ça je récupère le nombre de caractères de la chaine, je copie la chaine -1 caractère et je remplace le contenu de ma cellule. Mais le soucis, c'est que je ne sais pas utiliser ces 2 fonctions...
J'ai trouvé des exemples, mais je n'arrive pas à les exploiter. J'ai tenté avec le code ci-dessous, mais je ne suis pas certaine que j'utilise correctement ces fonctions, j'ai même l'impression de faire un peu n'importe quoi :
Private Sub Version_New1_Click() Dim oTbl As Table ActiveDocument.Bookmarks("Tableau_V").Range.Select Set oTbl = Selection.Tables(1) oTbl.Rows(3).Range.Select Selection.InsertRowsAbove 1 oTbl.Cell(2, 1).Range.Copy oTbl.Cell(3, 1).Range.PasteAndFormat wdFormatPlainText oTbl.Cell(3, 1).Range.Select With Selection Dim nom As String Dim C1 As Range Set C1 = oTbl.Cell(3, 1).Range nom = Left(C1.Text, Len(C1) - 1).Copy oTbl.Cell(3, 1).Range.Paste End With And Sub
J'ai une erreur 424. Mais je sais pas trop comment la résoudre.
Et qui plus est, j'ai 6 cellules à traiter... ça risque de faire très lourd à gérer.
Quelqu'un aurait une petite idée à me suggérer? D'avance merci.
Le Pingou
Messages postés
12034
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
22 mars 2024
1 425
18 mars 2013 à 15:18
18 mars 2013 à 15:18
Bonjour,
Pouvez-vous mettre un document (y compris la macro) sur https://www.cjoint.com/ et poster le lien.
Pouvez-vous mettre un document (y compris la macro) sur https://www.cjoint.com/ et poster le lien.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
iratihel
Messages postés
39
Date d'inscription
jeudi 17 janvier 2013
Statut
Membre
Dernière intervention
24 avril 2013
5
18 mars 2013 à 16:22
18 mars 2013 à 16:22
Bonjour,
Après plusieurs essais en tout genre infructeurx avec la fonction NetText, j'ai abandonné l'idée de faire les choses dans les règles de l'art... Et je me suis rabattue sur quelque chose de beaucoup plus simple, en tout cas abordable à mon niveau de connaissances en VBA.
Mon tableau contient des signets et dans ma macro, j'appelle mon tableau via un signet. Je me suis donc dit qu'en recopiant directement le signet qui m'intéresse, j'arriverai peut-être à le coller sans que le carré s'incruste. Et ma foi, ça a fonctionné!!
Je vous remercie en tout cas pour tous vos conseils et toute l'aide apportée. Je mets le fichier en lien si vous avez envie de voir comment fonctionnent les codes que j'ai testé, mais ils ne sont plus présents que sur le forum... j'ai fait un brin de nettoyage sur le fichier!
Après plusieurs essais en tout genre infructeurx avec la fonction NetText, j'ai abandonné l'idée de faire les choses dans les règles de l'art... Et je me suis rabattue sur quelque chose de beaucoup plus simple, en tout cas abordable à mon niveau de connaissances en VBA.
Mon tableau contient des signets et dans ma macro, j'appelle mon tableau via un signet. Je me suis donc dit qu'en recopiant directement le signet qui m'intéresse, j'arriverai peut-être à le coller sans que le carré s'incruste. Et ma foi, ça a fonctionné!!
Private Sub Version_New1_Click() Dim oTbl As Table ActiveDocument.Bookmarks("Tableau_V").Range.Select Set oTbl = Selection.Tables(1) oTbl.Rows(3).Range.Select Selection.InsertRowsAbove 1 ' Sauvegarde la version ActiveDocument.Bookmarks("Version").Range.Select Selection.Copy oTbl.Cell(3, 1).Range.PasteAndFormat wdFormatPlainText ' Sauvegarde la date d'enregistrement ActiveDocument.Bookmarks("DateSave").Range.Select Selection.Copy oTbl.Cell(3, 2).Range.PasteAndFormat wdFormatPlainText ' Sauvegarde l'auteur ActiveDocument.Bookmarks("Auteur").Range.Select Selection.Copy oTbl.Cell(3, 3).Range.PasteAndFormat wdFormatPlainText 'Sauvegarde le vérificateur ActiveDocument.Bookmarks("Verif").Range.Select Selection.Copy oTbl.Cell(3, 4).Range.PasteAndFormat wdFormatPlainText 'Sauvegarde l'approbateur ActiveDocument.Bookmarks("Appro").Range.Select Selection.Copy oTbl.Cell(3, 5).Range.PasteAndFormat wdFormatPlainText 'Sauvegarde les commentaires oTbl.Cell(2, 6).Range.Copy oTbl.Cell(3, 6).Range.PasteAndFormat wdFormatPlainText End Sub
Je vous remercie en tout cas pour tous vos conseils et toute l'aide apportée. Je mets le fichier en lien si vous avez envie de voir comment fonctionnent les codes que j'ai testé, mais ils ne sont plus présents que sur le forum... j'ai fait un brin de nettoyage sur le fichier!
iratihel
Messages postés
39
Date d'inscription
jeudi 17 janvier 2013
Statut
Membre
Dernière intervention
24 avril 2013
5
18 mars 2013 à 16:25
18 mars 2013 à 16:25
J'ai oublié de mettre le lien vers le fichier... quelle tête de linote!!
[url]https://www.cjoint.com/?3CsqykSUaVZ[/url]
[url]https://www.cjoint.com/?3CsqykSUaVZ[/url]
Le Pingou
Messages postés
12034
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
22 mars 2024
1 425
18 mars 2013 à 17:29
18 mars 2013 à 17:29
Bonjour,
Merci infiniment pour la mise à disposition du fichier.
Merci infiniment pour la mise à disposition du fichier.
Le Pingou
Messages postés
12034
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
22 mars 2024
1 425
18 mars 2013 à 22:48
18 mars 2013 à 22:48
Bonjour,
Superbe application qui m'a permis d'étendre mes connaissance.
Il me semble que vous pourriez utiliser la proposition de m@rina ( salutations) adaptée à votre application ( pour autant que j'ai compris dans le bon sens... !) :
Superbe application qui m'a permis d'étendre mes connaissance.
Il me semble que vous pourriez utiliser la proposition de m@rina ( salutations) adaptée à votre application ( pour autant que j'ai compris dans le bon sens... !) :
Sub versio_marina() Dim ligne Set ligne = ActiveDocument.Bookmarks("Tableau_V").Range.Tables(1).Rows(2) ligne.Select With Selection .Copy .PasteAndFormat (wdTableInsertAsRows) End With End Sub
m@rina
Messages postés
19853
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
28 mars 2024
11 258
19 mars 2013 à 00:06
19 mars 2013 à 00:06
Bonjour iratihel, salut Le Pingou ;)
iratihel, pourquoi poses-tu une question ? tu fais les réponses toi-même.. Et de toute évidence tu ne tiens pas compte de nos réponses...
Tu dis "'c'est pour ça que je ne fais pas un simple copier/coller de la ligne 2 vers la 3, sinon, à chaque activation de la macro, la ligne 3 va être écrasée et je vais perdre mon historique"
Ma macro n'a jamais écrasé de ligne mais ne fait que copier la ligne 2 du dernier tableau et l'insérer à la suite dans le tableau... C'est en tous les cas ce que j'ai indiqué, et de toute évidence, tu n'as donc pas testé.
Sinon, je te le dis en passant, tes macros ne sont pas vraiment faites dans les règles de l'art... Et puisque le but est de recopier à un autre endroit des données provenant de champs (ce qui n'était pas explicite), il eut été plus simple d'insérer une ligne vierge dans le tableau, puis dans chaque cellule de récupérer la valeur du champ sans conserver le lien. Les allers-retours de sélection-copier-coller étant inutiles.
m@rina
iratihel, pourquoi poses-tu une question ? tu fais les réponses toi-même.. Et de toute évidence tu ne tiens pas compte de nos réponses...
Tu dis "'c'est pour ça que je ne fais pas un simple copier/coller de la ligne 2 vers la 3, sinon, à chaque activation de la macro, la ligne 3 va être écrasée et je vais perdre mon historique"
Ma macro n'a jamais écrasé de ligne mais ne fait que copier la ligne 2 du dernier tableau et l'insérer à la suite dans le tableau... C'est en tous les cas ce que j'ai indiqué, et de toute évidence, tu n'as donc pas testé.
Sinon, je te le dis en passant, tes macros ne sont pas vraiment faites dans les règles de l'art... Et puisque le but est de recopier à un autre endroit des données provenant de champs (ce qui n'était pas explicite), il eut été plus simple d'insérer une ligne vierge dans le tableau, puis dans chaque cellule de récupérer la valeur du champ sans conserver le lien. Les allers-retours de sélection-copier-coller étant inutiles.
m@rina
iratihel
Messages postés
39
Date d'inscription
jeudi 17 janvier 2013
Statut
Membre
Dernière intervention
24 avril 2013
5
19 mars 2013 à 10:08
19 mars 2013 à 10:08
Le Pingou, heureuse que mon bidouillage t'ait été utile.
M@rina, j'ai bien indiqué que la ligne à copier contenait des signets et que je ne souhaitait conserver que le texte des signets et non pas les liens. Mais peut-être n'ai-je pas employé le langage adéquat...
J'ai testé le code que tu m'as indiqué dans ton 1er post et l'ai modifié pour qu'il corresponde au bon tableau, mais à chaque fois que je l'activais, il me copiait bien la ligne, me la collait à l'identique sur la ligne du dessous (avec les liens des signets) et quand je la relançais, elle m'écrasait la ligne que je venais de coller.
Je ne me permettrai pas, compte tenu de mes connaissances quasi nulle en la matière, de faire des remarques sans avoir testé au préalable les solutions qu'on me propose.
Soit dit en passant, je ne vois pas le message auquel Le Pingou fait référence avec le code adapté au cas de mon tableau et qui lui fonctionne à la perfection en insérant correctement la ligne à chaque lancement de la macro. Mais qui garde les liens vers les signets...
Et comme je n'aime pas rester les bras ballant en attendant bien gentiment qu'une âme charitable m'apporte une solution sur un plateau doré, je continue de chercher une issue au problème que je pose. Désolée si ça donne l'impression que je fais les questions et les réponses... J'expose juste le résultat de mes recherches en espérant avoir quelques commentaires qui relance une piste vers la meilleure solution.
Et pour finir, oui, je reconnais volontiers que mon code est loin d'être élégant, formalisé et optimisé, mais il a le mérite de faire ce que je souhaite qu'il fasse avec le peu de connaissances que je possède en VB.
En tout cas, je vous réitère mes remerciements pour toute l'aide apportée dans la réalisation de mon projet et qui m'a permis d'arriver à une solution, bancale certes, mais fonctionnelle. :-)
M@rina, j'ai bien indiqué que la ligne à copier contenait des signets et que je ne souhaitait conserver que le texte des signets et non pas les liens. Mais peut-être n'ai-je pas employé le langage adéquat...
J'ai testé le code que tu m'as indiqué dans ton 1er post et l'ai modifié pour qu'il corresponde au bon tableau, mais à chaque fois que je l'activais, il me copiait bien la ligne, me la collait à l'identique sur la ligne du dessous (avec les liens des signets) et quand je la relançais, elle m'écrasait la ligne que je venais de coller.
Je ne me permettrai pas, compte tenu de mes connaissances quasi nulle en la matière, de faire des remarques sans avoir testé au préalable les solutions qu'on me propose.
Soit dit en passant, je ne vois pas le message auquel Le Pingou fait référence avec le code adapté au cas de mon tableau et qui lui fonctionne à la perfection en insérant correctement la ligne à chaque lancement de la macro. Mais qui garde les liens vers les signets...
Et comme je n'aime pas rester les bras ballant en attendant bien gentiment qu'une âme charitable m'apporte une solution sur un plateau doré, je continue de chercher une issue au problème que je pose. Désolée si ça donne l'impression que je fais les questions et les réponses... J'expose juste le résultat de mes recherches en espérant avoir quelques commentaires qui relance une piste vers la meilleure solution.
Et pour finir, oui, je reconnais volontiers que mon code est loin d'être élégant, formalisé et optimisé, mais il a le mérite de faire ce que je souhaite qu'il fasse avec le peu de connaissances que je possède en VB.
En tout cas, je vous réitère mes remerciements pour toute l'aide apportée dans la réalisation de mon projet et qui m'a permis d'arriver à une solution, bancale certes, mais fonctionnelle. :-)
m@rina
Messages postés
19853
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
28 mars 2024
11 258
16 mars 2013 à 14:41
16 mars 2013 à 14:41
Bonjour,
Je n'ai pas bien compris ta phrase "il recopie uniquement le texte de la ligne 2 vers la ligne 3."
Cette macro ajoute une nouvelle ligne identique à la ligne 2.
Je n'ai pas bien compris ta phrase "il recopie uniquement le texte de la ligne 2 vers la ligne 3."
Cette macro ajoute une nouvelle ligne identique à la ligne 2.
Sub tb() Dim nbtb, ligne nbtb = ActiveDocument.Tables.Count Set ligne = ActiveDocument.Tables(nbtb).Rows(2) ligne.Select With Selection .Copy .PasteAndFormat (wdTableInsertAsRows) End With End Sub