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.
[TABLE="class: outer_border, width: 800"]
[TR]
[TD]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 = fs😵penTextFile("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[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[/TABLE]
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!!🙁
- 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.
[TABLE="class: outer_border, width: 800"]
[TR]
[TD]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 = fs😵penTextFile("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[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[/TABLE]
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!!🙁