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 05/12/2011, 11h19   #1
Candidat au titre de Membre du Club
 
Homme Yannick Bouvet
Technicien R&D électronique
Inscription : novembre 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Yannick Bouvet
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Technicien R&D électronique
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 33
Points : 11
Points : 11
Par défaut Problème de format lors de l'enregistrement d'un fichier texte

Bonjour à tous,

Mon projet consiste à récupérer les données enregistré sur un fichier texte sous excel pour pouvoir les mettre sous graphes.
La donnée qui me pose problème est la date.
Je m'explique :

Si sur le fichier texte tout les jours sont inférieur ou égal à 12
-dans la feuille 'Import de données radar', le jour et le mois sont inversé
-les graphes ne prennent pas en compte l'heure

Si sur au moins une ligne du fichier texte le jour est supérieur à 12
-il y a toujours inversion pour les autres données
-les graphes prennent en compte les heures

Si sur toutes les lignes du fichier texte le jour est supérieur à 12
-tout fonctionne correctement

Je viens de voir ce problème car je viens d'avoir des données avec le jour inférieur à 12.

Je pense qu'il y a un problème de format lors de l'extraction des données sous excel.
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
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
84
85
86
87
88
89
Sub Transfer_Enregistrements_vers_Excel()
 
'**Procedure écrite le 15 Novembre 2011 pour le compte de ATELEC ELECTRONIQUE
 
Dim TheTemporaryArray 'défini un tableau unidmensionel pour la capture des lignes du fichier texte
Dim TheFinalArray() As Variant 'défini un tableau bidmensionel pour l'enregistrement informatique du fichier texte
Dim FileName As Variant 'defini une variable qui contiendra le nom du fichier texte a ouvrir
Dim strRec As String 'defini une variable qui contiendra une ligne du fichier texte
Dim j As Long 'defini une variable qui sera utilisée dans un "compteur" de données
Dim i As Long 'defini une variable qui sera utilisée dans un "compteur" de données
Dim m As Long 'defini une variable qui sera utilisée dans un "compteur" de données
Dim k As Long 'defini une variable qui sera utilisée dans un "compteur" de données
Dim xx As Long 'Defini une variable qui contiendra la limite haute du tableau bidimensionel
Dim Legraph As ChartObject
Dim DerLig As Long
Dim PlageVmoy As Range
Dim PlageVmin As Range
Dim PlageVmax As Range
Dim PlageNbVehicule As Range
Dim PlageVminVmax As Range
Dim VarVmoy As Variant
Dim VarVmin As Variant
Dim VarVmax As Variant
Dim VarNbVehicule As Variant
Dim VarVminVmax As Variant
Dim NomRue As String
 
 
FileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Select Text Data File") 'Ouvre une fentre de selection de fichier qui permet a l'utilisateur de selectionner le fichier a importer. exclusivement des fichiers texte
 
If FileName = False Then 'Si l'utilisateur n'a pas sélectionner de fichier
 
    Exit Sub 'alors fin de la procedure
 
