Problème d'exécution deboucle Do Until vba

sandy13

XLDnaute Nouveau
Bonjour à tous, Je suis en train de créer un programme qui est censé récupérer certaines valeurs dans un fichier .csv source. Ces valeurs sont triées en fonction de certains critères:
- il faut que les dates soient comprises dans la periode rentrée par l'utilisateur au format "jj/mm/aaaa hh:mm:ss"
- on ne récupère que 3 colonnes.
Option Explicit
Sub LireCSV()
Application.Calculation = xlCalculationManual 'Commande pour diminuer le temps de traitement de la machine
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
Dim fso, fil

Set fso = CreateObject("Scripting.FileSystemObject") 'création d'un objet qui nous permet d'ouvrir notre fichier source
Set fil = fso_OpenTextFile("C:\Users\Documents\fichiertout.csv", 1, -2) 'ouverture du fichier source dans lequel nous avons concatené tous les fichiers

Windows("Fenêtre.xlsm").Activate 'Activation de la fenêtre dans laquelle nous sommes en train de travailler

Sheets("Filtre").Activate 'Activation de la feuille Filtre dans laquelle je veux recopier les données filtrées

Separateur = ";" 'séparateur pour les fichier texte

Sheets("Filtre").Cells.Clear 'On supprime tout le contenu des cellules pour s'assurer que nous n'allons pas écrire des données sur des données existantes déjà

Application.ScreenUpdating = False 'Pour ne pas voir à l'écran ce que le programme fait

NumFichier = FreeFile 'Numero du fichier, aucas où il y'en aura plusieurs

iRow = 1 'initialisation du numero de ligne

'Recopie de l'entête dans la première ligne de la feuille
Sheets("Filtre").Cells(1, 1) = "Etat"
Sheets("Filtre").Cells(1, 2) = "Date et heure"
Sheets("Filtre").Cells(1, 3) = "Msg"

Do Until fil.AtEndOfStream = True 'Début de la boucle de filtrage (.AtEndOfStream indique la fin du fichier)
iCol = 1 'initialisation de la valeur de la colonne

Chaine = fil.readline 'une ligne de mon fichier source dans laquuelle les données qont séparés par des points virgule
Ar = Split(Chaine, Separateur) 'tableau qui supprime les points virgule et nous renvoie les données en colonnes
'Boucle de filtrage des données
'Si le timestring est comprise dans l'intervalle de dates rentrées par l'utilisateur au format "jj/mm/aaaa hh:mm:ss"

If ((Sheets("Feuil1").Cells(9, 3).Value <= Ar(13)) And (Ar(13) <= Sheets("Feuil1").Cells(11, 3).Value)) Then

iRow = iRow + 1 'Alors on incrémente le numero de la ligne
For i = LBound(Ar) To UBound(Ar)
'On parcourt une ligne du fichier source
If (i = 2 Or i = 13 Or i = 14) Then
'On ne récupère que les colonnes choisie
Sheets("Filtre").Cells(iRow, iCol) = Ar(i)
iCol = iCol + 1 'On incrémente le numero de colonne
End If
Next i 'Fin de boucle for
End If 'fin de condition if

Loop 'fin de boucle Do Until
fil.Close 'Fermeture du fichier source

Application.ScreenUpdating = True 'On peut maintenant continuer d'utiliser notre écran
Application.Calculation = xlCalculationAutomatic 'commande pour diminuer le temps de traitement de la machine
End Sub




J'ai deux problèmes:
-1, le programme fonctionnait hier mais avec quelques imperfections: j'arrivait à recopier des valeurs comprises dans mon intervalle de temps mais en plus sa me recopiait d'autres dates ayant le même jour que ma date de début, mais ayant un mois différent. Là je ne comprends plus rien.

- 2, Aujourd'hui le programme fonctionne jusqu'au niveau de la boucle Do Until mais il n'entre pas dans la boucle

AIDEZ MOI SVP!!:(
 

GIBI

XLDnaute Impliqué
Re : Problème d'exécution deboucle Do Until vba

Bonjour,

Un exemple de ton fichier serait mieux (déjà quand tu liste du code fait le entre les balise [noparse]
Code:
 et
) [/noparse] ce qui donne

Code:
 mon code
)

Pour le problème de date c'est parce que tu ne compare pas des date des des chaines de caractères et je présume que les dates sont de la forme JJ/MM/AAAA donc pas comparable en string ==> pour convertir = CDATE

GIBI
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Problème d'exécution deboucle Do Until vba

Bonjour

Essaie Do en début de boucle et Until fil.AtEndOfStream=true en fin de boucle : la boucle est exécutée au moins 1fois puis évaluée avant de reprendre on non mais si le fichier est vide cela va planter...
 
Dernière édition:

sandy13

XLDnaute Nouveau
Re : Problème d'exécution deboucle Do Until vba

Je vous envoie en pièces jointe un échantillon de mes données. Le fichier source et le fichier dans lequel je veux copier.
 

Pièces jointes

  • Sourceexpl.xlsx
    13.1 KB · Affichages: 36
  • fichiercopie.xlsx
    9.5 KB · Affichages: 42

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 327
Membres
102 862
dernier inscrit
Emma35400