Dépouiller plusieurs centaines de formulaires Excel
Bonjour,
Voici mon problème, j'ai plusieurs centaines de fichiers Excel différents (formulaire) que je souhaiterai rassembler en 1 tableau Excel unique ou:
Les lignes correspondraient à un fichier.
Les colonnes aux réponses du formulaire.
J'ai cru comprendre qu'en mettant tous mes fichiers dans un seul et même dossier, il était possible avec une macro d'automatiser le dépouillement.
Etant donné que mes connaissances en macro sont proche de zéro pourriez vous m'aiguiller sur la façon de faire.
Je vous met en pièce jointe un exemplaire du formulaire
Je vous remercie par avance de l'aide que vous pourriez m'apporter
rectification, il ne s'agit pas véritablement d'un "Formulaire excel " mais plutôt d'une fiche identique à tous les fichiers et qui a été rempli en fonction des caractéristiques de l'ouvrage.
Bonsoir,
Il faut établir le modèle de ton fichier cible, à partir duquel tu piloteras l'opération.
Fournir également quelques précisions sur la structure de tes noms de fichiers, éventuellement l'ordre dans lequel tu veux classer...
Cordialement.
Bonjour et merci d'avance pour l'aide que vous m'apporter.
Ci joint le fichier cible, les colonnes correspondent aux valeurs que je souhaite récupérer dans la fiche , et les lignes correspondent a chacune des fiches (ouvrages en cours d'eau).
Chaque nom de fichier correspond à l'identifiant de l'ouvrage: exemple P1-RAB, P1-DOU, P3-LUZ ...
Je cherche à rapatrier toutes ces fiches dans un seul et unique fichier excel afin de pouvoir ensuite integrer les données dans un SIG: QGIS.
Etant novice en macro, existe t'il un tuto ou toute autre document qui pourrait m'aider à réaliser cette macro.
Merci par avance
Bonjour,
Les macros des applications Office, Excel au cas particulier, se font dans un langage de programmation : Visual Basic, une version asservie pour opérer avec l'application sur laquelle on l'utilise (ne fonctionnera pas en dehors), version pour Applications, d'où l'acronyme VBA le plus souvent utilisé.
Cette version permet une utilisation relativement simplifiée de ce langage (en ce sens que tu n'as pas besoin de poser de façon programmatique le cadre dans lequel tu vas opérer, soit pas besoin de déclarer préalablement les composant Excel sur lesquels tu vas travailler [on dit instancier...], c'est acquis lors de l'appel du programme dans l'application). Pour autant, toutes les fonctionnalités du langage demeurent disponibles, ce qui réclame pour une bonne utilisation un apprentissage minimal...
Il est donc conseillé d'acquérir quelques rudiments de VBA, ce que tu trouveras dans les cours de ce site (et de quelques autres sites spécialisés), en te concentrant au départ sur l'accès à l'éditeur VBA et la reconnaissance de ses différents composants que tu auras à utiliser, ne serait-ce que pour pouvoir mettre correctement en place les éléments que l'on te fournira. Au-delà, une vue des éléments de programmation (procédures, variables, constantes, principales instructions... d'une part et hiérarchie du modèle objet d'Excel d'autre part, sera utile pour savoir ce que tu fais, et au niveau immédiat comprendre les termes utilisés par les uns et les autres...
On pourra revenir sur tout ça...
- E10 n'existant pas dans la fiche, s'agit-il de F10 ?
et comme tu l'as dit, le nom du fichier étant l'identifiant, il sera inutile de doubler cette information...
- en ce qui concerne les fichiers, soit on en a une liste préalable, et on insèrera les données dans un ordre prédéfini, soit on pioche dans le dossier jusqu'à épuisement (et dans ce cas, faut-il reclasser dans un ordre déterminé ensuite (trier quoi...)
Comme je serai en déplacement aujourd'hui, un certain délai avant ma prochaine intervention...
(Mais tu peux avoir d'autres intervenants qui s'intéressent à ton projet...)
Cordialement.
Effectivement petite erreur, il s'agit de F10
L'ordre importe peu, puisque je reclasserai les données ensuite en fonction du nom de l'identifiant.
Pour la macro, je sais comment insérer une macro dans excel, ce qui me bloque c'est le langage VBA, finalement la rédaction de la macro.
J'ai trouver un exemple de macro qui semble correspondre à ce que je recherche (voire piece jointe), est ce que je suis sur la bonne voix.
Bonjour,
Sub parcourirFichiers()
Dim chemin As String, Fichier As String
Dim adr, valeur(), lig As Long, col As Long
Dim wb As Workbook, wb2 As Workbook
Set wb = ThisWorkbook
chemin = wb.Path + "\"
adr = [A1].Resize(, Cells(1, Columns.Count).End(xlToLeft).Column - 1)
lig = Cells(Rows.Count, 1).End(xlUp).Row
Fichier = Dir(chemin & "*.xl*") ' 1er fichier
Application.ScreenUpdating = False
Do While (Len(Fichier) > 0)
If Fichier <> ThisWorkbook.Name Then
Set wb2 = Workbooks.Open(chemin & Fichier)
' traitement
ReDim valeur(1 To 1, 1 To UBound(adr, 2))
valeur(1, 1) = Fichier
For col = 2 To UBound(adr, 2)
valeur(1, col) = wb2.Sheets("modele").Range(adr(1, col))
Next col
wb2.Close
lig = lig + 1
Cells(lig, 1).Resize(, UBound(adr, 2)) = valeur
End If
Fichier = Dir() ' fichier suivant
Loop
End Sub
mettre ce fichier dans le répertoire à traiter.
eric
Bonjour Sylv19, bonjour à tous,
un exemple sans ouvrir les fichiers,
Sub test()
Dim Chemin As String, Fichier As String, i As Long, lign As Integer, coln As Integer
Chemin = ThisWorkbook.Path & "\" 'en supposant que tous les fichiers soient dans le même répertoire que ce fichier
col = Cells(1, Columns.Count).End(xlToLeft).Column
Fichier = Dir(Chemin & "*.xls") 'en supposant que tous les fichiers formulaire aient l'extention .xls
Do While Fichier <> ""
If Fichier <> ThisWorkbook.Name Then
n = Cells(Rows.Count, 2).End(xlUp).Row + 1
Cells(n, 1) = Fichier
For i = 2 To col
lign = Range(Cells(1, i).Value).Row
coln = Range(Cells(1, i).Value).Column
Cells(n, i) = Data_in_closed_workbook(Chemin, Fichier, "modele", lign, coln)
Next
End If
Fichier = Dir
Loop
End Sub
Function Data_in_closed_workbook(sRep As String, sFile As String, sSh As String, rw As Integer, cn As Integer) As Variant
x = ExecuteExcel4Macro _
("'" & sRep & "\[" & sFile & "]" & sSh & "'!R" & rw & "C" & cn & "")
Data_in_closed_workbook = x
End Function
Bonjour sabV,
j'avais fait un premier jet avec ExecuteExcel4Macro, le pb est qu'une cellule vide retourne 0.
Pas toujours gênant, à voir. Et comme j'avais la flemme de faire avec une autre technique...
eric
Bonjour,
Un grand merci à vous tous pour toutes l'aide apportée, pour un novice comme moi ce petit programme c'est tous simplement inespéré (magie d'Excel).
ça va m'éviter de longues heures (jours) à tout ressaisir dans un tableau. J'ai 556 fichiers de ce type
revenons à nos moutons, j'ai mis le Fichier sylv19-résumer.xls dans mon dossier contenant les formulaires (*.xls version 97/2003)
Quand j'exécute la macro, les lignes par fichiers se créent, la première colonne est complétée par le nom du fichier, mais toutes les autres colonnes affichent #REF!
Une idée du problème?
J'ai mis en pièce jointe le dossier tel que je l'ai sur mon ordi.
oups oublier la pièce jointe
Bonjour,
quelle solution as-tu choisi ?
eric
Bonjour,
ça y est j'ai réussi à faire fonctionner le fichier d'éric, ça fonctionne parfaitement, il y avait d'autres fichiers qui venaient polluer l'exécution. Encore un grand merci.
Néanmoins j'aimerai comprendre pourquoi la macro de SABV ne fonctionne pas chez moi.
Si vous pouvez m'éclairer
Bonjour à tous,
sylv19 , j'ai mis les adresses de cellule à récupérer en ligne 1, cela pour facilité la modification si jamais le formulaire serait modifié.
chacune de ces adresses (en ligne 1) est traité dans cette section de la macro:
For i = 2 To col 'pour chaque cellule de la ligne 1 entre la colonnes 2 et la dernière colonne de la ligne 1
lign = Range(Cells(1, i).Value).Row
coln = Range(Cells(1, i).Value).Column
Cells(n, i) = Data_in_closed_workbook(Chemin, Fichier, "modele", lign, coln) 'lire l'info sur le classeur fermé
Next
Bonjour,
Je n'ai pas trouvé pourquoi le fichier de SABV ne fonctionne pas!! une idée?