XL 2013 création d'un fichier d'analyse

max59

XLDnaute Nouveau
Bonjour a tous,

Je me permet de faire appel a vous concernant la création d'un fichier d'analyse pour mon boulot. Ce fichier à pour but de lister les différents fichiers fermés se trouvant dans un répertoire afin de quantifié la "date du fichier", "le nom du fichier", "nombre de ligne totale", nombre de ligne contenant la valeur "x" et nombre de ligne contenant y( la valeur x et y se trouve dans la même colonne).
Pouvez-vous me dire si ce type de fichier existe déjà? si pas, pouvez-vous m'aider a effectuer le code?

Je vous remercie
 

max59

XLDnaute Nouveau
Bonjour,

Je viens d'effectué le test à mon boulot, le code se lance bien. Mais J'ai une "Erreur d’exécution '6': Dépassement de capacité".

Je pense que ces problèmes ont dû au nombre de données, je me trompe?

sinon est-ce que je peut rajouter que les derniers nouveaux fichiers présent dans le répertoire pour enregistrer les infos sur mon fichier?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Max

Pour :
Mais J'ai une "Erreur d’exécution '6': Dépassement de capacité".

Remplace :
VB:
Dim NbData As Integer, NbLines As Integer, NbLine1 As Integer, NbLine2 As Integer, NbLineAutre As Integer, NbLineData As Integer

Par :
VB:
Dim NbData As Long, NbLines As Long, NbLine1 As Long, NbLine2 As Long, NbLineAutre As Long, NbLineData As Long

Pour :
est-ce que je peut rajouter que les derniers nouveaux fichiers présent dans le répertoire

La v02 est sensée filtrer l'année en cours avec :
VB:
    If DatePart("yyyy", FileItem.DateLastModified) = DatePart("yyyy", Date) Then
Mais je n'ai pas pu tester...

Bonne fin de journée
@+Thierry
 

max59

XLDnaute Nouveau
Merci pour ton retour,

VB:
    If DatePart("yyyy", FileItem.DateLastModified) = DatePart("yyyy", Date) Then

c'est pour tout les années en cours.

Si je remplace "yyyy" par "d", il me copie que les même jours des mois et année précedente.

Je pense modifié mon besoin,par un nouveau pour éviter l'erreur "dépassement capacité". L'idée serai de copier que les derniers fichiers arrivés ( nouveau fichier arrive tout les jours dans le répertoire) et garder les anciens dans mon fichiers excel. -> incrémentation de nouvelle valeurs.

Cela est possible?

Et une autre petite question: dans le tout premier fichier que tu m'avais envoyé qui compte bien les "1" et "2". Je remarque que la macro récupère la dernière colonne du fichier ".ASC", si dans certains fichiers la donnée se trouve dans une autre colonne ( la 2 ème par exemple), quelle info faut-il changer dans la macro?

Je te remercie de ton retour

PS: Désolé de t'embeter avec mon projet
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Max, le Forum

Tu ne m'embêtes pas, pas de souci si je peux t'aider, c'est volontier ! Tu es sympa et poli.

Pour :
c'est pour tout les années en cours.

Ben c'est ce que tu avais demandé il me semble :
Est-ce possible d'avoir que les données de fichiers dont la date de modification correspond à l'année en cours ?

Dans la v03, pour tester, j'écris une Date en dûr dans le Code :
MyDate = #7/23/2020# '<<< Attention Format Américain MM/DD/YYYY
Et ensuite je filtre comme suit :
If CDate(FileItem.DateLastModified) >= MyDate Then


Pour :
Je pense modifié mon besoin,par un nouveau pour éviter l'erreur "dépassement capacité".

Déclarées en "Long" tu ne devrais plus dépasser... Capacité chiffre entier de -2,147,483,648 à 2,147,483,647 !!! (mais ca risque de prendre des heures LoL !


Pour :
L'idée serai de copier que les derniers fichiers arrivés ( nouveau fichier arrive tout les jours dans le répertoire) et garder les anciens dans mon fichiers excel

Ok la v03 devrait faire ça...


Pour :
Et une autre petite question: dans le tout premier fichier que tu m'avais envoyé qui compte bien les "1" et "2". Je remarque que la macro récupère la dernière colonne du fichier ".ASC", si dans certains fichiers la donnée se trouve dans une autre colonne ( la 2 ème par exemple), quelle info faut-il changer dans la macro?

Humm non, depuis qu'on est passé sur un fichier "structuré ASC, je ne fais plus cette méthode "Instr" sur toute la ligne... En effet tu as des "2" de partout, exemple :

1595583439981.png


Donc NON !!! Pour modifier la colonne recherchée c'est ici :
Container = Split(Record, Chr(9)) '<<<< CHR(9) = Tabulation

Container(UBound(Container)) = 1 '<<<< Là je cherche la dernière colonne (Ubound)

Mais si tu veux, tu peux chercher dans la colonne 4 par exemple :
Container(Container(3)) '<<< NB Container est une Array (Tableau simple dimension) en Base Zéro
Donc 4 = 0,1,2,3...



Voilà, j'espère t'avoir aidé.
Bonne Journée
@+Thierry
 

Pièces jointes

  • XLD_ Max59_Loop_FSO_Open_Input_ASC_Files_Stats_v03.xlsm
    34.1 KB · Affichages: 12

max59

XLDnaute Nouveau
Merci ton compliment et pour le detail, je comprend mieux.

Pour le nombre de valeur "1" ou "2" que je recherche, c'est seulement la ligne code ( le reste n'a pas d'importance pour mon analyse. ) ces valeurs ont pour but d'identifier le mode de fonctionnement de la machines à distance (mode Auto ou Manuel),
 

max59

XLDnaute Nouveau
Re Max,

Euh, ce n'est pas " c'est seulement la ligne code "... C'est une Colonne pas une Ligne...
Et en l'occurence c'est la dernière colonne... D'où le Ubound(Container)....

@+Thierry

Désolé, je me suis mal exprimé, c'est bien la colonne.

Je viens d'essayé avec mes fichiers. J'ai une "erreur d'execution 9 : L'indice n'appartient pas à la sélection"
à la ligne :
VB:
If Container(Container(1))=1 then
 

max59

XLDnaute Nouveau
Voici mon code:

Remplacement
Code:
If NbLines >= 7 Then
                                  NbLineData = NbLineData + 1
                                      Container = Split(Record, Chr(9))
                                      If Container(Ubound(Container)) = 1 Then NbLine1 = NbLine1 + 1
                                      If Container(UBound(Container)) = 2 Then NbLine2 = NbLine2 + 1
                                      If Container(UBound(Container)) <> 1 And Container(UBound(Container)) <> 2 Then NbLineAutre = NbLineAutre + 1
                                  End If

par

VB:
   If NbLines >= 7 Then
                                  NbLineData = NbLineData + 1
                                      Container = Split(Record, Chr(9))
                                      If Container(Container(1)) = 1 Then NbLine1 = NbLine1 + 1
                                      If Container(Container(1)) = 2 Then NbLine2 = NbLine2 + 1
                                      If Container(Container(1)) <> 1 And Container(UBound(Container)) <> 2 Then NbLineAutre = NbLineAutre + 1
                                  End If


Le fichier est pour moi du même type, il y a juste l'emplacement de la colonne "code" qui change d'emplacement.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Hey Max

Tu es un petit Filou toi !!! ;)

Ce n'est plus un ASC avec Tabulation en séparateur, mais un CSV avec point-virgule en séparateur...
Comme veux-tu que le même algo fonctionne...
Voici un v04 pour les CSV...

Regarde les différences...
Bon aprèm
@+Thierry
 

Pièces jointes

  • XLD_ Max59_Loop_FSO_Open_Input_ASC_Files_Stats_v04_CSV.xlsm
    34.1 KB · Affichages: 5

Discussions similaires

Réponses
3
Affichages
253

Statistiques des forums

Discussions
312 111
Messages
2 085 395
Membres
102 882
dernier inscrit
Sultan94