Générer plusieurs fichiers sur la base d'un modèle
Bonjour,
Je suis à la recherche de comment faire pour réaliser la démarche suivante. Je l'ai déjà vu, je sais que c'est possible maintenant je ne sais pas comment. J'espère que l'un d'entre vous peut m'aider.
Situation:
Chaque année, je dois préparer des formulaires pour des entretiens annuels avec des collaborateurs. Je souhaite générer, sur la base d'un modèle d'entretien vierge (au format excel), un fichier par collaborateur. Ensuite, dans ce fichier je souhaite faire apparaitre les objectifs fixés lors de l'entretien de l'année précédente. Les objectifs sont enregistrés dans un fichier (individuel par collaborateur) dans un dossier sur le serveur. Aujourd'hui, tout est fait en Word, je fais des copier coller par collaborateur pour préparer les nouveaux fichiers. C'est un peu un travail de singe et une perte de temps. Quelles sont les formules ou fonction? Faut-il plutôt faire une Macro?
But
Pouvoir générer automatiquement sous excel un nouveau fichier par collaborateur avec les objectifs de l'année précédente.
Merci pour vos pistes et votre aide!!
Bonjour
Il y a plusieurs solutions.
Si le formulaire est bien créé dans Word sous forme de formulaire (déclaré comme tel et différenciant libellés/intitulés et champs de saisie) il est possible de réenregistrer l’ensemble des fiches remplies sous forme de fichiers de données ne contenant que les réponses.
Ceci par un macro pltôt qu'à la main.
Ensuite par VBA ou par PowerQuery (intégré à 2016) on peut fusionner toutes les réponses dans une même table exploitable ensuite normalement.
On peut aussi prévoir un formulaire par Excel dont les données saisies sont répercutées sur une ligne de tableau (autre onglet) puis retraiter tous ces tableaux des fichiers Excel par VBA ou par PowerQuery.
Bonjour
Il y a plusieurs solutions.
Si le formulaire est bien créé dans Word sous forme de formulaire (déclaré comme tel et différenciant libellés/intitulés et champs de saisie) il est possible de réenregistrer l’ensemble des fiches remplies sous forme de fichiers de données ne contenant que les réponses.
Ceci par un macro pltôt qu'à la main.
Ensuite par VBA ou par PowerQuery (intégré à 2016) on peut fusionner toutes les réponses dans une même table exploitable ensuite normalement.
On peut aussi prévoir un formulaire par Excel dont les données saisies sont répercutées sur une ligne de tableau (autre onglet) puis retraiter tous ces tableaux des fichiers Excel par VBA ou par PowerQuery.
Bonjour,
Donc, concrètement si je choisi la première variante et que mon formulaire est prêt, quelle est la manœuvre pour réaliser le fichier de donnée et les fusionner dans un même table?
Merci beaucoup et à bientôt
RE
Dans Word il y avait une option d'enregistrement des formulaires en données seules mais semble avoir disparu depuis 2007...
Pas grave j'ai trouvé plus simple sous réserve que tous les champs des formulaires aient bien des noms.
Stoker tous les formulaires remplis dans un dossier
Y stocker un document Excel avec une ligne avec les titres des champs à récupérer
Dans un autre classeur Excel créer un bouton et y associer le code suivant (adapter les trois variables et cocher la référence Scripting Runtime)
Option Explicit
Sub RecupFormulaires
Dim oFSO As New FileSystemObject
Dim oFil As File
Dim oFold As Folder
Dim wApp As Word.Application
Dim oDoc As Word.Document
Dim Compteur As Integer
Dim WBouvert As Boolean
Dim WB As Workbook
Dim Dossier as string
Dim Classeur as string
Dim Onglet as string
Dossier="E:\Formulaires\"
Classeur="Consolidation"
Onglet="Dépouillement"
Set oFold = oFSO.GetFolder(Dossier)
For Each WB In Workbooks
If WB.Name =Classeur Then WBouvert = True: Exit For
Next WB
If WBouvert <> True Then Workbooks.Open (oFold & "\" & Classeur): Set WB = ActiveWorkbook
WB.Worksheets(Onglet).Activate
Compteur = 0
Set wApp = CreateObject("Word.Application")
'wApp.Visible = True
For Each oFil In oFold.Files
If Right(oFil.Name, 4) = "docx" Then
Compteur = Compteur + 1
Set oDoc = wApp.Documents.Open(Filename:=oFold & "\" & oFil.Name)
Call Extract(oDoc, Compteur + 1)
Set oDoc = Nothing
End If
Next oFil
wApp.Quit
Set oFSO = Nothing
End Sub
Public Function Extract(oDoc As Object, Compte As Integer)
On Error Resume Next
Dim i, k, j As Integer
Dim resp
oDoc.Unprotect
'Objets de formulaires
'La propriété Name est le nom : pourrait être utilisé pour repérer la colonne Excel
i = oDoc.FormFields.Count
For j = 1 To i
ActiveSheet.Cells(Compte, j).Value = oDoc.FormFields(j).Result
Next j
k = j - 1
'Contrôles ActiveX
'La propriété OLEFormat.Object.Name est le nom : pourrait être utilisé pour repérer la colonne Excel
i = oDoc.InlineShapes.Count
For j = 1 To i
ActiveSheet.Cells(Compte, j + k).Value = oDoc.InlineShapes(j).OLEFormat.Object
Next j
k = k + j - 1
'Contrôles de Contenu
'La propriété Tag est le nom : pourrait être utilisé pour repérer la colonne Excel
i = oDoc.ContentControls.Count
For j = 1 To i
ActiveSheet.Cells(Compte, j + k).Value = oDoc.ContentControls(j).Range
Next j
ActiveSheet.Cells(Compte, k + j) = oDoc.Name
ActiveSheet.Columns.Update
oDoc.Close SaveChanges:=False
End Function
On peut l'adapter pour mettre le code dans le classeur de récupération, comparer les noms des champs Word aux titres pour que tous champs vide ne décale pas...