Convertir tous les fichiers .dat d'un repertoire en fichiers .xls

Signaler
Messages postés
2
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
17 janvier 2006
-
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
-
Bonjour,


Ceci est mon premier message sur ce forum. J espere poster dans la bonne section.


Voici mon probleme:
Je dois convertir successivement plusieurs documents .dat au format excel sur lesquels je fais quelques manipulations.
Les fichiers .dat ont tous le meme format (separation des colonnes par des espaces, les en tetes ont le meme nombre de lignes...)
Seuls les noms de fichiers diffèrent. Pour l'instant, j'ai crée une macro qui va chercher dans un répertoire fixe un nom de fichier fixe, qui fait quelques manip et qui enregistre sous un nom fixe le nouveau fichier .Xls.


je fais ensuite des copier-coller ou je change manuellement le nom des fichiers.


par exemple:


Workbooks.OpenText Filename:="D:\...\essai1.dat", _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1)), TrailingMinusNumbers:=True
Sheets("essai1").Select
Rows("1:15").Select
Selection.Delete Shift:=xlUp
Range("C2").Select
ActiveCell.FormulaR1C1 = "toto1"
ActiveWorkbook.SaveAs Filename:="D:\EVADYS_H\statique\essai1.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False


Workbooks.OpenText Filename:="D:\EVADYS_H\statique\essai2.dat", _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1)), TrailingMinusNumbers:=True
Sheets("essai2").Select
Rows("1:15").Select
Selection.Delete Shift:=xlUp
Range("C2").Select
ActiveCell.FormulaR1C1 = "toto2"
ActiveWorkbook.SaveAs Filename:="D:\EVADYS_H\statique\essai2.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False


etc...


Je voudrais savoir, s'il etait possible de faire (simplement) une macro qui scanne tous les fichiers .dat d'un repertoire que je choisirais via une boite de dialogue (ou du repertoire dans lequel je lance ma macro) et qui ferait automatiquement les opérations citées précedement.


J'ai fait une recherche sur le forum mais ca n a rien donné.


Merci

3 réponses

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Eh non, raté, fallait poster ton message dans la rubrique "VBA" (Visual Basic for Application) !

Bon, je ne vais pas te donner le solution toute faite (héhé). Je te laisse déjà regarder l'aide du VBA (touche F1 ) à la rubrique "Objet" puis "File System Object" (dit aussi FSO). C'est un objet très simple à minupuler qui permet de manipuler les dossiers/fichiers sur le disque.

Il te faudra aussi un "For Each"...

Après, soit tu utilises une cellule (où une fenêtre de ton crue [UserForm]) dans laquelle l'utilisateur entrera le chemin d'accès du dossier (ou alors l'API de sélection des dossiers... cf. sources et forums VBFrance!). Dans ce cas, il faudra parcourir tous les fichiers contenus dans ce dossier (après avoir, évidemment, vérifier son existance) le tout avec for Each, le FSO et un petit test sur l'extension des fichiers (parce qu'il n'y aura pas que des .dat dans le dossier!).

Mais pour toutes les manipulations, il te faut créer une fonction... Je sais pas si tu sais comment ça fonctionne alors voici un petit exemple :

Public Function NomDeTaFonction(ByVal NomDeLargument1 As Type) 'Type étant un type!!! String par exemple!
Dim varTemporaire As Type
varTemporaire = NomDeLargument + 24 + 32 ...
... 'Instructions
NomDeTaFonction = varTemporaire 'Pour que la fonction renvoie la valeur varTemporaire
End Function

L'appel :
varResultat = NomDeTaFonction(VariableATraiter)

Il te suffit donc d'utiliser comme argument de ta fonction le nom des fichiers .Dat et ainsi, d'automatiser le traitement...
Allé, parce que je suis bien sympa je vais te donner ce bout de code (mais après c'est à toi de faire le reste d'accord!

Private Sub Button1_Click()
Dim varDossier As String
varDossier = "D.\EVADYS_H\statistique"
'FSO... GetFolder...

For Each FichierDat In ... (Collection Files du Folder!)
'FichierSource = "essai2.dat" 'A ne pas mettre, c'est juste pour te faire voir les valeurs!
'FichierDestination = "essai1.xls"

Call TraitementDesFichiersDAT( FichierSource, FichierDestination)
End For
End Sub

Private Function TraitementDesFichiersDAT(ByVal argFichierDAT As String, ByVal argFichierXLS As String)
Workbooks.OpenText Filename: =
argFichierDAT, _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1)), TrailingMinusNumbers:=True
Sheets("essai1").Select
Rows("1:15").Select
Selection.Delete Shift:=xlUp
Range("C2").Select
ActiveCell.FormulaR1C1 = "toto1"
ActiveWorkbook.SaveAs Filename:=
argFichierXLS, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

End Sub

(Wai, bon, ok, ici j'ai utilisé une procédure au lieu d'une fonction... mais c'est encore plus simple donc!)

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
2
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
17 janvier 2006

merci,

je vais m'attaquer au decryptage de ta reponse. (pour l instant, je ne sais qu'enregistrer les macros en temps reel, donc j ai encore pas mal de boulot)

question subsidiaire et HS. Comment fait-on pour editer les messages? je viens de m'apercevoir que j'ai laissé le nom du répertoire, ce que je n aurais pas du faire. Peux-tu aussi l'effacer stp?
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Malheureusement non! Une fois les messages postés on ne peut plus les modifier (et ceci afin de conserver la structure linéaire). D'où l'importance de bien relire avant de poster ;-)
En revanche, les admins peuvent supprimer des posts. Mais pas les modifier!

Mais bon, ce n'est pas grave s'il y a un path qui traine!

En revanche, lorsque une réponse te convient, s'il te plait, clique sur le bouton "réponse accepté" (comme indiqué dans ma singature!!!).

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )