Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Masquer/Afficher une ligne de tableau Word en fonction de la valeur du contrôleur de contenu

chaelie2015

XLDnaute Accro
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 ?

A+
 

Pièces jointes

  • Charlie doc type Tableau.docx
    28.8 KB · Affichages: 2
  • Charlie Excel vers Word Tableau.xlsm
    19.8 KB · Affichages: 3
Dernière édition:
Solution
Bonjour chaelie2015, le forum,

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
A+

job75

XLDnaute Barbatruc
Bonjour chaelie2015,

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
A+
 

Pièces jointes

  • Charlie doc type Tableau.docx
    29.9 KB · Affichages: 2
  • Charlie Excel vers Word Tableau.xlsm
    22 KB · Affichages: 1

chaelie2015

XLDnaute Accro
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
 

Pièces jointes

  • Charlie Excel vers Word Tableau.xlsm
    20.3 KB · Affichages: 2
  • Charlie doc type Tableau.docx
    31.8 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour chaelie2015, le forum,

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
A+
 

Pièces jointes

  • Charlie doc type Tableau.docx
    31.8 KB · Affichages: 5
  • Charlie Excel vers Word Tableau.xlsm
    22 KB · Affichages: 6

chaelie2015

XLDnaute Accro
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
 

Pièces jointes

  • CHARLIE Feuille de saisie PV CMU Bel.xlsm
    50.1 KB · Affichages: 8
  • CHARLIE PV CMU Bel 2023 Model.docx
    38.7 KB · Affichages: 4

job75

XLDnaute Barbatruc
Eh oui toutes les lignes (sauf les titres) sont supprimées dans le fichier Word.

Pour comprendre mettez l'instruction End juste après le 1er Next et exécutez la macro.

Toutes les cellules des colonnes "Signatures" contiennent le texte "Cliquez ici".

Le code supprime toute la ligne dès qu'au moins une cellule contient ce texte.
 

job75

XLDnaute Barbatruc
Bonjour Chaelie2015, le forum,
les lignes vides sans texte sont toujours présentes ????
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.

A+
 

chaelie2015

XLDnaute Accro
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
 

Discussions similaires

  • Question
Microsoft 365 Tableau
Réponses
24
Affichages
736
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…