[Catégorie modifiée VB6 --> VBA] macro pour importation de donnée dans excel 200

cs_wug Messages postés 2 Date d'inscription mercredi 11 août 2010 Statut Membre Dernière intervention 14 août 2010 - 11 août 2010 à 14:04
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 14 août 2010 à 20:54
Bonjour,
j'aimerais vous poser un problème que j'ai sur excel.
j'ai une liste de donnée sous cette forme dans un fichier texte(la date et la valeur à côté): 2010-01-01 16:30 8507.55181666667
cette liste s'étend sur trente ans et ce sont des valeurs horaires.
J'aimerais l'importer dans excel de cette manière: sur une feuille:
dans la colonne A la première année et dans la B les valeurs correspondantes
dans la C la deuxième années et dans la D les valeurs correspondantes.
et ainsi de suite pour toute les année de mon fichier texte.
remarque: l'année ne commence pas forcément le premier janvier à 00:30 mais peux commencer le premier avril à 00:30 ou bien le 31 mars à 23:30.
de même l'année ne finis pas forcément le 31 décembre à 23:30.

Et j'ai un autre problème dans ces valeurs il est possible qu'il ait des trous. c'est à dire: par exemple j'ai 2010-01-01 16:30 8507.55181666667 puis j'ai 2010-01-02 13:30 8507.55181666667
Je me demandais si il n'existerais pas un moyen de trouver ces trous et de rajouter entre les deux dates les dates horaires manquantes et pas de valeurs à coté.
Comme j'ai des milliers d'années à faire je cherche une macro pour executer la tache le plus vite possible.
Meci

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 août 2010 à 08:40
Salut
Décompose ce que tu as à faire et résout chaque problème l'un après l'autre :
- Ouvrir et lire un fichier texte : Open, Do-While, Line Input, DoEvents, Close
- Découper une chaine : Mid, Left, Right, Split, Instr
- Récupérer l'année d'une date : Year
- plus toute la gestion de gestion des cellules

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
13 août 2010 à 01:13
Bonjour

"Comme j'ai des milliers d'années à faire..."

Vu qu'Excel 2003 est limité à 256 colonnes,
et que tu as besoin de 2 colonnes par année, tu ne pourra importer que 128 ans.

Cordialement
0
cs_wug Messages postés 2 Date d'inscription mercredi 11 août 2010 Statut Membre Dernière intervention 14 août 2010
14 août 2010 à 15:28
Salut,

excusez moi de ne m'être pas bien exprimer, mais j'ai des milliers d'années à faire, cela ne veut pas dire que je vais les faire toutes d'un coup , mais par période de 30 ans et ensuite je répète ce processus des centaine de fois.
Merci pour la réponse de jack mais en fait je ne connais rien en langage vba je n'ai pas pratiqué ce langage, je connais juste le c++.
Merci quand même
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
14 août 2010 à 20:54
Bonjour

J'ai testé le code ci-dessous dans un fichier test.txt contenant les données suivantes :

2010-01-01 16:30 8507.55181666667
2010-01-01 16:40 8507.55181666667
2011-01-01 16:30 8507.55181666667

Attention :
1. il faut sauvegarder le classeur Excel avant d'exécuter le code.

2. le classeur et le fichier test.txt doivent être dans le même répertoire.

3. l'espace entre la date et la valeur est une information sensible. Il est obligatoire, et il ne doit pas y avoir d'espace ailleurs qu'à cet endroit (11e position de la ligne).

Voici le code :

Option Explicit

Sub ImportDonnees()

Const IDX_DATE = 0
Const IDX_VALEUR = 1
Dim chemin As String
Dim nf As Integer
Dim ligne As String
Dim varDate As String
Dim varValeur As String
Dim variables As Variant
Dim numLigne As Integer
Dim numColonne As Integer
Dim ancAnnee As String

numColonne = -1
Cells.Clear
chemin = ActiveWorkbook.Path & "\test.txt"
If Dir(chemin) = "" Then MsgBox "fichier non trouvé": Exit Sub
Close
nf = FreeFile
Open chemin For Input As nf
Do Until EOF(nf)
Line Input #nf, ligne
variables = Split(ligne, " ")
If Left(variables(IDX_DATE), 4) <> ancAnnee Then
ancAnnee = Left(variables(IDX_DATE), 4)
numColonne = numColonne + 2
numLigne = 1
End If
Cells(numLigne, numColonne).Value = variables(IDX_DATE)
Cells(numLigne, numColonne + 1).Value = variables(IDX_VALEUR)
numLigne = numLigne + 1
Loop
Close nf

End Sub

Cordialement
0
Rejoignez-nous