diff --git a/plugins/docx/org.eclipse.papyrus.model2doc.docx/resources/Template.dotx b/plugins/docx/org.eclipse.papyrus.model2doc.docx/resources/Template.dotx
index 63c2a22..51db51c 100755
--- a/plugins/docx/org.eclipse.papyrus.model2doc.docx/resources/Template.dotx
+++ b/plugins/docx/org.eclipse.papyrus.model2doc.docx/resources/Template.dotx
Binary files differ
diff --git a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java
index b756721..3a4db79 100755
--- a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java
+++ b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java
@@ -19,13 +19,20 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
 
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFRun;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.papyrus.model2doc.core.author.IAuthor;
 import org.eclipse.papyrus.model2doc.core.builtintypes.AbstractTable;
+import org.eclipse.papyrus.model2doc.core.builtintypes.Cell;
 import org.eclipse.papyrus.model2doc.core.builtintypes.IFileReference;
+import org.eclipse.papyrus.model2doc.core.builtintypes.Row;
+import org.eclipse.papyrus.model2doc.core.builtintypes.TextCell;
 import org.eclipse.papyrus.model2doc.core.generatorconfiguration.IDocumentGeneratorConfiguration;
 import org.eclipse.papyrus.model2doc.core.generatorconfiguration.operations.GeneratorConfigurationOperations;
 import org.eclipse.papyrus.model2doc.core.transcription.CoverPage;
@@ -142,8 +149,44 @@
 
 	@Override
 	public void writeTable(AbstractTable table) {
-		// TODO Auto-generated method stub
+		// do some check
+		int rowsNumber = table.getRowsNumber();
+		int colNumbers = table.getColumnsNumber();
 
+		if (rowsNumber <= 0 || colNumbers <= 0) {
+			return;
+		}
+
+		final List<Cell> allCells = table.getAllCells();
+
+		final int totalCells = allCells.size();
+		if (rowsNumber * colNumbers != totalCells) {
+			Activator.log.warn(NLS.bind("The number of cells in the table is not as excepted. We won't manage the table {0}.", table.getCaption())); //$NON-NLS-1$
+			return;
+		}
+
+		Activator.log.info(NLS.bind("Start the creation of the table {0}", table.getCaption())); //$NON-NLS-1$
+		Activator.log.info(NLS.bind("--This table have {0} columns and {1} rows", colNumbers, rowsNumber)); //$NON-NLS-1$
+
+		// create and fill the table
+		XWPFTable xwpfTable = document.createTable(rowsNumber, colNumbers);
+		styleService.applyTableStyle(xwpfTable, document);
+		Iterator<Row> rowIter = table.getRows().iterator();
+		int rowNumber = 0;
+		while (rowIter.hasNext()) {
+			Row row = rowIter.next();
+			Iterator<Cell> cellIter = row.getCells().iterator();
+			int cellNumber = 0;
+			while (cellIter.hasNext()) {
+				Cell cell = cellIter.next();
+				if (cell instanceof TextCell) {
+					TextCell textCell = (TextCell) cell;
+					xwpfTable.getRow(rowNumber).getCell(cellNumber).setText(textCell.getText());
+				}
+				cellNumber++;
+			}
+			rowNumber++;
+		}
 	}
 
 	@Override
diff --git a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/util/StyleConstants.java b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/util/StyleConstants.java
index 6d8003e..540ae0d 100755
--- a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/util/StyleConstants.java
+++ b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/util/StyleConstants.java
@@ -24,21 +24,6 @@
 	 */
 	// public static final String PAGESTYLES_FAMILY = "PageStyles"; //$NON-NLS-1$
 	//
