Fichier CSV

MajIsh

XLDnaute Nouveau
Bonjour,

Bonjour,

Je cherche une application qui fait appel à un fichier csv (renouvelable journalièrement ) Ce lien n'existe plus et qui peut (d'une façon automatique) :

- Supprimer des colonnes inutiles
- Calculer tout en évitant les doublons.
- Trier et filtrer par date, par type etc..

Je reçois ce fichier csv chaque jour donc ce n'est pas un fichier stable (la mise à jour est journalière)
Je veut savoir par exemple le groupe G233-1 qu'est ce qu'il a travaillé comme : programme : 04L 972 627 AN, Tabella : TAB 009 834 B, quantité (Test ended OK) au 31/01/2015 entre 06h et 08h et l'opérateur qui a travaillé sur le poste (38374 par exemple), le numéro de la table (T265)

Doublons :
A
A
B
C
A
C
A

Quantité : 3 (A, B et C).

La colonne Identifiant unique contient des doublons parce que à chaque détection d'un défaut ce dernier doit être mentionné avec l'identifiant du produit donc on répète le même identifiant

J'ai commencé a faire une macro qui calcule la quantité des identifiants toute en évitant de recalculer les doublons, et elle envoie le résultat dans un fichier texte, j'ai aussi réalisé un fichier .vbs qui exécute cette macro depuis l’extérieur sans ouvrir le fichier excel. Mes problèmes sont :
Je suis obligé d'enregistrer le fichier csv en .xlsm (excel prenant en charge les macros)
La macro fait le calcul de la totalité de la colonne alors que mon besoin c'est de trier cette colonne par date, groupe etc... (comme déjà expliqué).

macro :

Sub CptDiffVal()
'Compte le nombre de valeurs différentes contenues dans une colonne.
Dim Li, Col, Buf1, Cpt1, CptLi, CptCol, I, J, K

'Si la colonne à analyser ne commence pas à la ligne 3 de la colonne 1,
'changer les valeurs de Li et Col ci-dessous.
'------- !!! ATTENTION !!!
'--- Il ne faut pas de cellule vide dans la ligne n° 3
'--- ni dans la colonne n°1 dans cet exemple
Li = 2 'N° de la ligne où la liste des valeurs à compter commence
Col = 4 'N° de la colonne où la liste des valeurs à compter commence

'Initialiser les variables
CptLi = 0
CptCol = 0
Cpt1 = 0

'------------------------------------------------------------------------
'--- S'il y a, par exemple une ligne pour le titre des colonnes
'--- et une seconde ligne pour séparer les titres des données, par exemple,
'--- alors les données commencent à la ligne 3 de la colonne 1
CptLi = 0
CptCol = 0
'--- Le raisonnement est le même s'il y a des nomls de lignes dans la 1° colonne
'--- Compter le nombre de lignes à analyser
For I = Li To 65535
If IsEmpty(ActiveSheet.Cells(I, Col)) = False Then
CptLi = CptLi + 1
Else
Exit For
End If
Next I
'--- Compter le nombre de colonnes à analyser
For J = Col To 65535
If IsEmpty(ActiveSheet.Cells(Li, J)) = False Then
CptCol = CptCol + 1
Else
Exit For
End If
Next J
'-------------------------------------------------------------------------
'Trier l'ensemble des cellules par ordre croissant
'--- 'Sélection de la zone à trier par ordre croissant
ActiveSheet.Range(Cells(Li, Col), Cells((Li - 1) + CptLi, (Col - 1) + CptCol)).Select
'--- 'Trier la zone de cellules par ordre croissant
Selection.Sort Key1:=ActiveSheet.Cells(Li, Col), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'--- 'Se positionner sur une cellule
ActiveSheet.Cells(Li, Col).Select

'Compter le nombre de valeurs différentes contenues dans la colonne choisie
Buf1 = ActiveSheet.Cells(Li, Col).Value
Cpt1 = 1
For K = Li To (Li - 1) + CptLi 'Lire chaque cellule de la colonne
'--- 'Si une valeur différente de la précédante dans la cellule visitée
If ActiveSheet.Cells(K, Col) <> Buf1 Then
Cpt1 = Cpt1 + 1 'Incrémenter le compteur
Buf1 = ActiveSheet.Cells(K, Col).Value
End If
Next K

'ActiveSheet.Cells(K, Col).Value = Cpt1 'Récupère le nombre de valeurs différentes

TheFile = "C:\Users\Fahmi\Desktop\Majdi\prjt\Nouv\leoni.txt"
Open TheFile For Output As #1
TheText = ""
TheText = Cpt1
'TheText = Cells(K, Col)

Print #1, TheText
Close
End Sub


fichier .vbs :

Option Explicit

On Error Resume Next
ExcelMacroExample
Sub ExcelMacroExample()
Dim xlApp
Dim xlBook

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\Users\Fahmi\Desktop\Majdi\prjt\Nouv\monfichier.xlsm", 0, True)
xlApp.Run "CptDiffVal"
xlApp.SaveAs
xlApp.ActiveWorkbook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlApp = Nothing

End Sub

Quelqu'un peut m'aider SVP
 

Staple1600

XLDnaute Barbatruc
Re : Fichier CSV

Bonsoir à tous

MajISh
[highlight][Bienvenue sur le forum][/code]
Peux-tu tester ta macro à ma sauce et me dire si tu obtiens le même résultat dans le fichier texte qu'avec ta macro initiale ?
VB:
Sub CptDiffValBIS()
'Compte le nombre de valeurs différentes contenues dans une colonne.
Dim Li&, Col&, Cpt1&, CptLi&, a As Range, b As Range, TheFile$, TheText$
Li = 1: Col = 4
'--- Compter le nombre de lignes à analyser
CptLi = ActiveSheet.Cells(Rows.Count, Col).End(xlUp).Row
'Compter le nombre de valeurs différentes contenues dans la colonne choisie
Set a = ActiveSheet.Range(Cells(Li, Col), Cells(CptLi, Col))
Set b = ActiveSheet.Cells(1, Columns.Count): b.Clear
a.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=b, Unique:=True
Cpt1 = Application.CountA(b.CurrentRegion) - 1
TheFile = "C:\Temp\leoni.txt"
TheText = Cpt1
Open TheFile For Output As #1
Print #1, TheText
Close
End Sub
NB: Utilises les balises BBCODE pour rendre ton message plus agréable à lire
(voir explications dans ma signature)
 

Staple1600

XLDnaute Barbatruc
Re : Fichier CSV

Suite...

Pendant que la soupe réfroidit, une version plus simple et paramétrable ;)
Code:
Sub CompteDiff()
CptDiffVal_TER 4, "C:\Temp\toto.txt"
End Sub
Code:
Private Sub CptDiffVal_TER(NCol&, Optional TheFile$ = "C:\Temp\leoni.txt")
Dim t, Cpt1
t = ActiveSheet.Range(Cells(2, NCol), Cells(Rows.Count, NCol).End(3)).Value
With CreateObject("scripting.dictionary")
    For Each x In t
    y = .Item(x)
    Next: Cpt1 = .Count
End With
Open TheFile For Output As #1
Print #1, CStr(Cpt1)
Close
End Sub
 

MajIsh

XLDnaute Nouveau
Re : Fichier CSV

Bonjouur JM :)

Excusez moi pour ce retard et merci pour votre aide..
Je veut un peu avancer en exploitant l'idée du listbox :p peut tu m'aider pour extraire les données d'in fichier excel sur une listbox ??

Le fichier suivant explique ma demande Ce lien n'existe plus

Je veut savoir par exemple le 31/01/2015 entre 06h10 et 08h le groupe G233-1 qu'est ce qu'il a travaillé : programme (04L 972 627 AN par exemple), Tabella (TAB 009 834 B), quantité*.

* : le calcul de la quantité se fait en calculant les identifiants uniques en faisant attention au doublons :roll: ! La colonne Identifiant unique contient des doublons parce que à chaque détection d'un défaut ce dernier doit être mentionné avec l'identifiant du produit donc on répète le même identifiant plusieurs fois.

Je suis bloqué et j'ai besoin de votre aide SVP
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin