Vba excel: ouvrir un fichier

Résolu
Johny -  
 Johny -
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.
Configuration: Windows 2003
Internet Explorer 7.0

5 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
  2. Johny
     
    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
  3. Johny
     
    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
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      OK, j'ai répondu un peu tard sans avoir vu ton dernier post.

      Bonne continuation..

      A+
      0
  4. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Johny
     
    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