IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

éélaboration d'une macro pour importation de donnée dans excel 2003


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut éélaboration d'une macro pour importation de donnée dans excel 2003
    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

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 121
    Points
    121
    Par défaut
    Bonjour,

    Il existe déjà des message répondant à ce problème. Par exemple : récupérer des infos dans un .txt

  3. #3
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    sinon tu peux tjs essayer ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Sub test()
    Dim WB As Workbook, dSh As Worksheet, oSh As Worksheet
    Dim MaxY, MinY, CurY, R, X
     
    Workbooks.OpenText "H:\DATA\test.txt", xlMSDOS, , xlDelimited, , , True, , , , , , , , ".", ","
    Set WB = ActiveWorkbook
     
    Set oSh = WB.Sheets(1)
    oSh.Cells.EntireColumn.AutoFit
    Set dSh = WB.Sheets.Add(after:=WB.Sheets(1))
     
    MaxY = Year(Application.WorksheetFunction.Max(oSh.Range("A:A")))
    MinY = Year(Application.WorksheetFunction.Min(oSh.Range("A:A")))
    R = 1
     
    Do Until oSh.Cells(R, 1) = ""
        CurY = Year(oSh.Cells(R, 1))
        dSh.Cells(R + 1, 1).Offset(0, (CurY - MinY) * 2).End(xlUp).Offset(1, 0) = oSh.Cells(R, 1).Text
        dSh.Cells(R + 1, 2).Offset(0, (CurY - MinY) * 2).End(xlUp).Offset(1, 0) = oSh.Cells(R, 2)
        R = R + 1
    Loop
     
    End Sub
    Alleï Bonjour chez vous!

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut juste encore un petit souci
    c'est super ça marche, mais juste un petit souci il bloc à partir d'un certain moment parce que je pense que en fait mon fichier texte dépasse le nombre de cellule disponible, c'est à dire 65000

    merci pour tout

    sinon je pense que je vais faire une autre discussion pour résoudre mon autre petit problème

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut taille trop grande
    Je sais que l'on arrive à faire des importation avec des fichier plus long,
    voilà un code qui marche mais il importe faux au niveau des espaces. En fait il m e faudrait un mélange des deux codes celui ci et celui ecrit par mayekeul mais je mis connais pas du tous en vba

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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
    merci beaucoup

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour,

    ce code devrais mieux fonctionner

    a noter qu'il ne fonctionnera que si la liste de départ est ordonnée.

    sinon, on retrouvera plusieurs colonnes avec la m^me année

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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, vbTab)
        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
     
    'de rien beaucoup aussi!
     
    End Sub
    Alleï Bonjour chez vous!

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut re
    Merci beaucoup ça marche super

    bonne journée

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut rebonjour
    j'ai une petite question sur le même sujet,

    j'ai un autre fichier texte de cette manière:

    Fichier source: H:\Departements\Exploitation\Unite Conduite-interfaces\Hydrologie\Anhydre\H401_65.LCE
    2001.05.07-11:00:00 0 ........ ........
    2001.05.07-12:00:00 0.006 ........ ........
    2001.05.07-13:00:00 0.006 ........ ........
    2001.05.07-14:00:00 0.006 ........ ........
    2001.05.07-15:00:00 0.006 ........ ........

    j'aimerais qu'il m'importer de la même manière, mais pour que la date arrive au format date comme dans l'autre fichier et non en format texte et qu'il n'y ait pas tout qui soit importer mais seulement la date et les valeurs

    Merci beaucoup

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Comme personne ne m'a repondu et que c'est urgent je relance le sujet, je pense que c'est pas très compliqué mais moi je m'y connais pas.

    merci d'avance

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/04/2015, 22h18
  2. Réponses: 3
    Dernier message: 14/05/2014, 12h00
  3. [XL-2007] élaborer une macro pour filtrer les données erronées.
    Par GLEN444 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/03/2014, 16h01
  4. [XL-2007] Macro pour afficher des données dans une listbox
    Par LaurentIA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/08/2012, 17h56
  5. Réponses: 4
    Dernier message: 11/03/2011, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo