Macro Excel-Word problème dans la fonction renvoi

Bonjour,

Point 1.

Je complète un fichier word à partir d’un fichier excel source

Les signets me permettent de compléter le fichier en automatique.

Cependant, certains signets sont répétés plusieurs fois, j’ai donc voulu essayé d’utiliser la fonction « renvoi / signets » me cela ne fonctionne pas

Je ne vois pas trop comment m’y prendre afin d’éviter d’avoir beaucoup de signets.

Sur la ligne jaune du document word par exemple, le nom/prénom revient plusieurs fois

Pourriez-vous m’aider ?

Point 2.

De plus, le fichier word étant protégé (mot de passe « cedric »), j’aimerai que le fichier word soit sauvegardé en « c/temp » à la fin de la procédure.

Le code que j’ai mis ne fonctionne pas.

Pourriez-vous également m’aider ? le but étant qu’un mail parte ensuite avec le document word en copie donc j’irai el récupérer dans le « c/temp »

Voici le lien vers les fichiers :

Merci d’avance

cédric

Bonjour,

Points 1 et 2

Il est plus simple d'utiliser des champs de fusion.

1- menu Insertion --> Groupe Zone de texte --> Bouton Composants Quick Part --> Champ --> ChampFusion

2- Donner des noms de champ significatifs : nom_société, siège_société, représentant_société, …

3- Nommer avec le même nom les cellules correspondantes du classeur Excel (menu Formules --> Gestionnaire de noms)

Exemple ci-joint avec les premiers champs de fusion pour votre document Word avec code adapté

ci-dessous détail du code modifié

Option Explicit

Sub avenant()

    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim i As Byte
    Dim nom As String, chemin As String, docpath As String
    Dim champ As Field

    Set WordApp = CreateObject("word.application") 'ouvre une session Word
    Set WordDoc = WordApp.Documents.Open("\\VCN.DS.VOLVO.NET\CLI-HM\HM1160\R384703\My Documents\-- TRAVAIL\Avenant TPT\MODELE -AVENANT TEMPS PARTIEL THERAPEUTIQUE (FR46 RT SAS).docx")  'ouvre le document Word
    'ActiveDocument.Unprotect Password:="cedric"
    WordApp.Visible = True 'Word est masqué pendant l'opération

    On Error Resume Next
    '// initialisation champs de fusion
    WordDoc.Fields.Update

    '// remplissage champs de fusion
    For Each champ In WordDoc.Fields
        'Si champ de fusion ...............................
        If champ.Type = wdFieldMergeField Then
            'suppression guillemets champ de fusion
            nom = Replace(champ.Result, Chr(171), ""): nom = Replace(nom, Chr(187), "")
            'remplissage champ de fusion à partir de la valeur de cellule à laquelle le nom fait référence
            champ.Result.Text = Range(nom).Value
        End If
    Next champ

    '// sauvegarde document dans répertoire temporaire
    chemin = Environ("tmp") & "\"
    nom = "avenant"
    docpath = chemin & nom
    WordDoc.SaveAs2 Filename:=docpath, FileFormat:=wdFormatXMLDocument

    '// fermeture application Word
   WordApp.Quit

End Sub

hello Thev,

Nickel, super boulot cela cadre exactement avec mon besoin.

Par contre, j'aurai besoin de trouver une solution pour masquer les semaines qui sont à 0

Je m'explique, un salarié peut être en temps partiel thérapeutique une semaine paire avec un certain horaire et en semaine impaire avec un autre horaire.

Mais on a également le cas de salarié qui ont toujours le même horaire que l'on soit en semaine paire ou impaire.

J'aimerais ne faire afficher que la semaine paire et impaire si horaires différents sinon que l'horaire paire qui sera par défaut l'horaire de toutes les semaines.

le but étant de ne pas voir dans word les semaines à 0 (impaire donc) et ne pas faire apparaitre la notion de paire/impaire si horaire habituel sans cette notion de paire/impaire

Sous Excel, je sais faire mais sous Word je n'ai aucune idée.

