Création/écriture dans un fichier txt

Résolu
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022 - Modifié le 21 janv. 2020 à 23:11
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022 - 25 janv. 2020 à 16:12
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

JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 22 janv. 2020 à 10:45
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)
1
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié le 23 janv. 2020 à 11:48
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




1
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
24 janv. 2020 à 07:27
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.
1
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022
25 janv. 2020 à 00:22
...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
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
21 janv. 2020 à 23:40
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
22 janv. 2020 à 11:08
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...
0
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022
23 janv. 2020 à 05:53
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
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
23 janv. 2020 à 08:43
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
0
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022 > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
Modifié le 24 janv. 2020 à 03:44
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
0
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022
Modifié le 24 janv. 2020 à 05:02
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
0
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022
Modifié le 25 janv. 2020 à 00:19
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
0
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022
Modifié le 25 janv. 2020 à 16:14
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)
0
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022
Modifié le 25 janv. 2020 à 00:30
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.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié le 25 janv. 2020 à 07:35
Si c’est bon pour toi, pense à marquer le sujet résolu avec la roue dentée tout en haut du fil.


0
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022
25 janv. 2020 à 16:12
C'est fait ! Merci...
0
Rejoignez-nous