Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2011, 09h48   #1
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 2
Points : 2
Par défaut Code VBA excel conversion d'un répértoire txt en plusieurs tableaux xls et leurs sauvegardes

Bonjour tt le monde, je suis nouveau. Je suis nul dans la programmation
J'ai besoin de votre aide pour un code vba pour excel-2010. Je veux un code pour automatiser l'import des fichiers txt localisés dans un même dossier sachant que le séparateur décimale dans les fichier txt est un point. J'aimerai que tous les fichiers txt dans ce dossier soit converti en plusieurs classeurs excel (1 classeur excel pour 1 fichier txt) et enregistrés dans le même dossier que les fichiers txt et chacun porte le nom de son fichiers txt correspondant ou si c'est plus simple un seul classeur excel avec plusieurs feuilles dont chacune correspond à un fichier txt et porte son nom.
J’essaye avec ce code pour convertir les fichiers txt vers xls, il fonctionne bien, la conversion est correcte mais , je dois lui spécifier pour chaque fichier texte le répertoire là où il doit aller le chercher, il me manque l'enregistrement automatique, et la conversion de tout un répertoire de fichier txt en xls! est ce possible de m'aider à améliorer ce code avec un maximum d'explication possible parce que je ne connais rien dans les codes VBA macro excel. D'avance Merci
Voici le code:

Code :
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
Option Explicit
 
Sub Tst()
Dim Fichier As Variant
    ChDir ThisWorkbook.Path
    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
        If Fichier <> False Then
        Lire Fichier
    End If
End Sub
 
Function Lire(ByVal NomFichier As String)
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur  As String * 1
 
    '  Séparateur Tabulation
    Separateur = Chr(9)
 
    Cells.Clear
    NumFichier = FreeFile
    iRow = 1
 
    Open NomFichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                Cells(iRow, iCol) = Ar(i)
                iCol = iCol + 1
            Next
            iRow = iRow + 1
        Loop
    Close #NumFichier
End Function
Eagle-I est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 10h33   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Bonjour,
J'ai vu récemment de nombreux messages qui traitent du même problème que le tien sur ce forum. As-tu essayé la fonction recherche pour les trouver ? (Avec "parcourir répertoire" ou "liste fichiers")
Sinon, il y a un tuto sur ce site sur la gestion des fichiers et des dossiers ou tu trouveras ton bonheur. Je te laisse chercher également, y'a pas de raison
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 11h58   #3
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 2
Points : 2
J'ai essayé mais j'ai pas trouvé mon bonheur, pour manipuler des fonction de programmation , je sais pas le faire, je suis biochimiste, mais vraiment nul en informatique, donc je fais appel à des profess comme vous . En tt cas merci d'avance pour vos aides
Eagle-I est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 17h57   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Voici un code que j'ai essayé de commenter au maximum pour que tu comprennes bien comment ça fonctionne. Ca marche chez moi.

Code :
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
Option Explicit
 
Public Sub Test()
    Dim fd As FileDialog
    Dim repertoire As String
 
    Set fd = Application.FileDialog(msoFileDialogFolderPicker) 'création d'une boite de dialogue choix de répertoire
    fd.AllowMultiSelect = False 'on ne peut choisir qu'un seul repertoire
 
    If fd.Show = -1 Then 'l'utilisateur à valider sa selection
        repertoire = fd.SelectedItems(1) 'le repertoire choisi
        TransformerTousLesFichiers repertoire
    End If
 
End Sub
 
'Boucle sur tous les fichiers d'un répertoire
Private Sub TransformerTousLesFichiers(ByVal repertoire As String)
    Dim fso As New FileSystemObject
    Dim fichier As File
 
    For Each fichier In fso.GetFolder(repertoire).Files 'pour chaque fichier du repertoire
        If Right(fichier.Name, 4) = ".txt" Then 'si c'est un fichier texte
            TransformerFichierTexteEnExcel fichier 'il effectue la transformation ci-dessous
        End If
    Next fichier
 
End Sub
 
'Ouvre un fichier texte, sépare chaque ligne par ses "tab" et le met dans un fichier excel qui porte le même nom
Private Sub TransformerFichierTexteEnExcel(ByRef fichier As File)
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim chemin As String
    Dim nomFichier As String
    Dim numFic As Integer
    Dim i, iCol, iRow As Long
    Dim ligneFichier As String
    Dim ligneFichierSplit() As String
    Dim separateur As String
 
    chemin = fichier.ParentFolder.Path 'le chemin du fichier texte
    nomFichier = fichier.Name 'le nom du fichier texte
    nomFichier = Left(nomFichier, Len(nomFichier) - 4) & ".xls" 'qu'on transforme en fichier excel
 
    Set wb = Application.Workbooks.Add 'on ouvre un nouveau classeur
    wb.SaveAs chemin & "\" & nomFichier 'qu'on sauve sous le bon nom
 
    Set ws = wb.Worksheets(1) 'la première feuille
 
    numFic = FreeFile
    separateur = Chr(9)
    Open fichier.Path For Input As #numFic 'ouverture du fichier texte
 
    iRow = 1
 
    Do While Not EOF(numFic) 'tant que le fichier n'est pas parcouru en entier
        iCol = 1
 
        Line Input #numFic, ligneFichier 'on récupère la ligne suivante
        ligneFichierSplit = Split(ligneFichier, separateur) 'on sépare la ligne dans un tableau
 
        For i = LBound(ligneFichierSplit) To UBound(ligneFichierSplit) 'on copie le tableau
            ws.Cells(iRow, iCol) = ligneFichierSplit(i)
            iCol = iCol + 1
        Next
 
        iRow = iRow + 1
    Loop
 
    Close #numFic 'fermeture du fichier texte
 
    wb.Save 'sauvegarde du fichier excel
    wb.Close 'fermeture du fichier excel
 
End Sub
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2011, 14h59   #5
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 2
Points : 2
Merci pour le code, mais en l'exécutant, la boite de dialogue supposé apparaitre pour faire le choix du répertoire n'a pas apparue !! mais il m'affiche un message dans la ligne :
Code :
Private Sub TransformerFichierTexteEnExcel(ByRef fichier As File)
Citation:
erreur de compilation : Type défini par l'utilisateur non défini
Ce que j'avais fait c étais copier coller dans le microsoft visual basique 'Excel 2010'. Dois-je changé spécifier quelque chose dans le code, si oui ou et quoi, Merci beaucoup pour votre aide.
Eagle-I est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2011, 17h28   #6
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 668
Points : 7 668
Bonjour,

Où as-tu trouvé un type de variable nommé File?
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2011, 17h34   #7
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 713
Points : 3 652
Points : 3 652
Salut, Eagle-I : tu as oublié d'aller voir dans http://www.developpez.net/forums/d11...ichiers-texte/ Post #4
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 11h22   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Pour mon code, il fallait cocher "Microsoft Scripting Runtime" dans les références VBA.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h51   #9
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 2
Points : 2
Salut tt le monde, Salut ZebreLoup, salut Kiki, voilà avec le code de ZebreLoup ça marché quand j'ai couché "Microsoft Scripting Runtime" dans les références VBA. ça marche super bien , Merci infiniment pour toi ZebreLoup et kiki29 et tt ceux qui se donnent la peine pour apporter de l'aide .
Eagle-I est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h08.


 
 
 
 
Partenaires

Hébergement Web