Date fichier BIZARRE

Résolu
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 - 1 janv. 2007 à 15:17
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 - 17 févr. 2007 à 20:59
Bonjour à tous et bonne année,
Ben...un truc bizarre, je cmpare la date de création(année) de mon fichier avec l'année en cours pour faire un archivage auto.
Cela fonctionne, mais il y à un truc que je ne pit pas, la function me créer toujours un fichier sur 2006, alors que je fait bien un kill de l'ancien, puis je refait un nouveau fichier!!!!
Voici une partie du code !

    'Sauvegarde fichier
     SourceFile = "C:\X-Trem V1.2.Fr\Fiches\CFiche.txt"
     Set Fichier = fso.GetFile(SourceFile)
     retourdate = Year(Fichier.DateCreated)
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\CFiche.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\CFiche" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\CFiche.txt")
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\CFiche.txt", False)
         'Libération ressources
          Set NouveauFichier = Nothing
       End If

Merci à tous de votre aide
A+
Exploreur

21 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 janv. 2007 à 19:26
Salut Exploreur
J'ai fait l'essai personnellement.
-1- Il semble qu'il faille interpréter le DateCreated avec des pincettes.
En effet, cette date ne sera correcte QUE si le fichier est vraiment l'original.
Si tu déplaces le fichier, il conserve sa date de création originale.
Si tu l'as copié, la date de création du fichier copié devient la date de la copie, bien que son .LastModified ait une date antérieure (celle de l'original) !
-2- En te donnant raison, c'est bizarre, mais si tu recrées un fichier portant le même nom au même endroit, il conserve en effet les attributs du fichier précédemment supprimé avec Kill ou avec Fichier.Delete (ce qui serait plus logique si l'on veut utiliser toutes les facettes du FSO).
J'ai même essayé de faire un Fichier.Move appartenant aussi au FSO (au lieu du CopyFile + Kill), pareil.

Hélas, pour l'instant, je n'ai pas de réponse à ton problème qui, je l'avoue, est bien bizarre.
Chez moi, le "service d'indexation des fichiers" de XP n'est pas actif, cela ne vient donc pas de là.
(1 heure plus tard ...)
J'ai fait quelques essais, en VB.Net notamment, mais aussi ... à la main.
Le problème ne semble pas venir de FSO mais de la gestion des fichiers par XP :
Fais l'essai :
- Créé un fichier nommé "Test.txt" sur un répertoire (clic-droit, Nouveau, Document texte)
- Recherche ailleurs sur ton disque un autre fichier texte (qui ne soit pas important car il sera supprimé !) ayant pour date de création une date antérieure, de 2006 par exemple, puis Coupe-le (pas copier, couper) et Colle-le sur le répertoire où tu as créé le premier fichier "Test.txt"
- Quand tu regardes les propriétés du fichier collé, il garde bien sa date originale. Le Move est correct.
- Maintenant, supprime le premier fichier "Test.txt" (vers la corbeille ou définitivement, pas de diférence)
- Renomme maintenant le fichier importé en lui donnant le nom "Test.txt"
> Et bien le fichier importé perd sa date et prend celle du fichier Test que l'on vient de supprimer.

Encore plus fort :
- Sur ton répertoire, supprime un vieux fichier texte
- Crée un nouveau fichier portant le même nom avec Clic-Droit, Nouveau, Document texte
> Le nouveau fichier vide a pour date celle du fichier que l'on vient de supprimer !

Il faudrait simplement vérifier si cet attribut date subsite dans le temps, après un reboot par exemple.

C'est un problème reproductible. Je vais le signaler à Microsoft.
Si par chance j'ai des nouvelles, je te tiendrais au courant.
Pour l'heure, ta solution semble la meilleure pour contourner le problème.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 janv. 2007 à 15:32
On ne voit pas ton "Datearchivage" dans If retourdate <> DateArchivage .....

Mais toi, tu peu le voir avec un simple :
Msgbox  retourdate & " " & DateArchivage

juste pour savoir de quoi il retourne !
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 janv. 2007 à 15:33
Salut
Il y a des choses bizarres dans ton code.
Ma boule de cristal toute neuve me dit que tu dois avoir une gestion d'erreur qui masque les erreurs, et donc de trouver la réponse à ta question :
- Tu utilises le FileSystemObjects pour retrouver l'année du fichier, Ok.
- Tu détruis la déclaration du FSO et tu l'utilises deux lignes après pour le CreateTextFile.
   Cela devrait générer une erreur ... et l'instruction ne devrait pas être exécutée.
   Dans ce cas, bizarre que tu dises que le fichier existe.
A mon avis, le Kill ne se fait pas non plus. Peut être une erreur de droits d'accès (70)

Pourquoi ne pas exploiter toutes les ficelles du FSO ? tu utilises unKill. Pourquoi pas. Voir .DeleteFile ou peut-être même Fichier.Delete puisque l'objet Fichier représente ton fichier texte à détruire.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 janv. 2007 à 15:44
Re,


Voici toute ma function pour meiux comprendre:
Jack >> j'ai essayé fichier.delete, il me supprime bien le fichier(comme le kill), mais quand je le re-cré il mais toujours l'ancienne date de creation(fichier à detruire) : vendredi 22 décembre 2006, 18:26:43), au lieu de mettre la date de maintenant(01/01/2007)!!!
Jmfmarques >>
'Récupère l'année de date 
 DateArchivage = Year(Date)

voici la fonction :
Public Function ArchivageFichiersText()
'Récupère la date en long
 DateArchivage = Year(Date)
'Variables
 Dim Fichier As File 'Variable retour informations fichier
 Dim retourdate, NouveauFichier, SourceFile, DestinationFile, msg As String
'Créer le FileSystemObject
 Set fso = CreateObject("Scripting.FileSystemObject")




    'Gestion erreur
     On Error GoTo err
   
    'Sauvegarde fichier
     SourceFile = "C:\X-Trem V1.2.Fr\Fiches\CFiche.txt"
     Set Fichier = fso.GetFile(SourceFile)
     retourdate = Year(Fichier.DateCreated)
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\CFiche.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\CFiche" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\CFiche.txt")
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\CFiche.txt", True)
         'Libération ressources
          Set NouveauFichier = Nothing
       End If
   
         'Sauvegarde fichier
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\CFicheF.txt"
          Set Fichier = fso.GetFile(SourceFile)
          retourdate = Year(Fichier.DateCreated)
         
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\CFicheF.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\CFicheF" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\CFicheF.txt")
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\CFicheF.txt", True)
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
          Set NouveauFichier = Nothing
       End If


         'Sauvegarde fichier
         SourceFile = "C:\X-Trem V1.2.Fr\Fiches\MFiche.txt"
         Set Fichier = fso.GetFile(SourceFile)
         retourdate = Year(Fichier.DateCreated)
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\MFiche.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\MFiche" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\MFiche.txt")
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\MFiche.txt", True)
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
          Set NouveauFichier = Nothing
       End If


         'Sauvegarde fichier
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\MFicheF.txt"
          Set Fichier = fso.GetFile(SourceFile)
          retourdate = Year(Fichier.DateCreated)
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\MFicheF.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\MFicheF" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\MFicheF.txt")
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\MFicheF.txt", True)
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
          Set NouveauFichier = Nothing
       End If


        'Sauvegarde fichier
         SourceFile = "C:\X-Trem V1.2.Fr\Fiches\SFiche.txt"
         Set Fichier = fso.GetFile(SourceFile)
         retourdate = Year(Fichier.DateCreated)
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\SFiche.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\SFiche" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\SFiche.txt")
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\SFiche.txt", True)
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
          Set NouveauFichier = Nothing
       End If


         'Sauvegarde fichier
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\SFicheF.txt"
          Set Fichier = fso.GetFile(SourceFile)
          retourdate = Year(Fichier.DateCreated)
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\SFicheF.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\SFicheF" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\SFicheF.txt")
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\SFicheF.txt", True)
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
          Set NouveauFichier = Nothing
       End If


         'Sauvegarde fichier
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\Erreur.txt"
          Set Fichier = fso.GetFile(SourceFile)
          retourdate = Year(Fichier.DateCreated)
      'Condition archivage
       If retourdate <> DateArchivage Then
          SourceFile = "C:\X-Trem V1.2.Fr\Fiches\Erreur.txt"
          DestinationFile = "C:\X-Trem V1.2.Fr\archivage\Erreur" & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill ("C:\X-Trem V1.2.Fr\Fiches\Erreur.txt")
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\Erreur.txt", True)
         'Libération ressources
          Set fso = Nothing
          Set Fichier = Nothing
          Set NouveauFichier = Nothing
       End If


err:
Dim RetourNuméro
RetourNuméro = err.Number
If RetourNuméro = 0 Then GoTo sortie 'Si aucune erreur


Select Case err.Number
'Affichage d'une seule boite d'erreur pour tout les N° d'erreurs
 Case RetourNuméro
 msg = "Problème détecté sur le fichier >> " & SourceFile + Chr$(13) + Chr$(10)
 msg = msg + "" + Chr$(13) + Chr$(10)
 msg = msg + "Veuiller contacter votre administrateur" + Chr$(13) + Chr$(10)
 MessageBox hwnd, msg, "Information utilisateur", vbOKOnly + vbExclamation
 MessageBox hwnd, err.Description, "Information utilisateur", vbOKOnly + vbExclamation
 'Libération ressources
 Set fso = Nothing
 Set Fichier = Nothing
 Set NouveauFichier = Nothing
 Exit Function
 End Select


sortie:
'Libération ressources
 Set fso = Nothing
 Set Fichier = Nothing
 Set NouveauFichier = Nothing


End Function

MERCI de vous intéréssez à mon problème
0

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 janv. 2007 à 15:49
Non, Exploreur, ce n'est pas possible d'utiliser un obej tque l'on vient de détruire.
          Set fso = Nothing
          Set NouveauFichier = fso.CreateTextFile("C:\X-Trem V1.2.Fr\Fiches\CFiche.txt", True)
Ca ne peut pas marcher.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 janv. 2007 à 15:58
Une question: pourquoi est-ce que tu répètes 2 fois les mêmes directives pour CFiche, MFiche et SFiche ?

Et tu devrais mettre Exit Function juste avant l'étiquette Err:

MPi
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 janv. 2007 à 16:01
Pff..Quel nul je suis !!!!
Mais même quand je met en remarque :
' Set fso = Nothing
' Set Fichier = Nothing
' Set NouveauFichier = Nothing

Cela fait toujours la même, j'ai toujours une date de 2006
A+
Exploreur
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 janv. 2007 à 16:05
+ quelques conseils :
- Partout dans ton code, tu utilises le chemin fixe suivant "C:\X-Trem V1.2.Fr"
Le jour où tu voudras le modifier, il te faudra modifier plein de lignes.
Utilises une variable Public dans un de tes modules pour définir ce chemin 
         Public CheminAppli = C:\X-Trem V1.2.Fr\
et ensuite, quand tu veux l'utiliser :
          SourceFile = CheminAppli & "Fiches\SFicheF.txt"
          DestinationFile = CheminAppli & "archivage\SFicheF" & retourdate & ".txt"
- Les chaines ne s'additionnent pas, elles se concatènent.
Il faut utiliser le symbole & pour relier plusieurs chaines.
Le symbole + fonctionne en général, mais un jour, VB considèrera que les termes ressemblent à des chiffres et il additionnera les chiffres au lieu de les mettre bout à bout : Un futur problème que tu peux éviter.
- Pour plus de clarté, il existe une foultitude de constantes dans VB qui permettent de faciliter la compréhension et la relecture.
C'est le cas des :
   Chr(13) = vbCr
   Chr(10) = vbLf
   Chr(13) & Chr(10) = vbCrLf   ...
- Fais tes dimensionnenemts de variables en tête de code = moins de boulot pour le compilateur et moins de risque d'erreur si tu repasses une 2eme fois sur ce Dim (celui par le label 'Err:')
- Gestion d'erreur :
Le Err.Number possède le n° d'erreur ... à condition que de nouvelles instructions sans erreur, elles, apparaissent.
Tu as bien pris la peine de stocker ce code d'erreur dans ta variable RetourNuméro, mais ensuite, tu fais un Select Case avec le Err.Number. Or, il a été remis à zéro par les instructions précédentes (le Dim en fait peut-être partie, d'ailleurs)

Normal donc, que tu ne reçoives jamais de MsgBox d'erreur bien qu'il y en eut !
Utilise les méthodes de debugage pour suivre l'avancement de ton code :
F9 sur une des lignes : le programme s'y arrêtera
F8 pour n'avancer que d'une seule ligne de code
Un sourvol de la souris au dessus de tes variables pour en voir le contenu dans une ToolTipText
La fenêtre de débugage Ctrl-G pour afficher le contenu d'une variable (avec "? maVariable")
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 janv. 2007 à 16:09
Encore moi.
Ton code est répétitif.
Seul le nom du fichier change.
Pourquoi ne pas créer une fonction qui utiliserait une variable chaine en guise de fichier à tester ?
Cela simplifierait (racourcirait) ton code et, une fois ta fonction mise au point, tu serais sûr qu'elle fonctionne pour tous les autres fichiers.
Il faut apprendre à être faignant.
A méditer
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 janv. 2007 à 16:12
ok, j'ai du boulot ce soir, on va refaire tout ça suivant tes conseils Jack.Merci.
A+
Exploreur
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 janv. 2007 à 16:18
yes, j'ai méditer ta parole, ce n'est pas être faignant, mais plutôt : logique, ordonner, optimiser, le début de sources plus compréhensible....et moins lourde en code répétitif...
A+
Exploreur
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 janv. 2007 à 18:50
Re-Bonsoir Jack,
Ben...voilà ce que j'ai fait à ma fonction (suivant tes conseils et + plus courte)

Dans le module :
 Public Const CheminAppli = "C:\X-Trem V1.2.Fr\Fiches"
 Public Const CheminAppliSauvegarde = "C:\X-Trem V1.2.Fr\Archivage" 
 Public Const FichierFiche1 = "CFiche.txt"
 Public Const FichierFiche2 = "CFicheF.txt"
 Public Const FichierFiche3 = "MFiche.txt"
 Public Const FichierFiche4 = "MFicheF.txt"
 Public Const FichierFiche5 = "SFiche.txt"
 Public Const FichierFiche6 = "SFicheF.txt"
 Public Const FichierFiche7 = "Erreur.txt"
 Public RetourFichierFiche As String

Function :
Public Function ArchivageFichiersText1()
'Récupère la date en long
 DateArchivage = Year(Date)
'Variables
 Dim Fichier As File 'Variable retour informations fichier
 Dim retourdate, NouveauFichier, SourceFile, DestinationFile, msg As String
 Dim Boucle, RetourNuméro As Integer
'Créer le FileSystemObject
 Set fso = CreateObject("Scripting.FileSystemObject")


    'Gestion erreur
     On Error GoTo err
   
    'Boucle pour faire tout les fichiers text
     For Boucle = 1 To 7     If Boucle 1 Then RetourFichierFiche FichierFiche1     If Boucle 2 Then RetourFichierFiche FichierFiche2     If Boucle 3 Then RetourFichierFiche FichierFiche3     If Boucle 4 Then RetourFichierFiche FichierFiche4     If Boucle 5 Then RetourFichierFiche FichierFiche5     If Boucle 6 Then RetourFichierFiche FichierFiche6     If Boucle 7 Then RetourFichierFiche FichierFiche7
    
     SourceFile = CheminAppli & RetourFichierFiche & retourdate & ".txt"
     Set Fichier = fso.GetFile(SourceFile)
     retourdate = Year(Fichier.DateCreated)
    'Condition archivage
     'Boucle pour faire tout les fichiers text
       If retourdate <> DateArchivage Then
          SourceFile = CheminAppli & RetourFichierFiche
          DestinationFile = CheminAppliSauvegarde & RetourFichierFiche & retourdate & ".txt"
         'Copie le fichier source dans le fichier cible.
          FileCopy SourceFile, DestinationFile
         'On détruit l'ancien fichier
          Kill (CheminAppli & RetourFichierFiche)
         'On créer le nouveau fichier text
          Set NouveauFichier = fso.CreateTextFile(CheminAppli & RetourFichierFiche, True)
       End If
      Next Boucle


err:
If RetourNuméro > 0 Then
 MessageBox hwnd, err.Description, "Information utilisateur", vbOKOnly + vbExclamation
Else
'Libération ressources
 Set fso = Nothing
 Set Fichier = Nothing
 Set NouveauFichier = Nothing
End If


End Function

