Microsoft 365 Problème pour traiter un fichier csv

Did95

XLDnaute Nouveau
Bonsoir,
toutes les semaines je dois analyser les entrées journalières de parking.
Je souhaiterai savoir si il y a un moyen d'automatiser la transformation du fichier csv vers excel?

Les log indiquent les jours et heures de personnes qui passent la porte,
j'ai besoin de ressortir les noms et si ils sont passés une fois par jour, actuellement si la personne badge 3 fois cela me compte trois.
Pour remédier a ce problème, je suis obligé de modifier la date en précisant uniquement le jour, puis je passe par supprimer les doublons et enfin un tableau croisé.

si vous penser avoir un solution je pourrai vous fournir un fichier csv de test.

Merci d'avance pour vos réponses
Didier
 
Solution
Re,

Ce fichier est bon

voici une requête Power Query qui reprends vos données. Pour le reste il faut détailler ce que vous voulez exactement. La requête ajoute une colonne 'Jour'

Changez le chemin du fichier dans l'étape source de la requête.

Difficile avec une seule ligne de données de faire une démonstration mais vous pouvez faire vos propre transformation dans power query

Cordialement

@Staple1600 : oui j'ai testé le fichier d'origine avec pleins de page de codes possibles.

Did95

XLDnaute Nouveau
@Did95 Merci pour l'info
Mais ca se corse
Lequel choisir ?
;)
alors, je ne sais pas quel model est installé,
je n'ai accès qu'a la page web pour administrer mes occupants et exporter les log.

Pour la question des accents cela ne gêne en rien l'export.

la façon A fonctionne bien ainsi que le power query de @Hasco.

Une fois l'export fait il me reste a faire un tableau de passage par jour, mais à part supprimer les doublons des utilisateurs je n'arrive pas à ne les compter qu'une fois par jour.
 

job75

XLDnaute Barbatruc
Bonjour Did95, JM, Hasco, patricktoulon,
ce que je veux eviter c'est que si la personne passe trois dans la journée je ne veux la compter qu'une seule fois.
Placez les 2 fichiers zippés joints dans le même dossier.

