Vba excel: ouvrir un fichier

Résolu/Fermé
Johny - 23 mars 2009 à 12:58
 Johny - 24 mars 2009 à 16:17
Bonjour,

Ma question concerne vba sous excel.
Tout d'abord je ne programme pas du tout. On me demande de changer un code fait par un informaticien qui était là avant.

Pour l'instant, excel ouvre un fichier par l'application application.getopenfilename, une boite de dialogue apparait et demande où aller chercher le fichier txt. La requête qu'on m'a formulé consiste à ouvrir ce fichier de manière automatique.

Voici le code d'origine:

'Recherche du fichier log contenant les données de FMC
myCurrDir = CurDir
ChDrive "U"
MyFileList = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Fichier texte des données de GPMS? :", , True)
If Not IsArray(MyFileList) Then
' l'utilisateur a choisi le bouton cancel de la boite de dialogue
'car GetOpenFilename renvoie False si on choisi Cancel
End
End If


J'ai essayé de le remplacer simplement par:

MyFileList = Workbooks.OpenText Filename:="\\blabla\Et\Oral\Wile\Wile.txt"

Cela marche si j'enlève MyFileList mais ça bloque plus tard. Avec MyFileList, on me renvoie une erreur "Expected: End of statement"

Quelqu'un peut me dire si je peux faire ça simplement sans pourrir tout le code? :)

Merci d'avance.
A voir également:

5 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
23 mars 2009 à 15:35
Bonjour,

Dans la syntaxe :
MyFileList = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Fichier texte des données de GPMS? :", , True) Le "True" signifiant que le résultat peut être une liste des noms de fichiers sélectionnés, la suite du traitement doit donc supposer qu'il s'agit d'un tableau de nom.

Si , a la place, tu forces l'ouverture d'un fichier avec la syntaxe :
Workbooks.OpenText Filename:="\\blabla\Et\Oral\Wile\Wile.txt"
alors il faut pour que la suite fonctionne (à mon avis mais je peux me tromper) faire deux choses :

1/ déclarer MyFilelist comme tableau avec l'instruction suivante :
Dim MyFileList(1) As String
2/ Initialiser MyFilelist quelque part (avant qu'il ne soit utilisé) :
MyFileList(1)="\\blabla\Et\Oral\Wile\Wile.txt"

Mais une remarque importante : Getopenfilename n'ouvre pas les fichiers mais donne la liste des fichiers choisis alors que OpenText ouvre réellement le fichier. Par conséquent le code que tu nous as montré n'est pas complet car dans le code initial après le choix il y a sans doute l'ouverture réelle du ou des fichiers. Ce qui dans ton code modifié risque de poser problème....

Outre les pistes que je t'ai données, je crois donc qu'il nous manque des précisions

A+
0
Merci pour ta réponse.

Quand tu me dis d'initialiser MyFileList quelque part, cela peut être fait n'importe où? Juste avec la ligne que tu as écrit?

Sinon je copie la suite du code, parce qu'efffectivement, ça coince plus loin :)

Merci encore!

'Recherche du fichier log contenant les données de FMC
myCurrDir = CurDir
ChDrive "U"
MyFileList = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Fichier texte des données de GPMS? :", , True)
If Not IsArray(MyFileList) Then
' l'utilisateur a choisi le bouton cancel de la boite de dialogue
'car GetOpenFilename renvoie False si on choisi Cancel
End
End If

'Demande du nom détaillée du fichier de sortie
'nom qui apparaitra derriere allnormaux et allcusip
myDetailName = InputBox("Date du dernier fichier pour Atlas : ?", , Format(Now, "yy mmm dd -hh mn"))
If myDetailName = "" Then
End
End If

'Changement des options d'affichage
Application.ScreenUpdating = False
Application.DisplayAlerts = False

'Ouverture du fichier log contenant les données de GPMS
'delimiter : le point virgule
myIntCompteur = 0
For Each MyFile In MyFileList
ChDrive "U"
Application.StatusBar = "Formatting Gpms File "
Workbooks.OpenText Filename:=MyFile, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False _
, Space:=False, Other:=True, OtherChar:=";", FieldInfo:=Array(Array(1, 5 _
), Array(2, 5), Array(3, 1), Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1))
Set myCurrWrkBook = ActiveWorkbook
'ordonnerColonnes
'Effacer les données inutiles
'Range(Cells(1, ActiveCell.Column + 1), Cells(1, 256)).EntireColumn.Select
'Selection.Delete
'Nommer la plage de données
Range("A1").Select
ActiveSheet.UsedRange.Select
ActiveWorkbook.Names.Add Name:="myDatas", RefersTo:="=" & ActiveSheet.Name & "!" & Selection.Address

