IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Conversion dynamique de fichiers txt d'un dossier en xls.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Par défaut Conversion dynamique de fichiers txt d'un dossier en xls.
    Bonjour.

    Dans le cadre d'un projet j'ai besoin de convertir de nombreux fichiers txt en fichier xls.

    Etant donné le nombre ... la procèdure suivante est très lourde à effectuer manuellement :

    Pour chaque fichier txt du dossier (lequel devrait être défini "dynamiquement" par l'utilisateur de la macro), les actions sont

    Ouvrir ( ou convertir ) le fichier txt ( Séparateur tabulation ).
    Enregistrer le fichier xls converti dans le même dossier.

    Le script pour ce genre d'actions sequentielles dans un dossier n'est peut être certes pas bien long ... mais comme je ne connais rien à la syntaxe et au langage ... et que je n'en ai besoin que pour un usage très ponctuel et limité ... il me serait fort utile que quelqu'un d'expérimenté en la matière puisse me donner le code à utiliser.

    Merci d'avance à tout ceux qui prendront un peu de temps et m'éviteront d'en perdre en traitement manuel en accèdant à ma requète.

    Damien.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Connais-tu l'enregistreur de macro d'Excel ? -> Menu Outils -> Macros -> Nouvelles macro -> Ok ! Là tu enregistres en faisant ta manip' -> Tu as ta macro (mal foutue mais pour le principe ça reste bon)
    Pour lister les fichiers d'un répertoire, tu as trente-six exemples sur le forum (-> Recherche sur le forum) ou dans Contribuez, les tutos, la FAQ (urls ds ma signature)
    Tu essaies quelque chose et tu nous reviens si tu as toujours un pb ou pour simplifier le code obtenu
    A+
    Bonne journée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Par défaut
    Oki donc j'en suis arrivé à ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Option Explicit
     
    Private Const BIF_RETURNONLYFSDIRS = 1
    Private Const BIF_DONTGOBELOWDOMAIN = 2
     
    Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
    ByVal lpBuffer As String) As Long
    Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
    ByVal lpString2 As String) As Long
     
    Private Type BrowseInfo
        hWndOwner As Long
        pIDLRoot As Long
        pszDisplayName As Long
        lpszTitle As Long
         ulFlags As Long
        lpfnCallback As Long
        lParam As Long
        iImage As Long
    End Type
     
    Sub Convertion_txt_xls()
     
    MsgBox SelectFolder("Sélectionnez un répertoire :", Me.Hwnd)
    Convert SelectFolder
     
    End Sub
     
    Public Function SelectFolder(Titre As String, Handle As Long) As String
     
        Dim lpIDList As Long
        Dim strBuffer As String
        Dim strTitre As String
        Dim tBrowseInfo As BrowseInfo
     
        strTitre = Titre
     
        With tBrowseInfo
            .hWndOwner = Handle
            .lpszTitle = lstrcat(strTitre, "")
            .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
        End With
     
        lpIDList = SHBrowseForFolder(tBrowseInfo)
     
        If (lpIDList) Then
            strBuffer = String(260, vbNullChar)
            SHGetPathFromIDList lpIDList, strBuffer
            SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
        End If
     
    End Function
     
    Sub Convert(Repertoire As String)
     
        Dim Fso As Scripting.FileSystemObject
        Dim SourceFolder As Scripting.Folder
        Dim FileItem As Scripting.File
    '
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set SourceFolder = Fso.GetFolder(Repertoire)
    '
        For Each FileItem In SourceFolder.Files
    '
            ChDir _
            SourceFolder
            Workbooks.OpenText Filename:= _
            FileItem.ParentFolder & "\" & FileItem.Name _
            , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
            False, Comma:=False, Space:=False, 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)), _
            TrailingMinusNumbers:=True
            ActiveWorkbook.SaveAs Filename:= _
            FileItem.Name _
            , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
            ActiveWindow.Close
    '
        Next FileItem
     
    End Sub
    Mais le debogeur me met un message d'erreur me disant que j'utilise mal le mot clé Me ( dans le sub Conversion_txt_xls ).
    J'ai fait ce code en recollant divers scripts issus de la FAQ (Comment ouvrir une fenêtre de sélection de répertoire ? + partiellement Comment lister les fichiers contenus dans un répertoire ainsi que dans tous ses sous-répertoires ? ) ... fonctionnellement cela me parait bon ... mais apparemment syntaxiquement pas ... y aurait il quelqu'un pour m'eclairer sur cet obscur message d'erreur ??

    Merci d'avance.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Attention: ça sent le code issu de VB.

    Alors, petite précision: Visual Basic et Visual Basic pour Applications ne marchent pas tout à fait pareil.
    Le code que tu as récupéré, c'est du code VB. Nous on travaille avec du code VBA pour Excel, et il se trouve que dans ton cas Me est censé représenter une fenêtre d'application Visual Basic (il me semble, car je n'ai jamais fait de VB), ce qui n'existe pas en VBA.

    Remplace donc le "Me.Hwnd" par ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FindWindow(vbNullString, Application.Caption)
    Ce qui te donne cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox SelectFolder("Sélectionnez un répertoire :", FindWindow(vbNullString, Application.Caption))
    Rajoute aussi ceci en haut de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Au passage un grand merci à ucfoutu de m'avoir fourni des infos pour un de mes problèmes. Bon bien sûr j'ai adapté à ton cas, car tu ne pouvais pas deviner par quoi il fallait remplacer le Me.Hwnd.

    Tu me dis s'il y a d'autres erreurs: le reste est un peu gros pour que je prenne le temps de tout décortiquer.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Par défaut
    Yes merci decondelite ... a plus message d'erreur ^^ !!

    Par contre maintenant j'ai un autre petit souci ... j'avais pensé que la variable
    SelectFolder qui est définie dans la "public fonction" du même nom était la variable de sortie me donnant mon chemin complet du répertoire selectionné dans la fenêtre.

    Je l'ai donc mise naturellement en tant que variable d'entrée de mon programme de conversion des txt en xls baptisé sub convert.

    Pourtant cela ne marche pas ... d'où la questions ... qu'elle est le nom de la variable de sortie de la "public fonction" selectfolder ... que je puisse mettre correctement mon chemin choisi dans ma moulinette qui converti ?!?

    Sinon à part çà je pense que je devrais presque y être ^^ !!

    Merci d'avance à nouveau.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    SelectFolder n'est pas une variable: c'est une fonction que tu as déclaré et codé (enfin façon de dire).

    Tu y fais appel dans ton msgbox, elle exécute du code et te renvoie le résultat que la msgbox t'affiche, mais après la ligne le résultat est perdu.

    Tu dois donc faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Convertion_txt_xls()
        Convert SelectFolder("Sélectionnez un répertoire :", Me.Hwnd) 
    End Sub
    Je sais pas si ça marchera jusqu'au bout: c'est ton programme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/03/2014, 23h39
  2. [XL-2010] Macro importer des fichiers txt d'un dossier dans des fichiers excel
    Par ccadic dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/04/2013, 11h21
  3. Réponses: 3
    Dernier message: 09/11/2010, 10h48
  4. [AC-2003] conversion table vers fichier txt
    Par novice06 dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/05/2010, 10h16
  5. Importer fichiers txt d'un dossier dans une table
    Par avantoux dans le forum Access
    Réponses: 16
    Dernier message: 28/12/2005, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo