Cet article est surtout une réponse aux problèmes posés concernant l'insertion d'un champ DATABASE et en particulier concernant le publipostage conditionnel expliqué ici, et qui utilise donc le champ DATABASE.

Un tableau inséré avec un champ DATABASE fait appel à un formatage des anciennes versions, et surtout ne comporte pas de format Nombre.

Et ce qui complique c'est qu'une cellule de tableau contient un caractère obligatoire qui peut gêner dans l'application d'un format de nombre. Il va donc falloir être plus malin et appliquer le format non pas sur la cellule, mais sur le contenu en omettant ce caractère invisible.

Cette macro est un exemple qui met en forme la quatrième colonne de tous les tableaux d'un document, sauf la première ligne (qu'on suppose contenir les en-têtes de colonnes). On ajoute à cette colonne une tabulation décimale, et on impose un format numérique.

Cette macro peut être améliorée de mille façons en fonction du résultat souhaité.

 

Sub mef_nombres()
'macro écrite par m@rina
Dim cellule, x, y, cell_text As String
For x = 1 To ActiveDocument.Tables.Count
    For y = 2 To ActiveDocument.Tables(x).Rows.Count
        With ActiveDocument
        cellule = .Tables(x).Cell(y, 4)
        cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
        cell_text = Left(cellule, Len(cellule) - 1)
        montant = Format(cell_text, "# ###.00")
        cellule.Text = montant
    End With
Next y
Next x



Attention si vous souhaitez mettre en forme une colonne de dates. Les dates sont toujours un problème avec Word

Le problème du formatage est que l'utilisation du champ DATABASE donne des dates au format américain, c'est-à-dire que le mois et le jour sont inversés.

Donc, comme pour la macro précédente, on va appliquer le format Date sur le contenu de la cellule et non sur la cellule elle-même.

Voici donc une macro qui met en forme la deuxième colonne de tous les tableaux d'un document qui serait donc une colonne de dates, sauf la première ligne (qu'on suppose contenir les en-têtes de colonnes). On appliquera à cette colonne un format de date français de type jj/mm/aaaa. Les j deviennent des d (day) et les a deviennent des y (year) :

Sub mef_date()
'macro écrite par m@rina
Dim cellule, madate As String, x, y
For x = 1 To ActiveDocument.Tables.Count
    For y = 2 To ActiveDocument.Tables(x).Rows.Count
        With ActiveDocument
        cellule = .Tables(x).Cell(y, 2)
        cell_text = Left(cellule, Len(cellule) - 1)
        madate = Format(cell_text, "dd/mm/yyyy")
        cellule.Text = madate
    End With
Next y
Next x
End Sub