Vba excel: ouvrir un fichier

Résolu
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. Contributeur
    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
    1. 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
      1. 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. Contributeur
          OK, j'ai répondu un peu tard sans avoir vu ton dernier post.

          Bonne continuation..

          A+
          0
      2. Contributeur
        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
        1. 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