Lien vers les fichiers corrigés avec la nouvelle solution :

Si qq a des idées je suis preneur

Merci d'avance

Cédric

Bonsoir,

Une solution :

1- en ajoutant dans le classeur, une ligne horaire normal avec la référence de nom associée : horaire_normal

2- en mettant en tableau dans le document Word, les plages horaires

3- en ajoutant dans le document Word, une variable nommée : horaire_normal (comme la référence de nom du classeur), permettant de conditionner l'affichage "Paire" ou non.

ci-jointe nouvelles versions

ci-dessous code mis à jour

Option Explicit

Sub avenant()
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim i As Byte
    Dim nom As String, chemin As String, docpath As String
    Dim champ As Word.Field
    Dim tab_doc As Word.Table

    Set WordApp = CreateObject("word.application") 'ouvre une session Word
    Set WordDoc = WordApp.Documents.Open("\\VCN.DS.VOLVO.NET\CLI-HM\HM1160\R384703\My Documents\-- TRAVAIL\Avenant TPT\Mod?le - Avenant TPT_FR46 RT SAS.docx")  'ouvre le document Word
    'ActiveDocument.Unprotect Password:="cedric"
    WordApp.Visible = True 'Word est masqué pendant l'opération

    '// affectation de la valeur de la variable de document "horaire_normal" en fonction de la cellule correspondante du classeur
    WordDoc.Variables("horaire_normal").Value = Range("horaire_normal").Value

    '// masquage éventuel du tableau "Semaine Impaire"
    For Each tab_doc In WordDoc.Tables
        tab_doc.Range.Font.Hidden = False
        If Range("horaire_normal") = "oui" And tab_doc.Title = "Semaine Impaire" Then tab_doc.Range.Font.Hidden = True
    Next tab_doc

    On Error Resume Next
    '// initialisation champs de fusion
    WordDoc.Fields.Update

    '// remplissage champs de fusion
    For Each champ In WordDoc.Fields
        'Si champ de fusion ...............................
        If champ.Type = wdFieldMergeField Then
            'suppression guillemets
            nom = Replace(champ.Result, Chr(171), ""): nom = Replace(nom, Chr(187), "")
            'remplissage champ de fusion à partir de la valeur de cellule à laquelle le nom fait référence
            champ.Result.Text = Range(nom).Value
        End If
    Next champ

    '// sauvegarde document dans répertoire temporaire
    chemin = Environ("tmp") & "\"
    nom = "avenant"
    docpath = chemin & nom
    WordDoc.SaveAs2 Filename:=docpath, FileFormat:=wdFormatXMLDocument

    '// fermeture application Word
    WordApp.Quit

End Sub

Hello

Pour l'affichage "paire" ou vide cela fonctionne parfaitement

Par contre, les haires de la table impaire ne se masque pas si horaire à 0

'// masquage éventuel du tableau "Semaine Impaire"

For Each tab_doc In WordDoc.Tables

tab_doc.Range.Font.Hidden = False

If Range("horaire_normal") = "oui" And tab_doc.Title = "Semaine Impaire" Then tab_doc.Range.Font.Hidden = True

Next tab_doc

Merci pour ton aide.

Cédric

Par contre, les horaires de la table impaire ne se masquent pas si horaire à 0

Bizarre car cela fonctionnait dans mes tests.

Peux-tu renvoyer la version qui ne fonctionne pas.

voici le lien vers les fichiers

Chez moi, ça fonctionne parfaitement.

Je ne vois qu'une solution. Faites une exécution pas à pas et vérifiez pour le 2ème tableau que la condition de l'instruction ci-dessous s'applique bien :

If Range("horaire_normal") = "oui" And tab_doc.Title = "Semaine Impaire" Then tab_doc.Range.Font.Hidden = True

En execution pas à pas, il passe bien dessus mais il semble qu'il applique un format particulier sur l'horaire impaire

Au lieu de le masquer, il le surligne. bizarre

Je joins le résultat en copie.

Par contre pour comprendre, à quoi correspond à la 2ème macro écrite ? quel est son utilité

Sub ajout_variable_horaire_normal()

Dim WordApp As Word.Application

Dim WordDoc As Word.Document

Set WordApp = CreateObject("word.application") 'ouvre une session Word

Set WordDoc = WordApp.Documents.Open("\\VCN.DS.VOLVO.NET\CLI-HM\HM1160\R384703\My Documents\-- TRAVAIL\Avenant TPT\Modèle - Avenant TPT_FR46 RT SAS.modif2.docx") 'ouvre le document Word

ActiveDocument.Variables.Add "horaire_normal"

End Sub

Merci encore une fois

Cédric

5avenant.docx (130.24 Ko)

Bonsoir,

Par contre pour comprendre, à quoi correspond à la 2ème macro écrite ? quel est son utilité

La deuxième macro n'a été exécutée qu'une fois et correspond à la création de la variable ""horaire_normal" dans le document. Il semble que VBA soit le seul moyen de créer une variable de document ou de la supprimer.

En execution pas à pas, il passe bien dessus mais il semble qu'il applique un format particulier sur l'horaire impaire

Au lieu de le masquer, il le surligne. bizarre

Maintenant, je tiens l'explication. En fait dans votre application Word, vous avez dû activer l'option d'afficher le texte masqué et c'est la raison pour laquelle vous avez ce format particulier.

Peut-être avez-vous cliqué sur le bouton permettant d'afficher les marques de paragraphe ?

ou menu Fichier --> Options --> Affichage --> Texte masqué coché ?

Merci

effectivement le problème vient de là

En décochant "hidden text" (je suis en anglais) en affichage cela fonctionne parfaitement

Cependant encore un problème, je n'arrive pas à conserver en dur le fait de décocher

dès que j'ouvre de nouveau word, la zone "Texte masqué" est de nouveau masqué ! et dans les fonctions avancées je n'ai pas ce choix

j'ai essayé d'appeler une macro trouvé par une collègue mais cela ne fonctionne pas, je ne sais pas comment le forcer à décocher

Sub WordSettings()

ActiveDocument.ActiveWindow.View.ShowAll = False

ActiveDocument.ActiveWindow.View.ShowHiddenText = False

End Sub

Merci pour ton aide encore une fois

cédric

Cependant encore un problème, je n'arrive pas à conserver en dur le fait de décocher

1- cliquer sur “File”.

2- cliquer sur “Options”

3- cliquer sur “Display”.

4- Descendre à la section “Always show these formatting marks on the screen” , décocher “Hidden text” .

J'avais bien trouvé comment le faire

Le problème est que après avoir cliquer sur OK et que je sors de Word, si je reviens dans Word, de nouveau la coche est remise

J'ai regardé sur plusieurs PC de collègues et le problème semble identique

Il n'arrive pas à conserver ma sélection de décocher ! Vraiment bizarre

Il n'arrive pas à conserver ma sélection de décocher ! Vraiment bizarre

Cela pourrait peut être venir du document modèle (Normal.dotm) que Word utilise systématiquement à l'ouverture ...

Bonsoir,

Une autre solution pour cacher le 2ème tableau en jouant sur la hauteur des lignes (sans passer par le masquage)

    For Each tab_doc In WordDoc.Tables
        tab_doc.Range.Rows.SetHeight 12, wdRowHeightExactly
        If Range("horaire_normal") = "oui" And tab_doc.Title = "Semaine Impaire" Then tab_doc.Range.Rows.SetHeight 0.1, wdRowHeightExactly
    Next tab_doc

Merci pour ton aide

Entre temps, j'ai réussi à trouver une autre solution via ce code très simple que j'appel en fin d'instruction

Et maintenant cela marche parfaitement

Sub WordSettings()

ActiveDocument.ActiveWindow.View.ShowHiddenText = False

End Sub

Un grand grand merci encore pour ton aide précieuse !

je clos le post donc

Cédric

Rechercher des sujets similaires à "macro word probleme fonction renvoi"