-	// /**
-	// * Style property sets.
-	// */
-	// public static final String STANDARD_PROPERTYSET = "Standard"; //$NON-NLS-1$
-	//
-	// /**
-	// * Style properties.
-	// */
-	// public static final String PARASTYLENAME_PROPERTY = "ParaStyleName"; //$NON-NLS-1$
-	//
-	// public static final String NUMBERINGSTYLENAME_PROPERTY = "NumberingStyleName"; //$NON-NLS-1$
-	//
-	// public static final String PARAADJUST_PROPERTY = "ParaAdjust"; //$NON-NLS-1$
-	//
-	// public static final String CHARPOSTURE_PROPERTY = "CharPosture"; //$NON-NLS-1$
 
 	/**
 	 * Style values.
@@ -51,6 +36,8 @@
 
 	public static final String HEADING_STYLE_VALUE = "Heading"; //$NON-NLS-1$
 
+	public static final String TABLE_STYLE_VALUE = "Grilledutableau"; //$NON-NLS-1$
+
 	// public static final String LIST_1_STYLE_VALUE = "List 1"; //$NON-NLS-1$
 
 	/**
diff --git a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleService.java b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleService.java
index 2b87880..efdfcf0 100755
--- a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleService.java
+++ b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleService.java
@@ -13,7 +13,9 @@
  *****************************************************************************/
 package org.eclipse.papyrus.model2doc.docx.services;
 
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
 
 public interface StyleService {
 
@@ -39,6 +41,16 @@
 	boolean applySectionTitleStyle(XWPFParagraph paragraph, int sectionLevel);
 
 	/**
+	 * Apply the style to the table
+	 *
+	 * @param table
+	 *            the table on which the style will be applied
+	 * @param document
+	 *            the document owning the table
+	 */
+	boolean applyTableStyle(XWPFTable table, XWPFDocument document);
+
+	/**
 	 * Apply the style given as parameter styleName
 	 *
 	 * @param paragraph
diff --git a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleServiceImpl.java b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleServiceImpl.java
index dfbd5fe..3b6d437 100755
--- a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleServiceImpl.java
+++ b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/services/StyleServiceImpl.java
@@ -15,22 +15,65 @@
 
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.model2doc.docx.Activator;
 import org.eclipse.papyrus.model2doc.docx.internal.util.StyleConstants;
 
 public class StyleServiceImpl implements StyleService {
 
+	/**
+	 *
+	 * @see org.eclipse.papyrus.model2doc.docx.services.StyleService#applyDocumentMainTitleStyle(org.apache.poi.xwpf.usermodel.XWPFParagraph)
+	 *
+	 * @param paragraph
+	 * @return
+	 */
 	@Override
 	public boolean applyDocumentMainTitleStyle(XWPFParagraph paragraph) {
 		String style = getDocumentMainTitleStyle();
 		return applyStyle(paragraph, style);
 	}
 
+	/**
+	 *
+	 * @see org.eclipse.papyrus.model2doc.docx.services.StyleService#applySectionTitleStyle(org.apache.poi.xwpf.usermodel.XWPFParagraph, int)
+	 *
+	 * @param paragraph
+	 * @param sectionLevel
+	 * @return
+	 */
 	@Override
 	public boolean applySectionTitleStyle(XWPFParagraph paragraph, int sectionLevel) {
 		String style = getSectionTitleStyle(sectionLevel);
 		return applyStyle(paragraph, style);
 	}
 
+	/**
+	 * @see org.eclipse.papyrus.model2doc.docx.services.StyleService#applyTableStyle(org.apache.poi.xwpf.usermodel.XWPFTable, XWPFDocument)
+	 *
+	 * @param table
+	 * @return
+	 */
+	@Override
+	public boolean applyTableStyle(XWPFTable table, XWPFDocument document) {
+		String styleName = StyleConstants.TABLE_STYLE_VALUE;
+		if (document.getStyles().styleExist(styleName)) {
+			table.setStyleID(styleName);
+			return true;
+		}
+		Activator.log.warn(NLS.bind("the style {0} does not exist in the template file", styleName)); //$NON-NLS-1$
+		return false;
+	}
+
+	/**
+	 *
+	 * @see org.eclipse.papyrus.model2doc.docx.services.StyleService#applyStyle(org.apache.poi.xwpf.usermodel.XWPFParagraph, java.lang.String)
+	 *
+	 * @param paragraph
+	 * @param styleName
+	 * @return
+	 */
 	@Override
 	public boolean applyStyle(XWPFParagraph paragraph, String styleName) {
 		XWPFDocument document = paragraph.getDocument();
@@ -38,19 +81,39 @@
 			paragraph.setStyle(styleName);
 			return true;
 		}
+		Activator.log.warn(NLS.bind("the style {0} does not exist in the template file", styleName)); //$NON-NLS-1$
 		return false;
 	}
 
+	/**
+	 *
+	 * @see org.eclipse.papyrus.model2doc.docx.services.StyleService#getDocumentMainTitleStyle()
+	 *
+	 * @return
+	 */
 	@Override
 	public String getDocumentMainTitleStyle() {
 		return StyleConstants.TITLE_STYLE_VALUE;
 	}
 
+	/**
+	 *
+	 * @see org.eclipse.papyrus.model2doc.docx.services.StyleService#getSectionTitleStyle(int)
+	 *
+	 * @param sectionLevel
+	 * @return
+	 */
 	@Override
 	public String getSectionTitleStyle(int sectionLevel) {
 		return getHeadingStyleValue() + sectionLevel;
 	}
 
+	/**
+	 *
+	 * @see org.eclipse.papyrus.model2doc.docx.services.StyleService#getHeadingStyleValue()
+	 *
+	 * @return
+	 */
 	@Override
 	public String getHeadingStyleValue() {
 		return StyleConstants.HEADING_STYLE_VALUE;
