OVH Cloud OVH Cloud

VBA problème suppression dernière colonne d'un tableau d'un doc word

12 réponses
Avatar
ierrot33
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés du doc word?

10 réponses

1 2
Avatar
MichD
Bonjour,

| Ma macro ajoute une ligne à chacun de mes tableaux
| à chaque fois que j'ajoute un doc, à la fin, j'ai donc une
| ligne en trop vide dans chacun de mes tableaux.

Avant de supprimer la dernière ligne du tableau, es-tu
certain que les tableaux 1 et 3 ont seulement une ligne
vide?

MichD
---------------------------------------------------------------
Avatar
pierrot33
Le mercredi 21 Août 2013 à 17:14 par ierrot33 :
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur
lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word
à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois
que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans
chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés
du doc word?


Merci MichD pour ton aide.
Oui j'ai vérifié sur mes 4 tableaux, ils ont tous une ligne vide à la fin. Ça marche pour certains tableaux mais pas tous.
D'ailleurs la commande suivante efface la dernière ligne du tableau qu'elle soit vide ou non.
oTbl.Rows(oTbl.Rows.Count).Delete
Avatar
pierrot33
Le mercredi 21 Août 2013 à 17:14 par ierrot33 :
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur
lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word
à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois
que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans
chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés
du doc word?


MichD, je viens de trouver la source du problème...
Dans mes tableaux, certains avaient une première ligne composée de deux lignes fusionnées, ce qui faisait planter la commande de suppression de la dernière ligne.
Je ne sais pas vraiment pourquoi. La commande oTbl.Rows(oTbl.Rows.Count).Delete ne marche pas avec des lignes fusionnées dans un tableau d'un doc word!
En revanche oTbl.Rows.Count renvoie bien le bon nombre de lignes du tableau.
Si quelqu'un a des explications je suis preneur.
Avatar
Jacquouille
Bonjour
En revanche oTbl.Rows.Count renvoie bien le bon nombre de lignes du
tableau.







Juste une question: Si ton tableau est défini avec 10 lignes (ex: A1:C10) et
qu'il n'y a que 9 remplies, ta formule renvoie combien? 9 ou 10?
Merci

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"pierrot33" a écrit dans le message de groupe de discussion :


Le mercredi 21 Août 2013 à 17:14 par ierrot33 :
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur
lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word
à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois
que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans
chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés
du doc word?


MichD, je viens de trouver la source du problème...
Dans mes tableaux, certains avaient une première ligne composée de deux
lignes
fusionnées, ce qui faisait planter la commande de suppression de la dernière
ligne.
Je ne sais pas vraiment pourquoi. La commande
oTbl.Rows(oTbl.Rows.Count).Delete
ne marche pas avec des lignes fusionnées dans un tableau d'un doc word!
En revanche oTbl.Rows.Count renvoie bien le bon nombre de lignes du tableau.
Si quelqu'un a des explications je suis preneur.
Avatar
pierrot33
Le mercredi 21 Août 2013 à 17:14 par ierrot33 :
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur
lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word
à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois
que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans
chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés
du doc word?


Bonjour Jacquouille,

La formule renvoie bien le nombre total de lignes soit 10 pour votre exemple.
Avatar
Jacquouille
Merci pour cette réponse qui me parait évidente, puisque le tableau devrait
être défini, donc, AMHA, cette formule devrait toujours retourner le nombre
de lignes définies au préalable, remplies ou non.



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"pierrot33" a écrit dans le message de groupe de discussion :


Le mercredi 21 Août 2013 à 17:14 par ierrot33 :
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur
lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word
à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois
que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans
chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés
du doc word?


Bonjour Jacquouille,

La formule renvoie bien le nombre total de lignes soit 10 pour votre
exemple.
Avatar
MichD
J'ai ouvert un tout nouveau fichier Word (Office 2010)
J'ai inséré un tableau (table) X lignes par Y colonnes

"Fusionnées une ligne" : C'est à dire fusionner chacune des
colonnes de cette ligne ou fusionner
2 lignes entières...

J'ai fusionné certaines LIGNES de ce tableau et j'ai exécuté
cette macro pas à pas. J'ai pu supprimer toutes les lignes
une à une à partir de la dernière ligne du tableau.

Pour ce faire utilise la touche F8

J'ai placé directement cette macro dans un module de Word
'---------------------------------------
Sub test()
Dim T As Table, NbRows As Long, A As Long
Set T = ThisDocument.Tables(1)
NbRows = T.Rows.Count

For A = NbRows To 1 Step -1
T.Rows(A).Delete
Next
End Sub
'---------------------------------------

Si tu as fusionné par exemple 2 cellules adjacentes
d'une colonne d'un tableau de 2 lignes différentes, il
est normal que tu ne puisses pas supprimer une ligne
à la fois pour ces 2 lignes, car il y a une liaison qui ne peut
pas être brisée.


MichD
---------------------------------------------------------------
Avatar
pierrot33
Le mercredi 21 Août 2013 à 17:14 par ierrot33 :
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur
lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word
à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois
que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans
chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés
du doc word?


MichD merci pour ta persévérance.
Ta macro fonctionne bien.
Mais sur mon tableau précis cela plante toujours dès la première tentative de suppression de la dernière ligne.
Pour info il s'agit de deux lignes partiellement fusionnées, cad 7 colonnes fusionnées, 5 non fusionnées dont deux fusions de deux colonnes sur la première ligne et de trois colonnes sur la première ligne. Le tout est utilisé comme en-tête qui se répète sur chaque nouvelle page word. J'espère être clair.
Avatar
MichD
Lors de mon dernier message, j'ai été très précis
quant à l'explication des divers types de fusion
de cellules dans ton tableau.

Si tu obtiens des erreurs, il y a fort à parier que c'est
à cause des cellules fusionnées.

Dans certains cas, à part d'enlever la fusion des 2 (ou plus)
de cellules, il est IMPOSSIBLE de supprimer une seule ligne
à la fois. Exemple, si les cellules D3 et D4 sont fusionnées,
sélectionne cette cellule et regarde à l'extrême gauche de
la barre de formule, il n'y a l'adresse d'une seule cellule,
mais cette cellule est liée à 2 lignes. Dans ce cas, à moins
de défusionner la cellule, il n'existe pas d'autres alternatives
pour supprimer une ligne à la fois D3 ou D4


MichD
---------------------------------------------------------------
"pierrot33" a écrit dans le message de groupe de discussion :


Le mercredi 21 Août 2013 à 17:14 par ierrot33 :
Bonjour,

Je suis embêté par un bug à priori tout bête mais sur
lequel je coince lamentablement. Je vais essayer d'être clair.
J'utilise les fonctions de VBA pour éditer des tableaux dans un doc word
à partir d'un fichier excel base de données.
Ma macro ajoute une ligne à chacun de mes tableaux à chaque fois
que j'ajoute un doc, à la fin, j'ai donc une ligne en trop vide dans
chacun de mes tableaux.
J'utilise ensuite le code:
oTbl2.Rows(oTbl2.Rows.Count).Delete
oTbl3.Rows(oTbl3.Rows.Count).Delete
oTbl4.Rows(oTbl4.Rows.Count).Delete
oTbl.Rows(oTbl.Rows.Count).Delete
Cela marche pour les tableaux OTbl2 et 4 mais pas pour les 1 et 3
Pour info j'ai utilisé
Set oTbl = wordDoc.Tables(7)
Set oTbl2 = wordDoc.Tables(8)
Set oTbl3 = wordDoc.Tables(5)
Set oTbl4 = wordDoc.Tables(9)
et
Set wordDoc = WordApp.Documents.Open(fichier, ReadOnly:=True)
.
Quelqu'un a une idée. Peut-être dans les propiétés
du doc word?


MichD merci pour ta persévérance.
Ta macro fonctionne bien.
Mais sur mon tableau précis cela plante toujours dès la première tentative
de
suppression de la dernière ligne.
Pour info il s'agit de deux lignes partiellement fusionnées, cad 7 colonnes
fusionnées, 5 non fusionnées dont deux fusions de deux colonnes sur la
première
ligne et de trois colonnes sur la première ligne. Le tout est utilisé comme
en-tête qui se répète sur chaque nouvelle page word. J'espère être clair.
Avatar
MichD
Et RETIENS que ce n'est jamais une bonne idée de fusionner
des cellules dans un tableau de données dans une feuille
de calcul, et pour preuve, la problématique que tu vis
présentement.


MichD
---------------------------------------------------------------
1 2