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

  • Initiateur de la discussion Initiateur de la discussion sandy13
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
[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!!🙁
 
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:
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
79
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
4
Affichages
362
Retour