Bonjour
J'utilise un fichier Word en tant que modèle de document nommé "Charlie doc type Tableau". À l'intérieur de ce document, il y a un tableau qui contient plusieurs contrôles de contenu de texte enrichi que j'ai nommés comme suit : "Champs_Nom", "Champs_Prénom" et "Champs_Date".
De plus, j'ai un fichier Excel appelé 'Charlie Excel vers Word Tableau' "Feuille1" qui comprend un tableau avec deux colonnes (A et B) et quatre lignes. La première ligne contient les en-têtes du tableau.
Mon objectif est de faire en sorte que les valeurs entrées dans les cellules du tableau A1:B4 de ce fichier Excel soient automatiquement transférées dans les contrôles de contenu correspondants du document Word. Si un contrôle de contenu dans le tableau Word n'est pas renseigné, alors la ligne correspondante dans le tableau Word doit être masquée.
Exemple : Si, après l'exécution du code (que j'apprécie Job d'avoir fourni), la cellule B4 de la feuille 1 du fichier Excel est vide, alors la ligne contenant le contrôle de contenu correspondant dans le tableau Word sera masquée.
Est ce que c'est faisable ?
Bah c'est juste l'histoire d'imbriquer des boucles :
VB:
For Each tbl In Wdoc.Tables
ncol = tbl.Columns.Count
For i = tbl.Rows.Count To 1 Step -1
For j = 1 To ncol
If tbl.Cell(i, j).Range.Text Like "Cliquez ici*" Then tbl.Cell(i, j).Delete 2: Exit For 'wdDeleteCellsEntireRow
Next j, i, tbl
Au lieu de masquer une ligne du tableau il est aussi simple de la supprimer :
VB:
With Wdoc.Tables(1)
For n = .Rows.Count To 1 Step -1
If .Cell(n, 1).Range.Text Like "Cliquez ici*" Then .Cell(n, 1).Delete 2 'wdDeleteCellsEntireRow
Next
End With
Bonsoir JOB75
Après avoir testé ce code dans différents scénarios, j'ai rencontré une situation spécifique décrite dans le fichier joint (deux tableaux dans le document Word). Dans cette situation, le code ne parvient pas à supprimer les lignes vides dans le fichier Word?
Merci
Bah c'est juste l'histoire d'imbriquer des boucles :
VB:
For Each tbl In Wdoc.Tables
ncol = tbl.Columns.Count
For i = tbl.Rows.Count To 1 Step -1
For j = 1 To ncol
If tbl.Cell(i, j).Range.Text Like "Cliquez ici*" Then tbl.Cell(i, j).Delete 2: Exit For 'wdDeleteCellsEntireRow
Next j, i, tbl
Bonsoir Job, le forum
Je me tourne à nouveau vers vous, cette fois-ci avec le véritable fichier et tous les codes nécessaires. Mon problème persiste toujours lors de la suppression des lignes vides dans les tableaux du document Word. Cette fois-ci, en utilisant la combinaison de tous les codes présents dans le fichier Excel, j'ai fait une découverte surprenante qui m'a vraiment surpris : lors de l'exécution du code dans le module1, toutes les lignes des tableaux dans Word sont effacées. Pourriez-vous m'aider à comprendre ce qui se passe ?
Merci encore une fois par avance
Bah le code supprime les cellules vides uniquement quand au départ elles contiennent des contrôles de contenu.
Si l'on veut que les cellules vides sans contrôles de contenu soient aussi supprimées remplacez :
VB:
If tbl.Cell(i, j).Range.Text Like "Cliquez ici*" Then tbl.Cell(i, j).Delete 2: Exit For 'wdDeleteCellsEntireRow
par :
VB:
If tbl.Cell(i, j).Range.Text Like "Cliquez ici*" Or tbl.Cell(i, j).Range.Text = Chr(13) & Chr(7) Then tbl.Cell(i, j).Delete 2: Exit For 'wdDeleteCellsEntireRow
En effet une cellule vide d'un tableau Word contient les 2 caractères de codes 13 (retour chariot) et 7.
Re
Je m'excuse pour la multiplication des questions, en plus de la suppression des cellules vides dans le tableau, il semble ne pas effectuer la sauvegarde d'une copie du document Word.
De plus, je souhaite vous informer que j'ai peut-être mal défini le terme "vide" par rapport au contrôle de contenu dans les tableaux Word. Je fais référence aux cellules qui ne contiennent pas de texte saisi dans Excel .
mais les contrôles de contenu dans Word par défaut ils ne sont pas vide (cliquez ici ......etc;
Merci