Macro Word & tableaux

Fermé
abcde - 19 mai 2010 à 09:56
 abcde - 26 mai 2010 à 11:50
Bonjour,

J'ai un document Word qui contient des tableaux.
Je voudrais mettre, par macro, un "en tete" du genre Colonne1/Colonne2/Colonne3 à tous mes tableaux dont le contenu commence par un caractere spécial (ici *, mais ca me pose probleme).
J'ai écrit la macro suivante, mais ca ne marche pas:
- j'ai une erreur de syntaxe avec le If var(0) = * mais je ne sais pas comment l'écrire
- je dois avoir un probleme avec la déclaration de ma variable var qui est en fait un tableau...mais je ne sais pas comment on peut définir un tableau de taille indéterminée en VBA
- j'ai peut etre d'autres erreurs que la précéndet m'empeche de voir ?

Si vous pouviez me donner votre avis sur mon code, ce serait sympa.



Sub MyMacro()

Dim var As String

For Each Tableau In ActiveDocument.Tables
Set MyTableau = WordDoc.Tableau
For i = 1 To Tableau.Columns.Count
For j = 1 To Tableau.Columns(i).Cells.Count
var = Tableau.Columns(i).Cells(j)

If var(0) = * Then

Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext, Count:=1, Name:=""
Selection.MoveUp Unit:=wdLine, Count:=1

ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
Selection.TypeText Text:="Col_1"
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:="Col_2"
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:="Col_3"
End If
Next
Next
Next

End Sub
A voir également:

5 réponses

chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
19 mai 2010 à 10:33
Bonjour,

essaie avec
If var(0) ="*"
, et ça devrait déjà mieux se passer.

Cordialement.
0
OK merci.
Et pour les tableaux ? Est ce qu'il est possible de déclarer un tableau sans définir sa taille ?
0
sriviere Messages postés 853 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 mai 2013 410
19 mai 2010 à 18:23
Hello,

Si je comprends bien le problème, pourquoi tu ne ferais pas :

Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext, Count:=1, Name:=""

Là, tu es dans ta première cellule, et tu enregistres ça dans la suite de ta macro :

Menu tableau
Insertion une ligne au-dessus

et cela pour tous tes tableaux (Next)

Quand tu es dans la première ligne de ton tableau, l'instruction insérer une ligne au dessus prend toujours en compte le nombre de colonnes que tu as dans ton tableau quel que soit le nombre de colonnes.
0
sriviere Messages postés 853 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 mai 2013 410
Modifié par sriviere le 19/05/2010 à 19:05
Voilà une macro avec une boucle :

Sub Macro xxx()
'

Selection.Find.ClearFormatting
With Selection.Find
.Text = "*"
.Replacement.Text = ""
.Wrap = wdFindContinue
End With
Selection.Find.Execute
While Selection.Find.Found
Selection.InsertRowsAbove 1
Selection.Find.Execute
Wend
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je suis un peu long pour répondre :( Merci de votre aide.

Mais j'ai toutefois un petit soucis avec le code précédent : je me retrouve avce une boucle infinie qui fait bugger Word.
En effet, j'ai l'impression que le texte "*" n'est pas remplacé et qu'il tourne ainsi indéfiniment.
y aurait il une autre commande que .Replacement.Text = "" pour effacer mon texte "*" ?

Merci
0