Création/écriture dans un fichier txt [Résolu]

Signaler
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020
-
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020
-
Bonjour,

J'aimerais intercepter une erreur dans mon code VB6 (Word 2000) qui fait crasher mes documents.

Je pourrais jouer avec les instructions On Error mais j'aimerais travailler avec un fichier txt que je remplirais avec des repères à des moments clés de l'exécution du code. Lors d'un crash, je n'aurais qu'à examiner le fichier txt et constater jusqu'où le code s'est exécuté.

J'exécute ce VB6 dans Windows 10 64bit.

J'ai essayé:

Open "%UserProfile%\Desktop\Crash.txt" For Output As #1
Write #1, "Bonjour la visite" + vbCr
Close #1


et

Dim Crash, CrashFile

Set Crash = CreateObject("Scripting.FileSystemObject")
Set CrashFile = Crash.OpenTextFile("C:\Crash.txt", 8, True)
CrashFile.writeline "Bonjour!" + vbCr + vbCr
CrashFile.Close


et aucun ne fonctionne

Des idées ?

Merci à l'avance de votre aide.

iBenny

10 réponses

Messages postés
180
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
6 septembre 2020
5
Salut iBenny,

Write #1, "Bonjour la visite" + vbCr

Préfère :
PRINT#1,"Bonjour" + Vbcrlf

VBcr est réservé aux plateformes autres que Windows.
Et créer un handle avec FreeFile.
Mais, effectivement, nous ne sommes pas sur du VB6, mais du VBA ( cf. message de VB95)
Messages postés
6920
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 septembre 2020
112
Bonjour,

voir ceci:

https://codes-sources.commentcamarche.net/faq/11080-vba-excel-lecture-modification-et-enregistrement-d-un-fichier-txt#top

ce qui donne:

Option Explicit
Dim cheminbureau As String
Public Function ObtenirCheminBureau() As String
'par: Excel-Malin.com ( https://excel-malin.com )
 On Error GoTo ObtenirCheminBureauError
    cheminbureau = ""
    Dim oWSHShell As Object
    Set oWSHShell = CreateObject("WScript.Shell")
    
    cheminbureau = oWSHShell.SpecialFolders("Desktop")
    
    If (Not (oWSHShell Is Nothing)) Then Set oWSHShell = Nothing
    ObtenirCheminBureau = cheminbureau

    Exit Function
ObtenirCheminBureauError:
    If (Not (oWSHShell Is Nothing)) Then Set oWSHShell = Nothing
    ObtenirCheminBureau = ""
End Function

Private Sub CommandButton1_Click()
'https://codes-sources.commentcamarche.net/faq/11080-vba-excel-lecture-modification-et-enregistrement-d-un-fichier-txt
Dim num, Chemin
num = FreeFile
ObtenirCheminBureau
Chemin = cheminbureau & "\mondossier\" 'adapter nom dossier
'Ouvre en écriture  et écrase un fichier précédent du même nom
Open Chemin & "essai.txt" For Output As #num ' adapter nom fichier txt
 'Ecrit dans le fichier texte ligne par ligne
 Print #1, "Bonjour"
'Fermeture
Close #num
End Sub




Messages postés
14742
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 septembre 2020
431
Bonjour

Comment faire pour ajouter au lieu d'écraser le contenu ?


C'est là
Open "C:\Users\.....\Desktop\Crash.txt" For Output As #1
Outpout veut dire "j'écrase", de mémoire c'est Append le bon mot clé.

Je rationaliserais en marquerais le chemin en clair en final :
ce n'est pas une bonne idée. Tu ne vas gagné que quelques millisecondes mais le jour où tu mets ton fichier sur une autre session de ton ordi, ou sur un autre ordi ça ne marchera plus.
Avec la méthode du Pivert, ça marche tout le temps.

Désolé pour vous avoir induit en erreur.
Non, non, c'est pas toi c'est Microsoft qui n'est pas foutu de trouver un non suffisamment clair pour ses langages.
Il existe VB6 (et les précédents), VBA, VBS et VB.Net, et beaucoup plus de gens ne savent pas exactement en quoi ils codent.
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020

...Outpout veut dire "j'écrase", de mémoire c'est Append le bon mot clé.

Évidement ! J'aurais dû y penser. Merci Whismeril !

Merci
iBenny
Messages postés
2233
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 septembre 2020
113
Bonsoir
Tu dis J'aimerais intercepter une erreur dans mon code VB6 (Word 2000) qui fait crasher mes documents
Tu travailles avec Visual Basic 6 (VB6) ou Visual Basic Application (VBA) ?

De toute façon que ce soit VB6 ou VBA sans "On Error Goto" l'application plantera et tu ne sauras point où .
Peux-tu mieux expliquer ton souci ?


-- La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Messages postés
14742
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 septembre 2020
431
Bonjour
Lors d’une question précédente, iBenny a déjà affirmé travailler en vb6.
https://codes-sources.commentcamarche.net/forum/affich-10098972-fermer-un-processus-winword-exe-qui-traine#p10098981

Cependant, l’emploi du terme « macro » et surtout l’objet « activedocument » utilisé dans sa solution ne m’ont pas convaincu.

Mais, je ne fais plus de vb6 depuis 13 ans et guère plus de vba...
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020

Bonjour à tous,

MS Word 2000 viens avec VB6 me semble !!! (Félicitations Whisemeril...)

J'utilise très souvent vbCr dans mon code et ça fonctionne très bien, sur Windows !

VB95, mon soucis de code est peu pertinent car mon code est assez élaboré et comporte des douzaines de procédures/fonctions.

L'importance de ce fil est de voir comment je peu créer un fichier txt sur mon bureau et y ajouter du texte dedans de façon à ce que quand mon code plante, je puisse examiner ce fichier txt pour voir jusqu'où le code s'est exécuté.

Ça serait trop beau de pouvoir faire comme dans un batch :
echo "message" >> %UserProfile%\Bureau\crash.txt

Merci de vos lumières,
iBenny
Messages postés
14742
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 septembre 2020
431
Bonjour
MS Word 2000 viens avec VB6 me semble !!! Non, les macros dans word ( ou excel, etc..) sont écrites en VBA (Visual Basic for Applications).
Vb6 était un environnement de développement lié au langage Visual Basic (tout court). Microsoft ne le commercialise plus depuis 1999. Il permettait d’écrire des logiciels autonomes. Même si j’en parle au passé, il est encore beaucoup utilisé.
Office 2000 propose peut-être la version 6 de VBA.

Si ces 2 langages se ressemblent, ils comportent quelques différences notables, comme l’objet activedocument qui n’existe qu’en VBA.

Je déplace donc ton message dans le bon forum
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020
>
Messages postés
14742
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 septembre 2020

C'est pas VB6 ça ?

Ok... je vois en bas : VBA release 6.
C'est du VBA...

Désolé pour vous avoir induit en erreur.
iBenny
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020

Merci Le Pivert.

Je rationaliserais en marquerais le chemin en clair en final :


Open "C:\Users\.....\Desktop\Crash.txt" For Output As #1
Print #1, "Bonjour" ' < pas de guillements ajouté
Write #1, "Bonjour" ' < ajoute les guillemets
Close #1


J'ai testé et ÇA FONCTIONNE !

Le seul caviat est que ça écrit seulement après la fermeture Close #1 ! La prochaine réouverture écrase le contenu. Comment faire pour ajouter au lieu d'écraser le contenu ?

Merci bien
iBenny
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020

Au final, voici mon code :

Dim CrashTest as boolean     ' niveau Module en global


Première rencontre dans le code :

CrashTest = True          ' = False pour arrêter le traçage
If CrashTest Then FilDAriane "On commence", True


Instances suivantes :

If CrashTest Then FilDAriane "On continu"


La procédure FilDAriane :

Sub FilDAriane(Fils As String, Optional Reset As Boolean = False)

If Reset Then
    Open Environ("UserProfile") + "\Desktop\Crash.txt" For Output As #1
Else
    Open Environ("UserProfile") + "\Desktop\Crash.txt" For Append As #1
End If
Print #1, Fils
Close #1
End Sub


Merci de vos aides à tous : D
iBenny
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020

Pour ajourter une ligne vide, coder plutôt ceci pour invoquer la procédure sans arguments :
Sub FilDAriane(Optional Fils As String = "", Optional Reset As Boolean = False)
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020

J'ai fait une fausse manoeuvre et ai perdu un message de Wismeril en position 9.

Merci Wismeril pour l'info "Append" au lieu de "Output" pour ajouter dans le fichier Crash.txt.

J'ai ensuite réglé plus élégamment le cas du chemin de Crash.txt au final.
Messages postés
14742
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 septembre 2020
431
Si c’est bon pour toi, pense à marquer le sujet résolu avec la roue dentée tout en haut du fil.


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
45
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
25 janvier 2020

C'est fait ! Merci...