ElseIf FileName <> False Then 'Si l'utilisateur à sélectionner un fichier
 
    Open FileName For Input As #1 'Ouvre le fichier texte
    Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
    TheTemporaryArray = Split(strRec, Chr(59)) 'Enregistre chaque element de la ligne séparé par un ";" dans un tableau unidimensionel appellé TheTemporaryArray
    ReDim TheFinalArray(UBound(TheTemporaryArray), LBound(TheTemporaryArray)) 'Précise la dimension du tableau.
    xx = UBound(TheFinalArray) 'enregistre dans une variable la limite haute du tableau - normalement le nombre de "colonnes" du fichier texte  moins 1 car le tableau commence a zero et non pas 1
    Close #1 'ferme le fichier texte. Cela est necessaire pour une future redimension du tableau TheFinalArray
 
    i = 1 'donne la valeur 1 a une variable qui servira dans la definition d'un tableau bidimensionel
 
    Open FileName For Input As #1 'Réouvre le fichier texte
 
    '****** l'étape suivante va etre repetée pour chaque ligne du fichier grace à la commande "Do While...Loop"  *****
 
    Do While Not EOF(1) 'Faire quelque chose jusqu'à temps que l'on arrive à la fin du fichier texte
    Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
    TheTemporaryArray = Split(strRec, ";") 'Enregistre chaque element de la ligne séparé par un ";" dans un tableau unidimensionel appellé TheTemporaryArray
 
    For j = LBound(TheTemporaryArray) To UBound(TheTemporaryArray) 'Pour chaque élément du tableau unidimensionel
 
        TheFinalArray(j, i - 1) = TheTemporaryArray(j) 'l'élément du tableau unidimensionel est entré dans un tableau bidimensionel
 
    Next j 'tourne jusqu'à temps qu'il n'y ai plus d'elements dans le tableau unidimensionel
 
    ReDim Preserve TheFinalArray(xx, i) 'Redimensionne le tableau bidimensionel en y ajoutant une "ligne"
    i = i + 1 'augmemte la variable comptable qui aide a la redimension du tableau bidimensionel
 
    Loop 'repete les etapes precedente pour chaque "ligne" du ficher texte
 
    Close #1 'Ferme le fichier texte
 
    '**** L'etape suivante transfer les données dans EXCEL ****
    'Jusqu'ici toutes les données ont été transferées dans un tableau multidimensionel et non pas diretement dans Excel
    'Cela permet au developeur ATELEC de transferer les données ailleur que dans Excel si besoin est.
 
    Sheets("Import de données radar").Activate 'sélectionne l'onglet où les données seront transcrites
    Cells.Select 'selectionne toutes les cellule de l'onglet
    Selection.ClearContents 'efface le contenu des cellules seletionnées
    Cells(1, 1).Select 'retire la selection de toutes les cellules
 
    For k = 0 To xx 'Pour chaque "colonne" du tableau bidimensionel faire....
 
        For m = 0 To (i - 1) 'Pour chaque "ligne" du tableau bidimentionel faire...
 
            Cells(m + 1, k + 1) = TheFinalArray(k, m) 'un transfer de l'element du tableau bidimensionel vers Excel
 
        Next m 'repeter pour chaque "ligne" du tableau bidimensionel
 
    Next k 'repeter pour chaque "colonne" du tableau bidimensionel
 
    Sheets("Menu").Activate 'reselectionne l'onglet avec le bouton
 
 
End If 'ferme la condition d'execution de la procedure liée à la trouvaille du nom de fichier
Je ne vois pas comment rectifier cette erreur.

Je met le classeur et le fichier texte en pièce jointe.
Cliquez sur le bouton Import des données radar puis sélectionnez le fichier texte. Modifiez le fichiez texte pour voir directement le problème

Merci d'avance
Exploitation des données radar_05-12-2011_11-00.xls
MESURE.TXT
Daetheia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 14h47   #2
Candidat au titre de Membre du Club
 
Homme Yannick Bouvet
Technicien R&D électronique
Inscription : novembre 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Yannick Bouvet
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Technicien R&D électronique
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 33
Points : 11
Points : 11
J'ai rajouté un code proposé par illight
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
On Error GoTo gestionerreur
Dim j As String
Dim m As String
Dim a As String
Dim heure As String
Dim min As String
Dim sec As String
Dim i As Integer
Dim k As Integer
Dim MaDate As Date
Dim MonHeure As Date
Dim MonHeureT As String
Set f = Worksheets(1)
k = 2
While Cells(k, 1).Value <> ""
    k = k + 1