Je traite le fichier CSV du post #10 avec 2 dates et 2 prénoms-noms, la macro du fichier Calcul.xlsm :
VB:
Private Sub CommandButton1_Click()
Dim fichier$, d As Object, x%, y$, s, dat As Variant, z$, i&, n&, a(), b()
fichier = ThisWorkbook.Path & "\test export.csv"
Set d = CreateObject("Scripting.Dictionary")
x = FreeFile
Open fichier For Input As #x 'ouverture en lecture séquentielle
While Not EOF(x)
    Line Input #x, y 'récupère la ligne
    y = Replace(y, """,""", ";") 'pour avoir le point-virgule à gauche du nom
    y = Replace(y, """,", ";") 'pour avoir le point-virgule à droite du nom
    s = Split(y, ";")
    dat = Mid(s(0), 2, 10)
    If IsDate(dat) Then
        dat = CDate(dat)
        z = Chr(1) & s(3) & Chr(1) 'nom encadré
        If d.exists(dat) Then
            i = d(dat) 'récupère la ligne
            If InStr(a(3, i), z) = 0 Then
                a(2, i) = a(2, i) + 1 'comptage
                a(3, i) = a(3, i) & z
            End If
        Else
            n = n + 1
            d(dat) = n 'mémorise la ligne
            ReDim Preserve a(1 To 3, 1 To n)
            a(1, n) = dat
            a(2, n) = 1
            a(3, n) = z
        End If
    End If
Wend
Close #x
'---transposition---
If n Then
    ReDim b(1 To n, 1 To 2)
    For i = 1 To n
        b(i, 1) = a(1, i)
        b(i, 2) = a(2, i)
    Next
End If
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de destination
    If n Then .Resize(n, 2) = b
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 2).ClearContents 'RAZ en dessous
End With
End Sub
A+
 

Pièces jointes

  • Dossier.zip
    20.1 KB · Affichages: 6

Did95

XLDnaute Nouveau
Re

Et quels sont les possibilités d'export ?
Uniquement du CSV ?

Tu pourrais joindre une copie d'écran anonymisée de ta page web ?
Merci.
Oui uniquement du csv et aucun choix possible


mais l'export fonctionne avec la version A, maintenant je vais créer un bouton et voir comment ajouter les log chaque semaine.
Par contre si tu une ideé pour traiter les doublons directement dans un tableau ou de pouvoir dire si le beneficiary 1 passe trois aujourd'hui je ne le compte qu'une fois.

Mais déjà un grand merci pour lextraction direct.
 

patricktoulon

XLDnaute Barbatruc
re
question c'est quoi site,site à la fin de ton fichier ?
ça fait parti d'une ligne ou c'est a excepter dans la lecture
1666809974590.png


la fin de l’entête de colonne c'est bien "Tenant" ???
 

dysorthographie

XLDnaute Accro
Bonsoir,
Ce n'est pas de l'UTF8, je n'ai pas trouvé ce que c'est!
VB:
Sub test()
PressePapier = Replace(Replace(OuvrirFichier(ThisWorkbook.Path & "\export test.csv"), Chr(34), ""), ",", vbTab)
ActiveCell.PasteSpecial xlPasteAll
End Sub
'retourne un fichier texte sous forme de tableau
Private Function OuvrirFichier(Fichier)
Set oFs = CreateObject("Scripting.FileSystemObject")
Set oFile = oFs.OpenTextFile(Fichier)
OuvrirFichier = oFile.ReadAll
oFile.Close
End Function
Public Function ClearPressePapier()
With CreateObject("htmlfile").parentwindow.clipboardData.clearData("Text"): End With
End Function
Public Property Let PressePapier(valeur)
With CreateObject("htmlfile").parentwindow.clipboardData.setData("Text", valeur): End With
End Property

Public Property Get PressePapier()
PressePapier = CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT")
End Property

Merci Patrick pour le presse papier
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonsoir Robert
et oui en html j'aurais du y penser c'est vrai que le passage du texte dans le clip de l'object html fait un peu le ménage déjà
j'avais oublié merci robert pour le rappel

c'est vrai que c'est tout de suite plus simple à travailler
VB:
Sub testQ()
    PressePapier = Replace(Replace(OuvrirFichier(ThisWorkbook.Path & "\export test.csv"), Chr(34), ""), ",", vbTab)
    With ActiveSheet
        .UsedRange.Clear
        .Cells(1).PasteSpecial xlPasteAll
        .UsedRange.Cells.Replace "é", "é"
        .UsedRange.EntireColumn.AutoFit
        .Cells(1).Select
    End With
End Sub

ensuite un removeduplicate et terminé
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Did95, le forum,

La macro de mon post #23 prend beaucoup trop de temps sur un grand tableau : 125 secondes chez moi pour 1 date avec 100 000 noms [Edit| différents.

Prenez cette macro qui utilise 2 Dictionary :
VB:
Private Sub CommandButton1_Click()
Dim fichier$, d As Object, dd As Object, x%, y$, s, dat As Variant, n&, a(), b(), i&, j&
fichier = ThisWorkbook.Path & "\test export.csv"
Set d = CreateObject("Scripting.Dictionary")
Set dd = CreateObject("Scripting.Dictionary")
x = FreeFile
Open fichier For Input As #x 'ouverture en lecture séquentielle
While Not EOF(x)
    Line Input #x, y 'récupère la ligne
    y = Replace(y, """,""", ";") 'pour avoir le point-virgule à gauche du nom
    y = Replace(y, """,", ";") 'pour avoir le point-virgule à droite du nom
    s = Split(y, ";")
    dat = Mid(s(0), 2, 10)
    If IsDate(dat) Then
        dat = CDate(dat)
        If Not d.exists(dat) Then
            n = n + 1
            d(dat) = n 'mémorise la ligne
            ReDim Preserve a(1 To 2, 1 To n)
            a(1, n) = dat
        End If
        dd(dat & s(3)) = ""
    End If
Wend
Close #x
If n Then
    '---complète le tableau a---
    b = dd.keys
    For i = 0 To UBound(b)
        j = d(CDate(Left(b(i), 10))) 'récupère la ligne
        a(2, j) = a(2, j) + 1 'comptage
    Next
    '---transposition---
    ReDim b(1 To n, 1 To 2)
    For i = 1 To n
        b(i, 1) = a(1, i)
        b(i, 2) = a(2, i)
    Next
End If
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de destination
    If n Then .Resize(n, 2) = b
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 2).ClearContents 'RAZ en dessous
End With
End Sub
Avec 100 000 noms différents elle s'exécute en 1,6 seconde.

A+
 

Pièces jointes

  • Dossier(1).zip
    22.9 KB · Affichages: 7
Dernière édition:

Discussions similaires

Réponses
10
Affichages
469

Statistiques des forums

Discussions
314 738
Messages
2 112 339
Membres
111 513
dernier inscrit
jeanmarty