cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011
-
17 avril 2008 à 09:25
cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011
-
17 avril 2008 à 14:54
Bonjours ami(e)s programmeurs et programmeuzes,
J'utilise le code suivant pour entrer des lignes de texte dans un fichier "journal.txt" :
Sub AjoutJournal()
' Ajoute la date et l'heure ainsi que l'action effectuer dans le journal
Dim Contenu As String
Dim NumFile As Integer
NumFile = FreeFile
' Prend date et heure système
newYear = Year(Now())
newMonth = Month(Now())
newDay = Day(Now())
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now())
' Rajoute un 0 lorsqu'il n'y a qu'un seul chiffre
If (Len(newMonth) 1) Then newMonth "0" & newMonth
If (Len(newDay) 1) Then newDay "0" & newDay
If (Len(newHour) 1) Then newHour "0" & newHour
If (Len(newMinute) 1) Then newMinute "0" & newMinute
If (Len(newSecond) 1) Then newSecond "0" & newSecond
' Insere une ligne dans un fichier
Open "C:\journal.txt" For Binary As NumFile
Contenu = String(LOF(NumFile), 0)
Get #NumFile, , Contenu
Put #NumFile, 1, Record & " Lecture des données" & vbCrLf & Contenu
Close #NumFile
End Sub
Avec une autre macro je récupère le journal et l'affiche (je vous met le code qui l'affiche) :
Open "C:\journal.txt" For Input As 1
Do While Not EOF(1)
Input #1, textline
Range("G" & temoin).Value = textline
temoin = temoin + 1
Loop
Close #1
Le problème c'est que (probablement à cause de l'ouverture en Binary) j'ai plusieurs caractères qui ne servent pas.
Par exemple si l'information que je veux lire est : 2008/04/16
j'ai : $d2008/04/16
Pour supprimer ces caractères(vu que leur nombre semble rester fixe) j'utilise la fonction mid comme suit :
Do While temoin1 < temoin
a = Range("G" & temoin1).Value
Mid(a, 1, 4) = " "
Range("G" & temoin1).Value = a
temoin1 = temoin1 + 1
Loop
Comme vous pouvez le voir j'utilise 4 espaces.
Premierement ca n'est pas pratique (est ce que j'utilise mal la fonction mid?)
Et deuxiemement si le nombre de caractères n'est pas fixe les 4 espaces ne serviront plus.
Ya t'il une solution plus efficace que la fonction mid?
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 17 avril 2008 à 09:56
OK, j'avais pas vu que tu écrivais en sens inverse.
Tu peux qd même le faire en ouvrant en mode texte, mais cela risque d'être un peu plus long si le fichier devient très très gros :
Sub AjoutJournal()
Dim Buffer As string
.... 'Tout ton barratin pour préparer la variable Record va içi ...
Open "..." For Input As NumFile
Buffer = Input(NumFile, Lof(NumFile)
Close #Numfile
Buffer = Record & " Lecture des données" & vbCrLf & Buffer
Open "..." For Output As NumFile
Print #NumFile, Buffer
Close #Numfile
End Sub
A tester ... J'ai pas accès à VBA pour vérifier, mais ca doit ête OK comme ça ?
cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011 17 avril 2008 à 11:03
Sub AjoutJournal()
' Ajoute la date et l'heure ainsi que l'action effectuer dans le journal
Dim Contenu As String
Dim NumFile As Integer
NumFile = FreeFile
buffer1 = ""
' Prend date et heure système
newYear = Year(Now())
newMonth = Month(Now())
newDay = Day(Now())
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now())
' Rajoute un 0 lorsqu'il n'y a qu'un seul chiffre
If (Len(newMonth) 1) Then newMonth "0" & newMonth
If (Len(newDay) 1) Then newDay "0" & newDay
If (Len(newHour) 1) Then newHour "0" & newHour
If (Len(newMinute) 1) Then newMinute "0" & newMinute
If (Len(newSecond) 1) Then newSecond "0" & newSecond
Open "C:\journal.txt" For Input As NumFile
Do While Not EOF(NumFile)
Line Input #NumFile, buffer
buffer1 = buffer1 & vbCrLf & buffer
Loop
Close #NumFile
buffer1 = Record & " Lecture des données" & buffer1
Open "C:\journal.txt" For Output As NumFile
Print #NumFile, buffer1
Close #NumFile
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 17 avril 2008 à 11:12
Input(LOF(NumFile), NumFile) doit fonctionner sans aucune erreur, pour peu que ton fichier soit bien un fichier texte ! Si tu travailles avec un fichier créer par tes précédent essai (ouvert en binary), ca va effectivement planter.
a noter que la méthode de lecture ligne par ligne est plus lente et moins judicieuxe dans ton cas !
Ressaye Input(LOF(NumFile), NumFile) avec unfichier texte bien propre. Ca devrait le faire ensuite.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 17 avril 2008 à 09:43
tu as un $d en trop car tu a écris une donnée de type Date, et, le Put, en plus de mettre les données ds le fichier, il colle aussi ce qui va bien pour retrouver le type des données qui suivent ...
Comme tu relis ton fichier caractère par caractère, tu chopes ces caractères 'de controle' !
Ne pourrais tu pas tout simplement écrire dans ton fichier en mode texte ? Ce serait tout de même bcp plus simple, non ?
cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011 17 avril 2008 à 09:47
Non c'est ce que je faisais avant, le probleme de cette méthode c'est que les ligne s'ecrive en sens inverse, il me faut les dates les plus récentes en haut, ce qui n'est possible apperement que en mode Binary.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 17 avril 2008 à 09:58
Salut,
Sans parler de ton problème, vite fait en passant,
il me semble que ceci record = Format(Now, "yyyy/mm/dd HH:NN:SS" ) equivaut à TOUT CE QUI SUIT
' Ajoute la date et l'heure ainsi que l'action effectuer dans le journal
Dim Contenu As String
Dim NumFile As Integer
NumFile = FreeFile
' Prend date et heure système
newYear = Year(Now())
newMonth = Month(Now())
newDay = Day(Now())
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now())
' Rajoute un 0 lorsqu'il n'y a qu'un seul chiffre If (Len(newMonth) 1) Then newMonth "0" & newMonth If (Len(newDay) 1) Then newDay "0" & newDay If (Len(newHour) 1) Then newHour "0" & newHour If (Len(newMinute) 1) Then newMinute "0" & newMinute If (Len(newSecond) 1) Then newSecond "0" & newSecond
cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011 17 avril 2008 à 10:28
Pour l'heure et date, j'ai une erreur, : le compilateur surligne format et me dit : nombres d'arguments incorrect ou affectation de propriété incorrecte
cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011 17 avril 2008 à 10:46
d'apres ce que je viens de trouver sur google en tapant l'erreur que j'ai trouvé ca :
il faut mettre :
Do While Not EOF(NumFile) ' Check for end of file.
Line Input #NumFile, Temp ' Read line of data.
loop
a la place de :
txtFichier.Text = Input(LOF(NumFile), NumFile)
cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011 17 avril 2008 à 11:07
Euh desolé, suis crevé j'ai pas fait attention que j'avais pas copier ce qu'il fallait.
Bref de toute facon on voit le code qui nous interesse, avec votre aide, celle que j'ai trouvée sur internet (citée plus haut) et mes rectifs j'en suis arrivé à ce code qui fonctionne tres bien.
Par contre je ne comprend toujours pas pourquoi le code de jrivet ne fonctionne pas.
Mais bon ya pu de caractères Zarbis^^.