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 09/09/2011, 11h36   #1
Invité de passage
 
Homme william
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme william
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut Probleme importation données txt

[/B]Bonjour a tous

Je cherche a importer une ligne d'une ficher txt et de pouvoir revenir a la ligne après x caractères.
Exemple de txt
dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.253/0.250/0.500/J07_1.332/1.200/1.400/09/09/11/06:31:51dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.250/0.250/0.500/J07_1.337/1.200/1.400/09/09/11/06:32:02dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.246/0.250/0.500/J07_1.341/1.200/1.400/09/09/11/06:32:12dC09_2.780/2.780/2.900/K01_20.020/19.950/20.150/J04_0.249/0.250/0.500/J07_1.338/1.200/1.400/09/09/11/06:32:22dC09_2.780/2.780/2.900/K01_20.020/19.950/20.150/J04_0.248/0.250/0.500/J07_1.338/1.200/1.400/09/09/11/06:32:31dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.248/0.250/0.500/J07_1.338/1.200/1.400/09/09/11/06:32:42

et j'aimerais obtenir un feuille excel du genre



J'ai réussi a trouver la solution pour importer les données mais pas pour aller a la ligne suivant soit un nombre de caractère défini ou un caractère défini.

J’espère vraiment que vous pourrez m'aider .
vvillss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 13h47   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 895
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 895
Points : 7 179
Points : 7 179
Bonjour,

La structure de la ligne est relativement complexe à découper.
une solution consiste à passer par 3 découpage successifs

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
Sub decoupage()
 
Dim Str1() As String
Dim Str2() As String
Dim Str3() As String
 
Dim txt As String
Dim i As Integer
Dim i2 As Integer
Dim i3 As Integer
Dim iCol As Integer
 
txt = "dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.253/0.250/0.500/J07_1.332/1.200/1.400/09/09/11/06:31:51dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.250/0.250/0.500/J07_1.337/1.200/1.400/09/09/11/06:32:02dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.246/0.250/0.500/J07_1.341/1.200/1.400/09/09/11/06:32:12dC09_2.780/2.780/2.900/K01_20.020/19.950/20.150/J04_0.249/0.250/0.500/J07_1.338/1.200/1.400/09/09/11/06:32:22dC09_2.780/2.780/2.900/K01_20.020/19.950/20.150/J04_0.248/0.250/0.500/J07_1.338/1.200/1.400/09/09/11/06:32:31dC09_2.780/2.780/2.900/K01_20.019/19.950/20.150/J04_0.248/0.250/0.500/J07_1.338/1.200/1.400/09/09/11/06:32:42"
 
Str1 = Split(txt, "d")
 
'coupe les lignes "p"
For i = 0 To UBound(Str1)
    'Coupe les blocs "_"
    Str2 = Split(Str1(i), "_")
    iCol = 1
    For i2 = 0 To UBound(Str2)
        'coupe les montants "/"
        Str3 = Split(Str2(i2), "/")
        For i3 = 0 To UBound(Str3)
            Cells(i + 1, iCol).Value = Str3(i3)
            iCol = iCol + 1
        Next i3
 
    Next i2
 
Next i
 
End Sub
Seul bémol, la date qui se retrouve éclatée sur 3 colonnes
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/09/2011, 14h03   #3
Invité de passage
 
Homme william
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme william
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut J'ai trouver un debut de reponse que voici

Merci tout d'abord Jérôme de te pencher sur mon problème.
Ton code fonctionne bien mais il pourrais s'adapter un n'importe quelle fichier txt?
ou faut-il rentrer manuellement le contenu txt dans la macro ?

J'ai trouver se bout de 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(47)
 
    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
Je me demande si il est possible d'ajouter un deuxième séparateur actuellement le Chr47 correspond a "\" il faudrait rajouter le symbole "_" il ne resterais plus que le problème de date et le plus important le changement de ligne après "l'heure"

Merci pour ton aide
vvillss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 15h45   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 895
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 895
Points : 7 179
Points : 7 179
Citation:
Ton code fonctionne bien mais il pourrais s'adapter un n'importe quelle fichier txt?
oui, suffit d'ajouter une boucle de lecture du fichier txt

Voici un code avec choix du fichier a importer
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
Sub decoupage()
 
Dim Str1() As String
Dim Str2() As String
Dim Str3() As String
 
Dim i1 As Integer
Dim i2 As Integer
Dim i3 As Integer
Dim iCol As Integer
Dim iLigne As Integer
 
Dim file As FileDialog
Dim strFichier As String
Dim strLigne As String
 
'Fenetre de choix du fichier a integrer
Set file = Application.FileDialog(msoFileDialogFilePicker)
 
'Creation des filtres
file.Filters.Clear
file.Filters.Add "Fichier Excel", "*.txt"
 
'Si pas de sélection sortir de la procedure
If file.Show = False Then
    Exit Sub
End If
 
'ouverture du fichier
Open file.SelectedItems(1) For Input As #1
 
iLigne = 1
Do While Not EOF(1)
    Line Input #1, strLigne
 
    Str1 = Split(strLigne, "d")
 
    'coupe les lignes "p"
    For i1 = 0 To UBound(Str1)
        'Coupe les blocs "_"
        Str2 = Split(Str1(i1), "_")
        iCol = 1
        For i2 = 0 To UBound(Str2)
            'coupe les montants "/"
            Str3 = Split(Str2(i2), "/")
            For i3 = 0 To UBound(Str3)
                Cells(iLigne + 1, iCol).Value = Str3(i3)
                iCol = iCol + 1
 
            Next i3
 
        Next i2
        iLigne = iLigne + 1
    Next i1
 
Loop
 
Close #1
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/09/2011, 20h31   #5
Invité de passage
 
Homme william
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme william
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut Merci pour ton aide

Un grand merci pour le coup de main .
vvillss 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 20h17.


 
 
 
 
Partenaires

Hébergement Web