amv8
Messages postés4Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention28 février 2007
-
27 févr. 2007 à 13:19
amv8
Messages postés4Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention28 février 2007
-
28 févr. 2007 à 17:21
Salut à tous,
Je viens demander votre aide pour un problème qui me bloque depuis 2 jours déjà.
Je vous fais une rapide descritpion de la situation :
Je travaille actuellement sur un projet ou des gens doivent créer des cartes de lubrification pour des machines. Il existe un document word standard sur lequel on vient créer sa carte. Mon role est de simplifier la démarche, en attribuant automatiquement un numéro à la carte, en la classant dans le bon dossier (un dossier par machine), et surtout en ajoutant la description de la carte (numéro de la carte, équipement, angle de vue...) en en tête. J'ai donc créé un document word avec un formulaire dans lequel on vient remplir la description de la carte. Le problème est sur le transfert de ces infos dans le document standard. Actuellement je crée une copie du document standard à laquelle j'attribue le bon nom et que je range dans le bon dossier, le problème est ensuite de transferrer les donnée du formulaire dans l'entête de la carte modifiée. Je crée un fichier .ini dans lequel je stocke les données du formulaire mais je n'arrive pas ensuite à demander le transfert de ces données vers la carte ( j'ai créé des textbox sur cette carte aux emplacements censés recevoir les infos).
Si quelqu'un peut m'aider ça serait vraiment sympa. N'ésitez pas a me demander plus d'infos si ce n'est pas clair.
Je vous joinds mon code de ma sub:
Private Sub UsfValider_Click()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
'On test le repertoire du module
If Dir$("C:\Cartes" & UsfListBoxModule.Value, vbDirectory) = vbNullString Then
'le répertoire n'existe pas, on le crée
MkDir "C:\Cartes" & UsfListBoxModule.Value
Else
'le répertoire existe
End If
'On teste le repertoire de la ligne
If Dir$("C:\Cartes" & UsfListBoxModule.Value & "" & UsfTxtNumLign.Value, vbDirectory) = vbNullString Then
'Je crée un fichier ini ou je viens stocker les donnée du formulaire
Open "C:\Cartes\tranfert.ini" For Output As #2
Print #2, num
Print #2, UserForm1.UsfTxtNumLign.Value
Print #2, UserForm1.UsfTxtEquip.Value
Print #2, UserForm1.UsfTxtVue.Value
Close #2
'Emplacements sur la carte ou je viens afficher les infos
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 27 févr. 2007 à 16:15
Bonjour
Je sui désolé, je ne réponds pas à ta question pourquoi cela ne fonctionne pas mais je te propose d'essayer une autre solution : ma solution : jete proposer de stocker les informations dans le document lui-même (signet ou champs de personnalisation), le fichier Ini j'aime pas trop, j'ai déjà fait un tel projet et j'ai préfèré faire une macro qui récupère toutes les infos dans tous les fichiers -> Ces infos peuvent être alors stockées sous forme de fichier Ini de table dans une base de données, ....
Solution 1: charger les informations dans des champs de personnalisation
'Création manuelle du champ personnalisé : Fichier/ Propriété/ Personnalisation / Nom : saisir "NumLigne" type "Texte", la valeur et cliquer sur "Ajouter"
dans le document Word à l'emplacement prévu Insertion/ Champ/ DocProperty : sélectionner : Numligne
comme la valeur "num" provient d'un fichier .INI, voici l'automatisation :
'Création automatique en VBA de la même propriété personnalisée:
ActiveDocument.CustomDocumentProperties.Add Name:="Numligne", LinkToContent:=False, Type:=msoPropertyTypeString, Value:=num
'Insertion automatique du champ qui affiche la valeur du champ personnalisé
Positionne le pointeur sur le lieu d'insertion
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"DOCPROPERTY Numligne ", PreserveFormatting:=True
Solution 2: charger les informations dans des signets (Bookmarks) ActiveDocuments.Bookmarks.add .....
Je ne te répondrais pas ce jour mais demain si tu as d'autres questions
amv8
Messages postés4Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention28 février 2007 28 févr. 2007 à 10:05
Salut,
Tout d'abord merci pour ton aide car mon message n'était pas forcément clair. Comme tu le suggères, passer par un fichier ini n'est peut etre pas nécessaire et ta solution ( la solution 1 ) me semble convenir. Néanmoins j'ai une erreur d'automation lors de la création du champs, et je n'arrive pas à voir d'où vient cette erreur. Ce qui me semble étrange c'est que lorsque je tape le code habituellement à chaque "." vba me propose une liste de commandes et la ça s'arrète après ActiveDocument.CustomDocumentProperties , le Add n'est pas proposé et du coup je ne connais pas non plus les propriétés à remplir. Cela est-il normal ( je débute en vba et je m'appuie donc beaucoup sur les aides fournies par le logiciel).
Si il est possible de résoudre ce problème,après, comment postioner le champs dans la feuille à l'aide du code?
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 28 févr. 2007 à 10:32
Bonjour
Je suis là au rendez-vous
Pour l'utilisation de l'aide dès que l'on frappe sur "." VBA ne fournit pas les propriétés disponibles (je viens de vérifier le cas de CustomDocumentProperties).
Effectivement pour positionner le curseur pour l'insertion c'est un peu acrobatique
Mais si le champ est prédéfini dans un modèle .dot et déjà positionné la création avec Add n'est pas utile puisqu'elle a été faite manuellement et le document mais à jour le champ dès lors que le champ est mis à jour par ActiveDocument.DocumentProperties("num") .value= valeur requise et que avant l'enregisterment du document est appelé le code suivant : ActiveDocument.Fields.Update
Vous n’avez pas trouvé la réponse que vous recherchez ?
amv8
Messages postés4Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention28 février 2007 28 févr. 2007 à 10:44
Merci de ta réponse aussi rapide,
J'ai essayé ce que tu m'as indiqué et cela marchait. Le problème est que les champs à modifier doivent être situés dans l'entête du document, et je n'arrive pas à inserrer un champs dans l'entête. Donc je pense faire plus simple en inserrant directement mon texte dans l'entête avec un code du type :
WordApp.Selection.HeaderFooter ??? "Carte n°" & num & " L " & NumLigne &
Le problème est comme tu peux le voir je ne trouve pas la bonne commande pour inserer le texte dans l'entête du document.
Je crois que si tu peux m'aider la dessus, le problème sera résolu !
Je sollicite donc encore tes services.... merci !
If ActiveWindow.ActivePane.View.Type = wdNormalView _
Or ActiveWindow.ActivePane.View.Type = wdOutlineView _
Or ActiveWindow.ActivePane.View.Type = wdMasterView Then
ActiveWindow.ActivePane.View.Type = wdPageView
End If
Mettre à jour les zones d'entete et de pied de page (utile avec les champs personnalisé avant enregistrement
amv8
Messages postés4Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention28 février 2007 28 févr. 2007 à 17:21
C'est bon j'ai enfin terminé,
Finalement je n'ai pas utilisé les entêtes (je n'avais pas encore vu ta réponse), j'ai donc fais un simple texte avec encadrement et alignement centré. Le résultat est plutot convaincant puisque cela m'a permis d'utiliser une police différente pour chacune des informations affichées.
En tout cas je te remercie puisque finalement je n'utilise pas de fichier intermédiaire et tes conseils m'ont été bien utiles pour comprendre l'automation d'office.
J'affiche mon code qui est plutot lourd mais ça donnera peut etre des idées pour les optimisateurs !