'Sauvegarde au format Excel en cours de route (au cas ou)
ChDrive "F"
ChDir myChemin1 & "\" & mySousChemin4
ActiveWorkbook.SaveAs myChemin1 & "\" & mySousChemin4 & "\" & "Wilshire.xls", xlNormal
'On veut sauver un fichier par date différente, le tri est fait via l'utilisation de filtres
Range("A1").Select
Selection.End(xlToRight).Offset(0, 2).Select
Set myRange = ActiveCell

Windows("Wilshire.xls").Activate
'Tri par Date2 asc,Portfolio_Code asc, Asset_Code asc
Range("1:1,IV1").Select
Range("IV1").Activate
Selection.Find(What:="Date2", After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
ActiveCell.Select
colDate2 = ActiveCell.Column
Range("1:1,IV1").Select
Range("IV1").Activate
Selection.Find(What:="Portfolio_Code", After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
ActiveCell.Select
colPortfolio_code = ActiveCell.Column
Range("1:1,IV1").Select
Range("IV1").Activate
Selection.Find(What:="Asset_Code", After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
ActiveCell.Select
colAsset_Code = ActiveCell.Column
Range("B1").Select
Selection.Sort Key1:=Range(Cells(2, colDate2).Address), Order1:=xlAscending, Key2:=Range(Cells(2, colPortfolio_code).Address) _
, Order2:=xlAscending, Key3:=Range(Cells(2, colAsset_Code).Address), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Cells.Select
Cells.EntireColumn.AutoFit
'Pour chaque date2 différente filtres les données sur cette date et les transférer dans un fichier au format csv
Cells(2, colDate2).Select
While ActiveCell <> ""
If myDate <> ActiveCell Then
'Définition de la date
myDate = ActiveCell
Application.StatusBar = "Generating Gpms File for date : " & myDate
'Filtrage
If Not ActiveSheet.AutoFilterMode Then Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:=CDate(myDate)
'Transfert dans un nouveau fichier
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
'Definir l'ordre des colonnes
ordonnerColonnes 'les colonnes inutiles sont supprimées dans cette macro
'Suppression des données inutiles (nom des colonnes)
Rows("1:1").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
intRow = intRow + ActiveSheet.UsedRange.Rows.Count
'Insertionde 2 colonnes (vides) pour conserver compatibilité avec fmc (anciennes colonnes)
Columns("D:E").Select
Selection.Insert Shift:=xlToRight
Range("A1").Select
'sauvegarde au format texte, la date des données est passée via le nom de ce fichier à créer
ActiveWorkbook.SaveAs Filename:=myChemin1 & "\" & mySousChemin4 & "\GPMSDATA" & Format(myDate, "yymmdd") & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
On Error Resume Next
myFileCount = UBound(MyFileSave)
Err.Clear
On Error GoTo 0
ReDim Preserve MyFileSave(myFileCount + 1)
MyFileSave(myFileCount + 1) = myChemin1 & "\" & mySousChemin4 & "\GPMSDATA" & Format(myDate, "yymmdd") & ".csv"
ActiveWorkbook.Close False
End If
'Cellule suivante (ligne introw = juste après les données que l'on a deja traitées)
Windows("Wilshire.xls").Activate
If ActiveSheet.AutoFilterMode Then Selection.AutoFilter 'enlever le filtre
Cells(intRow + 2, 1).Select '2 en plus car 1 ligne en têtes et on veut aller aussi sur la ligne juste après les données traitées

Wend

ActiveWorkbook.Close False
myIntCompteur = myIntCompteur + 1
Next MyFile


'Retour au chemin par défaut présent avant le lancement de cette macro
On Error Resume Next
ChDrive myCurrDir
ChDir myCurrDir
On Error GoTo 0

'Rétablissement des options d'affichage
With Application
.StatusBar = ""
.ScreenUpdating = True
.DisplayAlerts = True
End With

End Sub
0
C'est bon j'ai réussi :)
Effectivement il ouvrait le fichier à un autre moment, j'ai donc tout virer les machins qui servaient à rien.

Merci!
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
23 mars 2009 à 17:40
OK, j'ai répondu un peu tard sans avoir vu ton dernier post.

Bonne continuation..

A+
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
23 mars 2009 à 17:38
Rebonjour,

A la lecture de ton code, je pense que le plus simple est de faire la chose suivante :

Mettre en commentaire (en mettant un ' devant) les lignes suivantes :
'MyFileList = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "....
'If Not IsArray(MyFileList) Then

' l'utilisateur a choisi le bouton cancel de la boite de dialogue
'car GetOpenFilename renvoie False si on choisi Cancel
'End
'End If


Mettre également en commentaire la boucle For :
'For Each MyFile In MyFileList
et ajouter juste aprés :
MyFile = "\\blabla\Et\Oral\Wile\Wile.txt"
et beaucoup plus loin en commentaire:
'Next MyFile

Voila , a tester car je ne peux pas le faire n'ayant pas tout le contexte nécéssaire

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

Oui c'est exactement ce que j'ai fait! Enfin presque... j'ai tout supprimé :)

Merci encore pour la peine que tu t'es donné en tout cas!
0