Création fichier log retraçant le déroulement d'une macro - VB/VBA/VBS - Programmation
Marsh Posté le 05-08-2009 à 09:15:21
Ben en faite , je suis un peu perdu .. j'ai une idée , faire des if msgbox ok, else msgbox ko ........mais ca serait super long et pénible ...
Ma chef m'a dit qu'il fallait que j'inspire de la macro suivante , mais bon je vois pas trop comment il faut faire ... en te remerciant
cdt
Sub TextStreamTest()
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1,
TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject" )
fs.CreateTextFile "test1.txt" 'Crée un fichier
Set f = fs.GetFile("test1.txt" )
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write "Bonjour"
ts.Close
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
Marsh Posté le 05-08-2009 à 09:25:20
Tu as dit que tu faisais des milliers de copies, tu ne vas tout de même pas afficher un message à chaque fois !!
Un log c'est un fichier texte où tu écris les informations dedans. Là ta fonction écrit dans un fichier test1.txt, utilise ça pour écrire à chaque fois dans ton fichier. Tu fais ton OpenAsTextStream au tout début et à chaque copie tu fais un Write. A la fin tu fais Close et voilà ton fichier log est créé.
Marsh Posté le 05-08-2009 à 09:36:18
ok , merci
Pourais tu me donner une démo avec l'exemple suivant de code, parce c'est mon premier fichier log , ^^ et je suis un peu perdu ...
Workbooks("indiv08.xls" ).Worksheets("PAA" ).Cells(99, 3).Value = Workbooks("reponsePAA2.xls" ).Worksheets("CMLACO" ).Cells(11, 2).Value
merci bcp ...cdt
Marsh Posté le 05-08-2009 à 09:42:43
Que ce soit un fichier log ou qu'importe tu dois quand même être capable de savoir quand la copie a été faite, dans ce cas tu écris après.
Code :
|
Marsh Posté le 05-08-2009 à 10:04:34
Ben excuse moi , mais j'ai jamais programmé et je commence le vba depuis 3 semaine lol
Pour savoir si la copie a bien été faite , je ferais du genre
if la cellule i du fichier 1 du classeur 1 <> cellule i du fichier2 du classeur 1 msgbox ("erreur pour la cellule "& i & )
else
msgbox ("ok pour la cellule "& i & )
Mias bon c'est trés lourd car i varie varie de maniere aléatoire , pareille pour le nom de classeur , donc je dois faire ma boucle en dur ?
Sinon en adaptant ton code je trouve ca , mais je suis confronter au même probleme , pour les i ( ligne ) , j (colonne) , qui varient de maniere aléatoire , faut il le faire en dur ?
Cdt en te remerciant bcp ...
Sub TextStreamTest()
Dim i, m, n As Single
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject" )
fs.CreateTextFile "test1.txt" 'Crée un fichier
Set f = fs.GetFile("test1.txt" )
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
On Error Resume Next
For i = 0 To 100
m = i + 99
n = i + 11
Workbooks("indiv08.xls" ).Worksheets("PAA" ).Cells(m, 3).Value = Workbooks("reponsePAA2.xls" ).Worksheets("CMLACO" ).Cells(n, 2).Value
If Err.Number = 0 Then ' Pas d'erreur lors de la copie
ts.Write "copie de cellule " & m & " : ok"
Else
ts.Write "copie de cellule " & m & " : échec"
End If
Err.Clear 'remettre à 0 la valeur de l'erreur
Next i
ts.Close
Marsh Posté le 05-08-2009 à 10:13:52
Mets ton code entre les balises [ code=vb] [ /code] déjà car c'est illisible sinon.
Ton 1er if ne sert à rien. Faire a=b puis if(a=b) je vois pas bien l'intérêt car je vois pas pourquoi ça marcherait vu qu'il s'agit de string normalement pas de problèmes. Enfin si mais la seule raison pour laquelle ça ne marcherait pas provoquerait une erreur que tu récupères avec mon test sur err.Number.
Après si tu peux vraiment pas faire de boucle tu peux peut-être stocker les coordonnées ds un tableau à la main et le parcourir pour récupérer les coordonnées à chaque copie.
Marsh Posté le 05-08-2009 à 10:19:48
Ben oui moi non plus je vois pas l'interet lol , mais je dois faire un truc qui retrace toute la macro , pour savoir si tout c'est bien dérouler ... si tu as une autre solution , c'est avec plaisir ...
Et pourrait tu developper plus ton idée de tableau stp lol parce je suis perdu
merci !
Mais sinon ce code est til correcte?
[ code=vb] [ /code]
Sub TextStreamTest()
Dim i, m, n As Single
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject" )
fs.CreateTextFile "test1.txt" 'Crée un fichier
Set f = fs.GetFile("test1.txt" )
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
On Error Resume Next
For i = 0 To 100
m = i + 99
n = i + 11
Workbooks("indiv08.xls" ).Worksheets("PAA" ).Cells(m, 3).Value = Workbooks("reponsePAA2.xls" ).Worksheets("CMLACO" ).Cells(n, 2).Value
If Err.Number = 0 Then ' Pas d'erreur lors de la copie
ts.Write "copie de cellule " & m & " : ok"
Else
ts.Write "copie de cellule " & m & " : échec"
End If
Err.Clear 'remettre à 0 la valeur de l'erreur
Next i
ts.Close
end sub
[ code=vb] [ /code]
Marsh Posté le 05-08-2009 à 10:20:42
Ben oui moi non plus je vois pas l'interet lol , mais je dois faire un truc qui retrace toute la macro , pour savoir si tout c'est bien dérouler ... si tu as une autre solution , c'est avec plaisir ...
Et pourrait tu developper plus ton idée de tableau stp lol parce je suis perdu
merci !
Mais sinon ce code est til correcte?
[ code=vb] [ /
Sub TextStreamTest()
Dim i, m, n As Single
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject" )
fs.CreateTextFile "test1.txt" 'Crée un fichier
Set f = fs.GetFile("test1.txt" )
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
On Error Resume Next
For i = 0 To 100
m = i + 99
n = i + 11
Workbooks("indiv08.xls" ).Worksheets("PAA" ).Cells(m, 3).Value = Workbooks("reponsePAA2.xls" ).Worksheets("CMLACO" ).Cells(n, 2).Value
If Err.Number = 0 Then ' Pas d'erreur lors de la copie
ts.Write "copie de cellule " & m & " : ok"
Else
ts.Write "copie de cellule " & m & " : échec"
End If
Err.Clear 'remettre à 0 la valeur de l'erreur
Next i
ts.Close
end sub
]
Marsh Posté le 05-08-2009 à 10:24:18
Les balises c'est
[ code=vb]
*ton code ici*
[ /code]
Et sans mettre d'espace après la première [
Edite ton post.
Pour le tableau par exemple tu stockes dans un tableau de string :
A2;B4;H12;Z34;...
Et après ds ta copie tu fais (je crois que c'est Range au lieu de Cells mais pas sur) :
Code :
|
Marsh Posté le 05-08-2009 à 10:37:01
Ok , donc toi en gros tu veux tout réorganiser dans un tableau
Donc pour l'ex
Code :
|
Je met dans mon tableau a99 b11 apres je vérifie la valeur des cordonnées de string ( localisation ) est bien égale a ?
Code :
|
Marsh Posté le 05-08-2009 à 10:44:31
Oui enfin ici ça serait plus C99 et B11. Tu peux faire deux tableaux, 1 pour les destinations à copier l'autre pour la destination.
Marsh Posté le 05-08-2009 à 10:59:21
Mais en faite, je l'ai deja fait , j'ai un fichier excel avec des dizaine onglet , avec beucoup de tableau du genre
source
b1 onglet A
cible b13 onglet B
par exemple ...
Comment puis je l'exploiter ?
Marsh Posté le 05-08-2009 à 11:12:15
Je sais pas mais essaye de trouver une solution optimale pour éviter de copier/coller du code.
Marsh Posté le 10-08-2009 à 13:37:50
Re bonjour
J'ai éssayer de faire ce que vous m'aviez dit ( apparement obligation de faire des copier colle a chaque fois ) mais il y a un truc que je saisie pas ...
même si la copie de cellule ne se fait pas , le message copie cellule est toujours ok ......question 2 : je cré mon fichier log en l'insérant dans le fichier initial .. en dessous de chaque instruction je rajoute bien cela ?
Code :
|
en vous remerciant d'avance
voici mon code qui marche pas
Code :
|
Marsh Posté le 10-08-2009 à 14:16:21
Ca vaut quoi test1 de la dernière ligne ?
Question 2 : oui mais il serait peut-être plus judicieux d'en faire une fonction afin d'éviter de tout recopier à chaque fois.
Marsh Posté le 10-08-2009 à 14:36:36
Test1 est le fichier txt retraçant le déroulement de la macro ...si je fais expres de fausser la copie de la cellule , il m'affiche toujours ok
Marsh Posté le 10-08-2009 à 14:39:58
Je comprends toujours pas ce que tu fais avec ta ligne 48-49.
Ta variable test1 est définie où ? Y a quoi dans ce fichier ? Y a un rapport avec le log test1.txt ?
Pour fausser la copie de la cellule comment est-ce réalisé ?
Marsh Posté le 10-08-2009 à 14:41:39
ben avant j'ai créer un fichier text1 et la je l'enregistre ...
Marsh Posté le 10-08-2009 à 14:42:24
Dans ce fichier devra figurer toutes les phrases de genre "copie de cellule(103, 3) ok"
Marsh Posté le 10-08-2009 à 14:43:35
Non mais Workbooks(...).SaveAs Filename:= ... c'est pour enregistrer un classeur Excel.
Tu n'as pas besoin d'enregistrer quoique ce soit. Le Write écrit dans ton fichier, le Close va l'enregistrer automatiquement.
Marsh Posté le 10-08-2009 à 14:46:33
a ok lol ben alors ca sert à rien ... désolé ! mais le même persiste ...
Marsh Posté le 10-08-2009 à 14:52:18
Pour fausser la copie de la cellule comment est-ce réalisé ?
T'es sur que le fichier log est bien modifié (cf date de modification du fichier)
Marsh Posté le 10-08-2009 à 14:56:10
ben je modifie l'adress du fichier , donc la copie ne se fait plus , il me dit tjrs ok ..
Marsh Posté le 10-08-2009 à 15:05:35
Je viens de tester les lignes 28 à 39 ça marche chez moi. Vérifie avec le débugger qu'il passe bien par là.
Marsh Posté le 10-08-2009 à 15:26:11
bon je vais peter un cable lol ! j'arrive même plus à accéder à ce fichier log ....il se trouve ou ?
Marsh Posté le 10-08-2009 à 15:38:33
A coté de ton fichier excel à partir duquel tu exécutes la macro.
Mais libre à toi de mettre un chemin complet dans CreateTextFile et GetFile.
Marsh Posté le 11-08-2009 à 15:31:52
Re , excuse moi , mais je n'arrive pas à tester si il y a une erreur , pour voir s'il m'affiche bien le ko.... parce je crois que chez moi c'est toujours du ok ...
en vous remerciant
cdt
Marsh Posté le 11-08-2009 à 15:47:02
Je rerepose ma question : T'es sur que ton fichier log est bien modifié ?
Marsh Posté le 11-08-2009 à 16:28:59
ton log qui dit ok/ko ! tu dis qu'il est tout le temps ok mais es-tu sur que c'est pas une vieille version qui a dit ok une fois et qui n'est pas modifié depuis ?
Marsh Posté le 11-08-2009 à 16:36:50
ben voici la derniere vertion ... j'ai gardé Workbooks(...).SaveAs Filename:= pour avoir le fichier text log, sinon il n'apparait pas
Code :
|
Marsh Posté le 11-08-2009 à 16:54:19
juste un autre petit truc , quand il y plusieurs vérifications les commentaires dans le fichiers txt se mettent les un à la suite des autres ... il faut faire quoi pour aller à la ligne à chaque commentaire ...
Marsh Posté le 11-08-2009 à 17:17:01
meric kiki !!
en me renseignant sur des forum j'ai écris cela
ts.Write "copie de cellule(103, 3) ok" & vbCrLf
mais ça ne marche pas
Marsh Posté le 11-08-2009 à 17:22:12
foxley_gravity a écrit : mais ça ne marche pas |
Tu pourrais pas être plus clair que "ça marche pas" à chaque fois franchement ?
Marsh Posté le 11-08-2009 à 17:25:48
ben il n'y pas de changement de ligne ..en réponse au message de kiki ...les messages restent les un à la suite des autres
et Deamn ®™ tu ne m'as toujours pas dit que comment testé le message ko ...
Marsh Posté le 03-08-2009 à 16:17:27
Bonjour ,
j'ai réalisé une macro basique avec comme instruction basique des milliers de copies de cellule dans d'autre fichier
Extrait de la macro
Workbooks("indiv08.xls" ).Worksheets("PAA" ).Cells(99, 3).Value = Workbooks("reponsePAA2.xls" ).Worksheets("CMLACO" ).Cells(11, 2).Value
ou encore
Dim Fichier1, NomFichier$
Fichier1 = Application.GetOpenFilename("Fichiers Microsoft Office Excel, *.xls" )
If Fichier1 = False Then Exit Sub 'If Fichier1 Like "*\" & ThisWorkbook.Name Then MsgBox "Ouverture non autorisée.": Exit Sub
On Error Resume Next
Workbooks.Open Fichier1
On Error GoTo 0
NomFichier = Dir(Fichier1)
Workbooks(NomFichier).Activate
Workbooks(NomFichier).SaveAs Filename:= _
"F:\013_DirFinTech\042_DptEtudes\018_SrvSupFiabSI\SOP - Support Offres Produits\Inventaire emprunteurs\Laurent\fichier nécessaire\2008Sinistres02062009"
Ma chef m'a demandé de faire un fichier dixit log ... retracant tout le déroulement de la macro ....
Du genre pour l'exemple ici si l'action se déroule bien : copie onglet ....de la cellule(11,2) dans l'onglet ... la cellule(99 ,3) ok sinon ko
De même si l'action se déroule bien afficher ouverture du fichier sinistre ok sinon ko
Si vous pouviez m'aider ....
car je suis un peu perdu
Cordialement
En vous remerciant