Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro suppression ligne d'un tableau avec colonne fusionnée

3 réponses
Avatar
Ludovic Laé
Bonjour,

je cherche à supprimer par le biais d'une macro une ligne d'un tableau.

Je ne peux malheureusement pas utiliser la fonction Delete de la
collection Rows ( ActiveDocument.Tables(1).Rows(5).Delete par exemple)
car mon tableau comporte une colonne fusionnée comme me l'indique le
message d'erreur obtenu :

"Impossible d'accéder à des colonnes individuelles de cette collection
car le tableau possède des cellules fusionnées verticalement"

Y-a-t-il un moyen de contourner cette difficulté ?

Merci d'avance.

3 réponses

Avatar
Anacoluthe
Bonjour !

'Ludovic Laé' nous a écrit ...
je cherche à supprimer par le biais d'une macro une ligne d'un tableau.
Je ne peux malheureusement pas utiliser la fonction Delete de la
collection Rows ( ActiveDocument.Tables(1).Rows(5).Delete par exemple)
car mon tableau comporte une colonne fusionnée comme me l'indique le
message d'erreur obtenu :
"Impossible d'accéder à des colonnes individuelles de cette collection
car le tableau possède des cellules fusionnées verticalement"
Y-a-t-il un moyen de contourner cette difficulté ?


Chic une 'tite colle ! :-) )

Si votre tableau contient des cellules fusionnées il n'est plus possible
d'utiliser en vba des indices de tableau n°ligne / n°colonne !
C'est logique puisque les comptages deviennent ambigus.

Plusieurs solutions pour contourner le problème : fractionner les
zones fusionnées pour retrouver des coordonnées X,Y correctes puis
les fusionner à nouveau ; couper la colonne contenant des fusions
puis la coller après suppression d'une ligne etc

Une autre solution consiste à utiliser l'objet Selection sans faire
appel à des coordonnées X,Y : déplacer la sélection sur la ligne,
sélectionner toute la ligne et la supprimer.

Ceci va nous donner en vba une procédure de ce type :

'------------------------------------------------------------------------
Public Sub SupprimeLigne(T As Integer, L As Integer)
' Supprime la ligne L du tableau T même en cas de cellules fusionnées
On Error Resume Next ' si T ou L invalides !
ActiveDocument.Tables(T).Select
With Selection
.Collapse wdCollapseStart
.MoveDown unit:=wdLine, Count:=L - 1
.Rows.Delete
End With
End Sub
'------------------------------------------------------------------------


Procédure que vous utiliserez dans votre macro sous la forme
SupprimeLigne 1, 5
pour supprimer la 5ème ligne du 1er tableau du document.

ça plane pour vous ?

Anacoluthe
« Un tableau ne vit que par celui qui le regarde. »
- Pablo PICASSO

Avatar
Ludovic Laé
Merci,

j'ai adapté le code parce qu'en réalité je ne travaille pas dans Word
mais dans Excel (mais sur un fichier word hein :) ). Ca marche
impeccablement.

AAppli_Word est mon application Word, ATableau est mon objet tableau,
ARow la ligne que je souhaite détruire.

Excel ne connaît pas les énumérations utilisées dans word
(wdCollapseStart, wdline, etc.), j'ai donc écrit les valeurs en dur dans
l'appel des procédures. J'espère que ca ne posera pas de problème de
compatibilité quand je passerais à une version n+1 d'Office. De toute
facon, ca n'est pas bien grave.

Sub Effacer_Ligne_Tableau(AAppli_Word As Object, ATableau As Object,
ARow As Integer)
On Error Resume Next
ATableau.Select
Call AAppli_Word.Selection.Collapse(1) 'le 1 correspond à
wdCollapseStart pour word
Call AAppli_Word.Selection.MoveDown(5, ARow - 1) 'le 5 correspond à
wdline pour word
Call AAppli_Word.Selection.Rows.Delete
End Sub

Merci beaucoup.

Bonjour !

'Ludovic Laé' nous a écrit ...
je cherche à supprimer par le biais d'une macro une ligne d'un tableau.
Je ne peux malheureusement pas utiliser la fonction Delete de la
collection Rows ( ActiveDocument.Tables(1).Rows(5).Delete par exemple)
car mon tableau comporte une colonne fusionnée comme me l'indique le
message d'erreur obtenu :
"Impossible d'accéder à des colonnes individuelles de cette collection
car le tableau possède des cellules fusionnées verticalement"
Y-a-t-il un moyen de contourner cette difficulté ?


Chic une 'tite colle ! :-) )

Si votre tableau contient des cellules fusionnées il n'est plus possible
d'utiliser en vba des indices de tableau n°ligne / n°colonne !
C'est logique puisque les comptages deviennent ambigus.

Plusieurs solutions pour contourner le problème : fractionner les
zones fusionnées pour retrouver des coordonnées X,Y correctes puis
les fusionner à nouveau ; couper la colonne contenant des fusions
puis la coller après suppression d'une ligne etc

Une autre solution consiste à utiliser l'objet Selection sans faire
appel à des coordonnées X,Y : déplacer la sélection sur la ligne,
sélectionner toute la ligne et la supprimer.

Ceci va nous donner en vba une procédure de ce type :

'------------------------------------------------------------------------
Public Sub SupprimeLigne(T As Integer, L As Integer)
' Supprime la ligne L du tableau T même en cas de cellules fusionnées
On Error Resume Next ' si T ou L invalides !
ActiveDocument.Tables(T).Select
With Selection
.Collapse wdCollapseStart
.MoveDown unit:=wdLine, Count:=L - 1
.Rows.Delete
End With
End Sub
'------------------------------------------------------------------------


Procédure que vous utiliserez dans votre macro sous la forme
SupprimeLigne 1, 5
pour supprimer la 5ème ligne du 1er tableau du document.

ça plane pour vous ?

Anacoluthe
« Un tableau ne vit que par celui qui le regarde. »
- Pablo PICASSO



Avatar
Anacoluthe
Bonjour !

'Ludovic Laé' nous a écrit ...
Ca marche impeccablement.
Excel ne connaît pas les énumérations utilisées dans word
(wdCollapseStart, wdline, etc.), j'ai donc écrit les valeurs en dur


Merci du retour

Juste une petite info au passage pour l'Excellent que vous êtes :
dans Outils / Références de VBE (Visual Basic Editor) référencez la
Microsoft Word Object Library et vous pourrez ainsi utiliser toutes
les constantes et tout le modèle objet Word... ;-)

Anacoluthe
« Un tableau ne vit que par celui qui le regarde. »
- Pablo PICASSO