Quand penses-tu ?(sur le schéma, pas encore testée)
Merci d'avance
A+
Exploreur
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 janv. 2007 à 19:56
Bel effort, mais as-tu compris ce que tu as écrit ?
-1- Pour les variables :
Ok, il ne fallait peut-etre pas aller jusqu'à la mémo des noms de fichier qui sont moins parlant maintenant, mais du moment que tu t'y retrouves ...
-2- Dimensionnement
Dim retourdate, NouveauFichier, SourceFile, DestinationFile, msg As String
ne veut pas dire que chacune de ces variables sera de type String (seule 'msg' le sera, les autres seront des Variant, à bannir tant que faire se peut)
Il faut (hélas) répéter le type de la variable pour chaque variable.
-3- Tu utilises 'retourdate' avant de l'avoir renseignée (dans SourceFile) : ça doit pas bien marcher !
En fait, tu t'es brélé les pinceaux avec le nom du fichier. Celui-là, le source, n'a pas besoin de date dans son nom (d'après le 1er jus de ton code).
-4- Ta gestion d'erreur est encore bien bizarre
Où est passé le Err.Number ?
-5- 'fso' est déclaré en Public qqpart, je suppose (j'espère aussi)
-6- Ne JAMAIS utiliser de mot clé du langage comme variable ou Label, comme 'err'
-7- TOUJOURS utiliser 'Option Explicit' en tête de chaque page de code (Voir options de VB)
Ca t'apprendras à déclarer tes variables et à définir s'il faut qu'elle soit locale ou globale ... et ne pas faire de faute de frappe
-8- TOUJOURS lancer ton programme avec Ctrl-F5 (et pas F5 seul) : VB scannera le code pour trouver les erreurs de programmation : ça te fera gagner du temps
-9- Tu n'as pas compris ce que je voulais dire quand je parlais de faire une fonction :
Tout n'est pas à mettre dans une fonction. Seulement le traitement :
'RetourFichierFiche' n'est qu'une donnée à transmettre --> ne pas utiliser de déclaration Public seulement pour cela, ça finira par buger un jour ou l'autre.
Il faut donner aux fonctions ce dont elles ont besoin : des données.
Une fois n'est pas coutume, voici ton code corrigé (ce que je ne fais pas d'habitude, cadeau)
Par pitié, avant de donner du code, essaye de comprendre les rouages et apprends à utiliser le debugage, Codes-Sources n'est pas là pour refflechir à ta place, juste débloquer une situation, mais il faudra d'abord essayer de la résoudre par toi même.

Option Explicit


Public Const CheminAppli = "C:\X-Trem V1.2.Fr\Fiches"
Public Const CheminAppliSauvegarde = "C:\X-Trem V1.2.Fr\Archivage"
Public Const FichierFiche1 = "CFiche"       ' \
Public Const FichierFiche2 = "CFicheF"      ' |
Public Const FichierFiche3 = "MFiche"       ' | Ne pas mettre les extensions .txt
Public Const FichierFiche4 = "MFicheF"      ' | sinon, plus possible de changer le
Public Const FichierFiche5 = "SFiche"       ' | nom du fichier de sauvegarde
Public Const FichierFiche6 = "SFicheF"      ' | (du moins facilement)
Public Const FichierFiche7 = "Erreur"       ' /
'Public RetourFichierFiche As String     ' Ne sert à rien




Public Function ArchivageFichiersText1()
   
     Dim RetourErreur As Long
   
    'Boucle pour faire tout les fichiers text
     RetourErreur = Traitement(FichierFiche1)
         If RetourErreur <> 0 Then Exit Function ' si tu veux intérrompre le traitement
     RetourErreur = Traitement(FichierFiche2)
         If RetourErreur <> 0 Then Exit Function
     RetourErreur = Traitement(FichierFiche3)
         If RetourErreur <> 0 Then Exit Function
     RetourErreur = Traitement(FichierFiche4)
         If RetourErreur <> 0 Then Exit Function
     RetourErreur = Traitement(FichierFiche5)
        If RetourErreur <> 0 Then Exit Function
     RetourErreur = Traitement(FichierFiche6)
        If RetourErreur <> 0 Then Exit Function
     RetourErreur = Traitement(FichierFiche7)
        If RetourErreur <> 0 Then Exit Function
    


End Function


Private Function Traitement(sNomBaseFichier As String) As Integer
    ' On ne fournit que le nom du fichier source, les
    '   répertoires sont connus, pas la peine de les transmettre
    ' La fonction renvoie le code d'erreur éventuel (0 si RaS)
   
    'Variables
    Dim Fichier As Object 'Variable retour informations fichier
    Dim retourdate As Integer       ' ## Pas une String
    Dim NouveauFichier As Object    ' ## Pas une String
    Dim SourceFile As String
    Dim DestinationFile As String
'    Dim msg As String              ' ## ne sert pas
    Dim RetourNuméro As Integer
    Dim fso As Object   ' ## Oublié, celui-là --> Option Explicit
    Dim DateArchivage As Integer   ' ## Oubliée aussi
   
    'Gestion erreur
    On Error GoTo Erreur
    'Créer le FileSystemObject
     Set fso = CreateObject("Scripting.FileSystemObject")
   
    'Récupère la date en long
    DateArchivage = Year(Date)
    SourceFile = CheminAppli & sNomBaseFichier & ".txt"
   
    Set Fichier = fso.GetFile(SourceFile)
    retourdate = Year(Fichier.DateCreated)
    'Condition archivage
    If retourdate <> DateArchivage Then
'        SourceFile = CheminAppli & RetourFichierFiche  ' ## Déjà fait
        DestinationFile = CheminAppliSauvegarde & sNomBaseFichier & CStr(retourdate) & ".txt"
        ' ## A ajouter : Que se passe t-il si le fichier
        '                destination existe déjà ?
        'Copie le fichier source dans le fichier cible.
        FileCopy SourceFile, DestinationFile
        'On détruit l'ancien fichier
        Kill (SourceFile)   ' ## autant utiliser les variables préparées
        'On créer le nouveau fichier text
        Set NouveauFichier = fso.CreateTextFile(SourceFile, True)
        ' ## Tu mets True à l'overwrite : alors pourquoi le détruire avant ?
    End If


Erreur:
    RetourNuméro = Err.Number
    If RetourNuméro > 0 Then
        ' On n'additionne pas les Flags, on fait un 'Or'
'        MessageBox hWnd, Err.Description, "Information utilisateur", vbOKOnly Or vbExclamation
        ' ## Plus d'info sont nécessaires pour cibler le problème
        MessageBox hWnd, "Erreur :" & Err.Description & vbCrLf & _
                         "dans le traitement du fichier """ & sNomBaseFichier & """", _
                         "Information utilisateur", vbOKOnly Or vbExclamation
    End If
'    Else   ' ## Non, la libération doit se faire qu'il y ait eu une erreur ou pas
    'Libération ressources
    If Not fso Is Nothing Then Set fso = Nothing
    If Not Fichier Is Nothing Then Set Fichier = Nothing
    If Not NouveauFichier Is Nothing Then Set NouveauFichier = Nothing
    ' Renvoie le code d'erreur à l'appelant
    Traitement = RetourNuméro


End Function
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 janv. 2007 à 20:55
Bonsoir Jack,
Tout d'abord, je respect ton point de vue. Mais je voudrais expliquer certaines choses.
J'ai juste déposé ce code pour savoir ce que tu en pensé sur le schéma de développement.
Je voulais  en aucun cas (mais merci du cadeau) avoir la correction mais plutôt ton avis, car je me doute que tu as d’autres choses à faire que de corriger le code des autres.
Il est vrai que je comprend certaines choses qui sont de mon niveau, et d'autres  pas du tout, je suis désolé si je "t'es embêter avec ma question".
Pour ce qui est de : SourceFile = CheminAppli & RetourFichierFiche & retourdate & ".txt", j'ai mis en faite & retourdate & ".txt", pour créer une erreur volontaire et voir quel numéro il en retourne (copier/coller trop vite, je te l'accorde).


Comme on dit « c’est en forgeant que l’on devient forgeront », pour le code c’est pareil, c’est en codant qu’on avance dans la programmation, mais il arrive quelque fois d’avoir besoin d’explications.(ce que tu as fait fort bien)


Mais comme dit plus haut, je respect totalement ta position.


Merci d’avoir prit la peine de me répondre, et encore une fois je ne voulais avoir que ton avis, je ne voulais en aucun prendre la « tête », avec ce code simple à tes yeux, mais pas forcément pour les miens.


On peut dire : Est bien ne programme pas si tu comprend rien, mais bon, je ne baisse pas les bras, d’avoir un jour une connaissance en programmation plus élevée qu’actuellement.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Sincères Salutations.



 




A+


Exploreur


 
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 janv. 2007 à 22:46
Pas de souci, je l'ai fait car j'avais du temps et j'étais un peu en manque après une semaine sans programme à dévorer. En fait, je ne pouvais pascommenter chaque ligne et te dire ce qui n'allait pas car ton code était un peu dans le désordre et ça ne m'a pas pris la tête, rassure toi ;-)

Pense à t'exercer avec le débuggeur (F9, F8, F5), c'est hyper pratique pour suivre ce qui se passe de ligne en ligne car on ne dépanne pas du programme en survolant mais en ré-analysant chaque ligne et voir où  ça pêche.

Bon courage et à +
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 janv. 2007 à 23:35
Re Jack,
Tiens il y a un truc bizzare(j'vé bien trouvé), quand je créer donc mon nouveau fichier du même nom, mais dans un répertoire différent de C:\X-Trem V1.2.Fr\Fiches, la date de création du fichier est celle d'aujourd'hui !!!!Mais si le remet au même endroit, ben je garde l'ancienne date...Patience et persévérence sont la clé du codage !!!
Que la force soit avec moi !!!
(F5, F8, F9 >> Ok) !
A+
Exploreur
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
2 janv. 2007 à 19:48
Bonsoir Jack et bonsoir à tous,
Bon c'est le mec(moi...lol..qui pit pas trop certaines chose), mais j'ai "trouver" une solution de bidouille, pour, quand je créer mon nouveau fichier j'ai la date de création actuelle.
Je voulais te soumettre(pour avis) ma solution(je reprend donc le code que tu ma donné..une partie) :

    If retourdate <> DateArchivage Then
        DestinationFile = CheminAppliSauvegarde & sNomBaseFichier & CStr(retourdate) & ".txt"
        ' ## A ajouter : Que se passe t-il si le fichier
        '                destination existe déjà ?
        'Ci-dessus  je fais rien, le fichier est créé une seule fois par année
        'Copie le fichier source dans le fichier cible.
         FileCopy SourceFile, DestinationFile
        'On détruit l'ancien fichier
         Kill (SourceFile)   ' ## autant utiliser les variables préparées
        'On créer le nouveau fichier text
        'Nouveau chemin de transition pour le nouveau fichier text
         SourceFile = NewDestination & sNomBaseFichier & ".txt"
         Set NouveauFichier = fso.CreateTextFile(SourceFile, True)
         fso.CopyFile NewDestination & "*.txt", CheminAppli
         NouveauFichier.Close 'Ferme le fichier, sinon peut pas le supprimer !!!
         Kill (SourceFile) 'Supprime fichier temporaire
    End If

Bien sur j'ai déclaré dans le module :
Public Const NewDestination = "C:\X-Trem V1.2.Fr\Fiches\Temp"

Bon il doit y avoir surement plus simple...Je continue à chercher.
Je pense que le faite de re-créer le fichier dans le même répertoire et du même non aprés le kill(je vais surement dire une bêtise), je devais faire comme "backup" de mon ancien fichier..J'ai bien mis des points d'arrêt au programme pour voir de quoi il en retourne des variables, mais je ne vois pas d'ou vient le problème que je garde toujours la date de création de mon ancien fichier!!!Soit c'est gros et je ne le vois pas, soit je suis vraiment......!
Donc je voulais JUSTE avoir ton avis si tu as le temps de me répondre, bien sur.
Encore une fois merci pour tout.

Salutations
Exploreur
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 janv. 2007 à 20:08
Bonsoir, Jack (et meilleurs voeux)

"C'est un problème reproductible. Je vais le signaler à Microsoft.
Si par chance j'ai des nouvelles, je te tiendrais au courant."

C'est déjà fait (en 2001) !

Ce n'est pas seulement avec XP !

Mucrosoft (qui répond rarement) s'était à l'époque empressé de me répondre que c'était là un choix fait sciemment et que la date de création était bien celle de la "naissance" d'un fichier sur un répertoire !!!!!... et que pour y parvenir "sans encombres", tout en gardant la possibilité de récupérer tant depuis la corbeille que par (ah... j'ai oublié le nom... zut... tu sais : la récupération par le pseudo-dos de ce qui a malencontreuseùent été effacé et non encore "écrasé"...), ils n'avaient pas eu d'autre choix !




Mais je suis personnellement intéressé par la réponse qu'ils feraient aujourd'hui, juste pour voir si elle n'a pas varié.....
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
3 janv. 2007 à 20:21
Bonsoir Jack et Jmfmarques,
Aprés essai, c'est trop fort le "Problème date voulu par Microsoft"!!!!
Merci à tous deux pour vos précision .
A+
Exploreur
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
3 janv. 2007 à 21:06
Re-bonsoir Jack,
Au fait, ta leçon du 01/01/2007 (code et explications), me sert énormément...
D'ailleurs je suis entrain de faire des améliorations sur cette source même...bon, c'est que le début....
Merci encore pour tout.
A+
Exploreur
0
Rejoignez-nous