Wend
For i = 2 To k - 1
    If Cells(i, 1).Value = "" Then
        Cells(i, 1).Value = ""
    ElseIf Cells(i, 1).NumberFormat = "General" Then
        j = Left(Cells(i, 1).Value, 2)
        m = Mid(Cells(i, 1).Value, 4, 2)
        a = Mid(Cells(i, 1).Value, 7, 4)
        MaDate = DateSerial(a, m, j)
        MonHeureT = Right(Cells(i, 1).Value, 8)
        heure = Left(MonHeureT, 2)
        min = Mid(MonHeureT, 4, 2)
        sec = Right(MonHeureT, 2)
        MonHeure = TimeSerial(heure, min, sec)
        Cells(i, 1).Value = CDate(MaDate & " " & MonHeure)
    Else
        m = Left(Cells(i, 1).Value, 2)
        j = Mid(Cells(i, 1).Value, 4, 2)
        a = Mid(Cells(i, 1).Value, 7, 4)
        MaDate = DateSerial(a, m, j)
        MonHeureT = Right(Cells(i, 1).Value, 8)
        heure = Left(MonHeureT, 2)
        min = Mid(MonHeureT, 4, 2)
        sec = Right(MonHeureT, 2)
        MonHeure = TimeSerial(heure, min, sec)
        Cells(i, 1).Value = CDate(MaDate & " " & MonHeure)
    End If
    Cells(i, 1).NumberFormat = "dd/mm/yyyy hh:mm"
Next i
Exit Sub
gestionerreur:
If Err.Number = 13 Then
    Resume Next
End If
Cela règle bien le problème d'inversion cependant dans mon tableau de donnée, j'ai une différence entre les jours inférieur et supérieur à 12
Pour les inférieur à 12 j'ai : dd/mm/yyyy hh:mm:ss
Pour les supérieur à 12 j'ai : dd/mm/yy hh:mm

Je ne comprend pas pourquoi je n'ai pas le même format

Merci d'avance
Daetheia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 08h37   #3
Candidat au titre de Membre du Club
 
Homme Yannick Bouvet
Technicien R&D électronique
Inscription : novembre 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Yannick Bouvet
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Technicien R&D électronique
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 33
Points : 11
Points : 11
Bonjour

Je ne comprend toujours pas...
J'ai changé les données date/heure du fichier texte que j'importe, lorsque je met au format français excel enregistre au format anglais pour les jour inférieur à 12, lorsque que je met au format anglais excel enregistre au format français.

Je crois qu'excel se moque de moi...

Le souci est que dans le cas où excel enregistre au format français, les graphiques ne prennent plus en compte les heures, ce qui fausse tout.
J'ai aussi essayé de noter les abréviations des mois, dec pour 11, pour pas qu'il n'y est d’ambiguïté pour excel, et j'obtiens le même problème pour mes graphiques avec en plus une inversion des jours et mois dans les graphiques.

Cependant si j'ai sur mon fichier texte les dates notées avec les abréviations des mois, sauf une avec le nombre, je n'ai plus d'inversion jour/mois, les graphiques sont bons, sauf que dans mon tableau le format n'est pas le même. Mais cette solution n'est pas envisageable au niveau de l'enregistrement de mon fichier texte.

Si quelqu'un peut m'aider à me sortir de ce souci de format.
Merci d'avance
Daetheia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 12h10   #4
Candidat au titre de Membre du Club
 
Homme Yannick Bouvet
Technicien R&D électronique
Inscription : novembre 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Yannick Bouvet
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Technicien R&D électronique
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 33
Points : 11
Points : 11
N'aillant pas trouvé de solution sous excel, j'ai rajouté un espace devant la date sur mon fichier texte, ce qui fait que excel ne reconnait plus cette donnée comme une date et ne change pas n'importe comment le format.

Je laisse le post non résolu si toute fois quelqu'un trouve une solution sous vba, car pour mon cas j'ai pu "bidouiller" en modifiant mon fichier d'entrée mais cela n'est pas toujours possible.
Daetheia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h24.


 
 
 
 
Partenaires

Hébergement Web