[Catégorie modifiée VB6 --> VBA] macro pour importation de donnée dans excel 200
cs_wug
Messages postés2Date d'inscriptionmercredi 11 août 2010StatutMembreDernière intervention14 août 2010
-
11 août 2010 à 14:04
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 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
A voir également:
[Catégorie modifiée VB6 --> VBA] macro pour importation de donnée dans excel 200
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_wug
Messages postés2Date d'inscriptionmercredi 11 août 2010StatutMembreDernière intervention14 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
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