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 :

Problème de dates sur importation fichier texte


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Problème de dates sur importation fichier texte
    Bonjour à tous !

    Avant tout, je m'excuse par avance auprès des éventuels forumistes qui s'irriteraient à la vision de ma requête, mais je suis désespéré (si si !).
    Après avoir longuement divagué sur les nombreux posts qui traitent du sujet, force est de constater que je n'arrive pas à résoudre mon problème, je sollicite donc votre matière grise !

    Les fichiers que je manipule sont au nombre de 2 :
    - je dispose d'un fichier texte de données (http://cjoint.com/?BDwsuk5Z0p4) doté de plusieurs colonnes (séparées par une tabulation), chaque ligne correspondant à une date de format "dd/mm/yyyy hh:m" (on progresse chronologiquement en descendant)
    - je cherche à l'importer dans Excel (2007) via macro
    - le fichier Excel dans lequel j'importe (http://cjoint.com/?BDwwsO4z7kS) comporte une feuille par mois.

    Mon objectif :
    L'idée est que mon fichier texte est régulièrement incrémenté en données (les dates couvrant 1 année et s'ajoutant à celles déjà saisies), et du coup de temps à autre (pas de fréquence définie) j'importe -en exécutant manuellement une macro- mes données dans mon fichier Excel.
    Ce que je cherche à faire est très simple : lorsque je procède à une nouvelle importation, je veux vérifier dans le fichier Excel la dernière date importée pour ne recommencer la copie des données du fichier texte que depuis la "nouvelle date" (pas encore enregistrée dans le fichier Excel).
    Je rajoute une petite contrainte à cette importation, c'est de trier les données par mois : quand le mois de la date change (pas de contrepèterie ), je souhaite copier les données dans la feuille suivante, et ainsi de suite.

    Mon problème :
    Le problème auquel je me heurte est la recherche dans le fichier texte de la dernière date enregistrée dans le fichier Excel : Excel permute (évidemment) le mois et le jour du format de la date, et du coup il ne reconnaît plus la date !
    J'avoue avoir tout essayé : CDate, permutation manuelle (très moche) du mois et du jour, convertir les dates en String, ... mais toujours sans succès !

    En conclusion, je deviens fou, donc si quelqu'un pouvait venir à ma rescousse (je demeure persuadé que ma réussite ne tient à plus grand chose), ce serait mon sauveur !
    MERCI BEAUCOUP !

    P.S. : je précise, si tant est que ce soit nécessaire après que vous ayez vu mon code, que je suis débutant-amateur-autodidacte de VBA, donc, même si je suis tout à fait ouvert à vos remarques, n'ayez pas trop la dent dure , merci !

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Je n'ai pas pour habitude d'ouvrir les fichiers joints mais ton problème me titillait.

    Bien que je te sente sur une bonne voie (et surtout pour ça), j'ai quelques remarques par rapport à ton code.
    1. Pense à toujours mettre Option Explicit en début de chaque module.
      Ca t'évitera les erreurs de noms de variables comme tu en as dans ton code.
      Il y a une option "Déclaration des variables obligatoire" dans l'éditeur VBA.
      Cette option insère la ligne automatiquement.
    2. Pense "Objet".
      Tu verras que j'ai créé des objets Workbook et Worksheet dans ton code.
    3. Il est d'usage de préfixer les variables de leur type.
    4. Pour gérer des dates, il faut toujours utiliser un type date.
    5. Il vaut mieux créer un module pour tout code autre que les procédures événementielles.


    Voici ton code modifié.
    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
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Sub importation_suivi_CET()
     
      ' Macro d'importation et de traitement de données provenant d'une exportation de fichier texte (.txt)
     
      ' Définition des variables
      Dim wbkSuivi As Workbook           'stockage du fichier de suivi
      Dim Ftxt As Variant             'stockage du nom du fichier de données texte
      Dim wbkData As Workbook              'stockage du fichier de données Excel dans lequel est importé le fichier de données texte
      Dim wksDatap As Worksheet             'stockage de la feuille du fichier de données Excel "Data"
      Dim iFinCol As Integer           'numéro de la dernière colonne contenant une donnée du fichier de données Excel
      Dim iFinLig As Long              'numéro de la dernière ligne contenant une donnée du fichier de données Excel
      Dim dDerDate As Date            'dernière date enregistrée dans le fichier de suivi
      Dim strDerDate As String            'dernière date enregistrée dans le fichier de suivi
      Dim iDebLig_data As Long      'ligne à laquelle commencer la copie des données du fichier de données Excel
      Dim iDebLig_suivi As Long     'ligne à laquelle commencer le collage des données dans le fichier de suivi
      Dim iDebFeuille As Integer       'n° de feuille dans laquelle commencer le collage de données dans le fichier de suivi
      Dim iDebFeuille_init As Integer
      Dim c As Range
      Dim i As Integer
     
      ' Stockage du nom du fichier de suivi sous la variable "Suivi"
      Set wbkSuivi = ThisWorkbook
     
      ' Sélection du fichier de données texte Ftxt
      Ftxt = Application.GetOpenFilename("Fichier texte, *.txt")
      If Ftxt = False Then
        GoTo Fin
      End If
     
      ' Importation dans Excel du fichier de données texte
      Workbooks.OpenText Filename:=Ftxt, FieldInfo:=Array(Array(1, 4)), local:=True
     
      ' Stockage du nom du fichier de données Excel sous la variable "Data"
      Set wbkData = ActiveWorkbook
      Set wksDatap = wbkData.ActiveSheet
     
      ' Détermination des coordonnées de la dernière cellule non vide du tableau du fichier de données Excel
    '  wksDatap.Range("A:A").NumberFormat = "dd/mm/yy hh:mm"
      iFinLig = Cells.Find("*", , , , , xlPrevious).Row
      iFinCol = Cells.Find("*", , , , , xlPrevious).Column
     
      ' Recherche de la dernière date "DerDate" enregistrée dans le fichier de suivi et
      ' détermination de la ligne "DebLig_suivi" (ligne suivant celle de "DerDate") à partir de laquelle commencer le collage des données et
      ' de la feuille "DebFeuille" dans laquelle la ligne "DebLig_suivi" se trouve
      iDebFeuille = 13
      strDerDate = "Date - Heure"
     
      Do While strDerDate = "Date - Heure"
        If iDebFeuille > 0 Then
          wbkSuivi.Sheets(iDebFeuille).Activate
          iDebLig_suivi = Columns(1).Find("*", , , , , xlPrevious).Row
          strDerDate = Columns(1).Find("*", , , , , xlPrevious)
          iDebFeuille = iDebFeuille - 1
        Else
          strDerDate = wksDatap.Cells(2, 1)
          iDebLig_suivi = 1
        End If
      Loop
      If IsDate(strDerDate) Then
        dDerDate = CDate(strDerDate)
      End If
      iDebFeuille = iDebFeuille + 1
      iDebFeuille_init = iDebFeuille
      iDebLig_suivi = iDebLig_suivi + 1
     
      ' Recherche dans le fichier de données Excel de la dernière date "DerDate" enregistrée dans le fichier de suivi
      Set c = wksDatap.Range("A:A").Find(what:=dDerDate, lookat:=xlWhole)
      If c Is Nothing Then
          MsgBox "Les dates du fichier texte ne correspondent pas à celles du fichier de suivi.", , "Erreur d'importation des données"
          'GoTo Arret
      Else
          iDebLig_data = c.Row + 1
      End If
     
      ' Copie et collage des données en changeant de feuille si le mois change
      If Month(wksDatap.Cells(iDebLig_data, 1)) <> Month(wksDatap.Cells(iDebLig_data - 1, 1)) Then
        iDebFeuille = iDebFeuille + 1
        iDebLig_suivi = 2
      End If
     
      wksDatap.Range(wksDatap.Cells(iDebLig_data, 1), wksDatap.Cells(iDebLig_data, iFinCol)).Copy _
            wbkSuivi.Sheets(iDebFeuille).Cells(iDebLig_suivi, 1)
     
      For i = 1 To (iFinLig - iDebLig_data)
        If Month(wksDatap.Cells(iDebLig_data + i - 1, 1)) <> Month(wksDatap.Cells(iDebLig_data + i, 1)) Then
          iDebFeuille = iDebFeuille + 1
          iDebLig_suivi = 2
          iDebLig_data = iDebLig_data + i
          i = 0
        End If
        wksDatap.Range(wksDatap.Cells(iDebLig_data + i, 1), wksDatap.Cells(iDebLig_data + i, iFinCol)).Copy _
              wbkSuivi.Sheets(iDebFeuille).Cells(iDebLig_suivi + i, 1)
      Next i
     
    Arret:
     
      ' Supprimer le fichier de données Excel
      wbkData.Close SaveChanges:=False
     
    Fin:
     
    End Sub
    Etudie-le et n'hésite pas à poser des questions si quelque chose n'est pas clair.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour à toutes et tous !

    Mille fois merci AlainTech, mon problème était peut-être trivial mais je saturais vraiment !

    En ce qui concerne tes recommandations :
    - Je pratiquerai dorénavant le Option Explicit (je ne connaissais pas !) ;
    - J'ai activais le "Déclaration de variables obligatoires" (je ne connaissais pas non plus, c'est fort utile !) ;
    - Je coderai dans les modules ;
    - Et enfin je fonctionnerai autant que possible en Objet (fort pratique aussi, je ne connaissais évidemment pas non plus !).

    MERCI BEAUCOUP !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/04/2010, 22h05
  2. Réponses: 3
    Dernier message: 17/07/2008, 21h59
  3. format date sur importation fichier
    Par bernard vacher dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/02/2008, 16h41
  4. problème pour importer fichier texte
    Par louffa dans le forum Outils
    Réponses: 2
    Dernier message: 30/01/2008, 14h31
  5. Problème Import fichier texte
    Par Fantomas13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/01/2008, 23h08

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