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

code VBA pour supprimer ligne tableau

4 réponses
Avatar
Loupiot
Bonjour à tous.
Je suis assez nul en code VBA pour Word.
Voici mon pb :

Je suis en publipostage. (Word 97)
Le document principal contient du texte et deux tableaux.
Le tableau 2 contient 8 lignes.
Après fusion, certains enregistrements seront tels que quelques unes des
dernières lignes du tableau 2 seront vides.
Je souhaite donc les éliminer.
Plutôt que faire cela "à la main" sur chacun des 200 enregistrements, je
souhaiterais pouvoir utiliser une macro qui tournerait sur le document
fusionné et qui pour chaque enregistrement pourrait :
- Retrouver le tableau 2.
- "Lire" le contenu de la première cellule de la dernière ligne et si elle
est vide, effacer cette ligne entièrement.
- Puis monter à la ligne du dessus (l'ex avant dernière) et recommencer
l'opération, et ainsi de suite.
- Puis passer à l'enregistrement suivant dès qu'il n'y a plus de ligne vide.

N'est-ce pas trop demander?
Je vous remercie d'avance.

--
Lou
N'oublie pas qu'on écrit avec un dictionnaire et une corbeille à papier.
Tout le reste n'est que litres et ratures (Antoine Blondin)

4 réponses

Avatar
Geo

Les éléments de base :

- Retrouver le tableau 2.
activedocument.tables(2)


- "Lire" le contenu de la première cellule de la dernière ligne et si elle
est vide, effacer cette ligne entièrement.
Il faut s'assurer que toutes les cellules de la ligne sont vides sauf

si vous pouvez vous baser sur une seule (par exemple)
Pour savoir si une cellule est vide :
If MonTableau.Cell(L, C).Range.Text = Chr(13) & Chr(7) Then

- Puis monter à la ligne du dessus (l'ex avant dernière) et recommencer
l'opération, et ainsi de suite.
Il suffit de changer l'indice de ligne


- Puis passer à l'enregistrement suivant dès qu'il n'y a plus de ligne vide.


Comme l'identifie-t-on ?

N'est-ce pas trop demander?
Si, c'est pour cela que j'ai donné juste les éléments de la

construction.

Je vous remercie d'avance.
Pas de quoi.


--
A+

Avatar
Loupiot
Geo a pris le temps de m'instruire, et je l'en remercie.
Les éléments de base :
Pour savoir si une cellule est vide :
If MonTableau.Cell(L, C).Range.Text = Chr(13) & Chr(7) Then

N'est-ce pas trop demander?
Si, c'est pour cela que j'ai donné juste les éléments de la

construction.


Bonjour,
Magnifique !
C'est bien ce dont j'avais besoin pour commencer mes recherches.
Et maintenant tout fonctionne à merveille. (cf ci-dessous)
Peut-être le pb était-il plus simple que la présentation que j'en avais
faite.

Merci donc.
Oserais-je une question subsidiaire ?
J'ai cherché en vain de lister tous les Charcode.
Où peut-on trouver une telle liste (si elle existe)?
Pour les caractères "lisibles" commes les lettres et les chifres pas de pb,
mais pour les codes un peu particuliers renvoyant aux espaces, aux marques
de paragraphe et autres ?
J'imagine que chr(13) est la marque de paragraphe(?). A-t-il la même valeur
que chr(10)?
Et chr(7) ?

Bon dimanche à tous.

--
Voilà.
Lou

_ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _
Voilà ce que ça donne finalement :
Sub nettoyer()
nbtab = ActiveDocument.Tables.Count
For I = 2 To nbtab Step 2
For J = 8 To 1 Step -1
If ActiveDocument.Tables(I).Cell(2 * J - 1, 1).Range.Text = Chr(13) &
Chr(7) Then
ActiveDocument.Tables(I).Rows(2 * J - 1).Select
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
'(Les lignes vont 2 par 2)
Selection.Cut
End If
Next J
Next I

End Sub


Avatar
Geo

Oserais-je une question subsidiaire ?


Les forums sont faits pour ça, il ne faut pas hésiter

J'ai cherché en vain de lister tous les Charcode.
Où peut-on trouver une telle liste (si elle existe)?


Dans l'aide vba faire une recherche avec Ascii,

il y a deux pages intitulées "jeu de caractères", l'une de 0 à 127 et
l'autre de 128 à 255.

Il est écrit tout en bas de la page en petit :
"Les valeurs 8, 9, 10 et 13 correspondent respectivement aux caractères
de retour arrière, de tabulation, de saut de ligne et de retour
chariot. Elles n'ont pas de représentation graphique mais peuvent,
selon l'application utilisée, modifier l'aspect du texte."

Le fait de devoir tester chr(13) + chr(7) je l'ai appris sur ce forum.
Chr(7) doit être considéré ici comme un saut de colonne.

Bravo pour votre code, je vais vous proposer une variante :

au lieu de :

ActiveDocument.Tables(I).Rows(2 * J - 1).Select
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
'(Les lignes vont 2 par 2)
Selection.Cut


ActiveDocument.Tables(I).Rows(2 * J - 1).delete
ActiveDocument.Tables(I).Rows(2 * J ).delete

--
A+

Avatar
Loupiot
Merci pour tout

--
Voilà.
Lou