Votre avis et de vos conseil

Bonjour le forum

J'ai besoin de votre avis et de vos conseil.

Je gere le controle d'accés de plusieurs entité qui comporte plusieurs employer

Nous créons pour chaque employer un badge d'accés qui a un numero unique.(exemple :44525654)

j'ai créer un fichier excel dans lesquel j'importe les extraction des badges utiliser tout les jours (le fichier est nommer a la date du jour exemple 22-06-2020.txt .

Dans ce meme fichier j'ai la base de donné (la base comprend TOUT les badges actif)

ainsi q'un fichier RECAP qui regroupe les badges utilisé.

puis dans ce meme fichier(RECAP) je supprime les doublons ( en effet l'extraction d'une journée comporte deja environ 300000 lignes.

voici ma question :

comment faire pour connaitre la derniere fois que le badge a été utiliser.

Merci de votre aide.

Bonjour,

voici ma question :

comment faire pour connaitre la derniere fois que le badge a été utiliser.

Pour commencer, nous fournir un aperçu dudit fichier... Nous ne sommes pas devins !

Bonjour,

As-tu la possibilité de télécharger et d'installer Power Query ?

Cdlt.

Bonjour Pedro22 et Jean-Eric

Predro22

Pour commencer, nous fournir un aperçu dudit fichier... Nous ne sommes pas devins !

c'est ce que je fait habituellement mais la c'est compliquer au vu des données confidentiel et du poid du fichier.

a l'heure actuel j'ai 54 onglets .

Jean-Eric

As-tu la possibilité de télécharger et d'installer Power Query ?

je pense que cela doit etre possible

Bonjour à tous

puis dans ce meme fichier(RECAP) je supprime les doublons ( en effet l'extraction d'une journée comporte deja environ 300000 lignes.

comment faire pour connaitre la derniere fois que le badge a été utiliser.

Tu peux faire un TCD avec un tri décroissant sur les dates et un filtre pour n'en conserver qu'une seule

Si besoin, fais juste un extrait du fichier avec quelques matricules, des noms bidons et des dates.

Re bonjour

voici un extrait du fichier si cela peux aider

Merci

Re,

Ce n'est pas une réponse valide.

je pense que cela doit etre possible

Peux-tu joindre un ou 2 txt ?

Cdlt.

RE

Jean-Eric

Peux-tu joindre un ou 2 txt ?

Non je ne peux pascomme je le disait ce son des fichier confidentiel

Steelson le TCD ne convient pas car dans le fichier recap

44507033 SERGE 19/06/20 a bien utiliser son badge mais la derniere utilisation est le 22/06 en effet dans le fichier recap les doblon sont supprimer donc si 44507033 existe deja il est supprimer.

Pourquoi dans la suppression ds doublons ne pas conserver la plus récent ?

Re,

Bonjour Steelson,

Peut-être parce que les données ne sont triées correctement.

Excel conserve le premier enregistrement.

Cdlt.

Steelson le TCD ne convient pas car dans le fichier recap

44507033 SERGE 19/06/20 a bien utiliser son badge mais la derniere utilisation est le 22/06 en effet dans le fichier recap les doblon sont supprimer donc si 44507033 existe deja il est supprimer.

Dans ce cas, modifie ta macro doublons comme suit

Sub DOUBLON()
'
' DOUBLON Macro
'
'
    Cells.Select
    Application.CutCopyMode = False
    derL = Range("J" & Rows.Count).End(xlUp).Row

    For i = 2 To derL
        Cells(i, "L") = DateValue(Cells(i, "A"))
    Next

    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Add Key:=Range("L2:L" & derL), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("RECAP").Sort
        .SetRange Range("A1:L" & derL)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    ActiveSheet.Range("$A$1:$L$" & derL).RemoveDuplicates Columns:=7, Header:=xlNo
    Range("A1").Select
    Sheets("accueil").Select
    MsgBox "Import Terminer"
    'Call MASQUER

End Sub

Re bonjour

Je teste cela et revient vers vous.

Merci

Peux-tu joindre un ou 2 txt ?

Cdlt.

@Jean-Eric

Pas sûr que ce soit exactement le format ... mais cela s'approche

119-06-2020.txt (1.30 Ko)
022-06-2020.txt (1.86 Ko)

Bonjour Steelson

c'est parfait

Toutefois j'ai un petit souci que je n'avait pas vu avant .

quand j'importe les badges accépté, la date est incorecte j'ai 01/06/2020 00:35 au lieu de 06/01/2020 00:35.

idem pour le 12/06/2020 07:39 il m'indique 06/12/2020 07:39

aprés le 12 de n'importe quel mois c'est ok

Pourtant quand j'ouvre le fichier a la main la date est correct.

Mais deja un gros merci

Il faut modifier ton import pour ne pas laisser excel interpréter les dates comme des dates "US" quand cela l'arrange, c'est-à-dire quand le premier terme qui devrait être le jour est inférieur ou égal à 12 !

Re

Le probleme est que je ne sait pas comment forcer la date dans la Colonne A .

j'ai essayer ceci

Range("A" & Rows.Count).End(xlUp) = Format(Date, "dd.mm.yyyy hh:mm")

Mais cela ne change rien

voici ma Macro

Sub Importer()

    Application.ScreenUpdating = False

    Set monWB = ActiveWorkbook
    ChDrive "E:"    ' Choix du lecteur

    ChDir "E:\suivi badge 2020\EXTRACTION"

    w = Application.GetOpenFilename(, , , , True)
    For i = 1 To UBound(w)
        Workbooks.Open (w(i))
            Set wb = ActiveWorkbook
            For Each f In wb.Worksheets
                f.Cells.Copy
                monWB.Sheets.Add After:=monWB.Sheets(monWB.Sheets.Count)
               Range("A" & Rows.Count).End(xlUp) = Format(Date, "dd.mm.yyyy hh:mm")
                monWB.Activate

                ActiveSheet.Name = f.Name
                Range("A1").Select
                ActiveSheet.Paste
                Range("J1:J" & Range("A" & Rows.Count).End(xlUp).Row) = wb.Name
                Range("A1").Select
            Next f
        Application.CutCopyMode = False
        wb.Close False
    Next i
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp

    Range("A2").Select
        Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RECAP").Select
    Range("A65000").End(xlUp).Offset(1).Select
    ActiveSheet.Paste
    Call DOUBLON

Exit Sub

End Sub

si tu sait je suis prenneur.

Merci

Il y a 4 solutions ...

  • celle de Jean-Eric avec PowerQ
  • celle qui consisterait à ce que tes données issues du logiciel amont comportent des caractères qui forcent l'importation en texte, c'est ce que font les logiciels "intelligents" qui font râler les exceliens, mais c'est une solution propre; il peut y avoir dans ce cas un espace devant et/ou derrière la date, voire quelque chose comme "23/06/2020 (d/m/y)"
  • celle consistant à importer non plus globalement le contenu, mais en détaillant chaque valeur et en ajoutant une apostrophe devant les dates, exemple ici avec colonne A (j=0)
    Sub lire()
    
        Fichier = Application.GetOpenFilename("Fichiers csv, *.csv")
        If Fichier = False Then Exit Sub
    
        N = FreeFile
        Open Fichier For Input As #N
    
        i = 0
        Do While Not EOF(1)
            Line Input #N, Contenu
            i = i + 1
    
            Table = Split(Contenu, ",")
            For j = 0 To UBound(Table)
                Cells(i, j + 1).Value = IIf(j = 0, "'", "") & Replace(Table(j), """", "")
            Next j
    
        Loop
    
        Close #N
    
    End Sub
  • et une solution à la con qui peut te dépanner aujourd'hui ! ça, je sais faire "rapidement" sans fichier texte amont

Solution immédiate "à la con"

Pour faire mieux, il faudrait un extrait de tes fichiers texte avec des dates avant le 12 du mois

Sub DOUBLON()
'
' DOUBLON Macro
'
'
    Cells.Select
    Application.CutCopyMode = False
    derL = Range("J" & Rows.Count).End(xlUp).Row

    For i = 2 To derL
        If Val(Left(Cells(i, "A"), 2)) <= 12 Then
            Cells(i, "L") = DateValue(Mid(Cells(i, "A"), 4, 2) & "/" & Mid(Cells(i, "A"), 1, 2) & "/" & Mid(Cells(i, "A"), 7, 13))
        Else
            Cells(i, "L") = DateValue(Cells(i, "A"))
        End If
    Next

    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Add Key:=Range("L2:L" & derL), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("RECAP").Sort
        .SetRange Range("A1:L" & derL)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    ActiveSheet.Range("$A$1:$L$" & derL).RemoveDuplicates Columns:=7, Header:=xlNo
    Range("A1").Select
    Sheets("accueil").Select
    MsgBox "Import Terminer"
    'Call MASQUER

End Sub

re

et une solution à la con qui peut te dépanner aujourd'hui ! ça, je sais faire "rapidement" sans fichier texte amont

ok et c'est quoi je prend pour aujourd'hui.

Rechercher des sujets similaires à "avis conseil"