Comparer plusieurs fichiers excel et déterminer les lignes identique [Résolu]

Signaler
-
 naiik -
Bonjour

J'ai besoin de comparer plusieurs fichier Excel pour voir si les mêmes postes reviennent régulièrement.

Toutes les informations sont entrer en dur dans le fichier excel, dans la colonne A
Ex pour la cellule A2:
W1184032,11/03/13 14:54:29,"Type du SE:Windows XP,Plate-forme de SE:Professional,Version du SE:5.1,Version de Service Pack du SE:Service Pack 3",4.6.0.1694,8.8.0.849.Wrk,5400.1158,10.148.4.18,6968.0000

Toutes les autres ligne sont du meme genre.

Il faudrait que je puisse obtenir le nombre de poste identique déterminer par une @IP

Et ensuite suivant leurs @IP determiné la date la plus ancienne du poste et la date la plus recente ou ils apparaissent

Pouvez vous m'aidez ?

4 réponses

Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

Désoler pour délai mais j'ai pas mal de choses à faire de mon coté.
Néanmoins voila un exemple (en faite j'ai presque tout est fait ;) ) :
La fonction "principale" est "Traitement"

Option Explicit
'Le format dans le quel sera afficher tes date heures au bout du compte
Private Const CoSt_FormatDateAttendu = "YYYY-MM-DD HH:mm:SS"

'Extrais la date de tes lignes (si le format est exactement celui que tu à posté)
Private Function ExtraiDate(ByVal Texte As String) As Date
    On Error GoTo ErreurExtraiDate
    ExtraiDate = Split(Texte, ",")(1)
    Exit Function
ErreurExtraiDate:
    ExtraiDate = 0
End Function

'Idem pour l'IP
Private Function ExtraiIP(ByVal Texte As String) As String
    On Error GoTo ErreurExtraiIP
    ExtraiIP = Mid(Texte, InStrRev(Texte, ",", InStrRev(Texte, ",") - 1) + 1, Len(Texte) - InStrRev(Texte, ",") + 1)
    Exit Function
ErreurExtraiIP:
    ExtraiIP = vbNullString
End Function

'Ajoute a une collection les info envoyé 
Private Sub AjouteCollection(ByRef MaCollection As Collection, Valeur As String, Clef As String)
    On Error GoTo ItemExiste
    MaCollection.Add Clef & "|" & Valeur, Clef
    Exit Sub
ItemExiste:
    Dim NouvelleValeur As String
    NouvelleValeur = MaCollection.Item(Clef) & "|" & Valeur
    MaCollection.Remove Clef
    MaCollection.Add NouvelleValeur, Clef
End Sub

Public Sub Traitement()
    Dim CompteurLigne As Long
    Dim DateLigne As Date
    Dim IPLigne As String
    Dim MaCollection As New Collection
    Dim TableauTexte() As String
    Dim CompteurTableau As Long
    '"With ActiveSheet" veux dire que tu vas travailé sur la feuille active
    With ActiveSheet
        'Une ligne de titre est présente si non met 1 (pour 1ere ligne ^^)
        CompteurLigne = 2
        Do While .Cells(CompteurLigne, 1).Text <> ""
            'Extraction la date
            DateLigne = ExtraiDate(.Cells(CompteurLigne, 1).Text)
            'Extraction de l'IP
            IPLigne = ExtraiIP(.Cells(CompteurLigne, 1).Text)
            'Si pas d'erreur durant l'extraction
            If DateLigne <> 0 And IPLigne <> vbNullString Then
                AjouteCollection MaCollection, Format(DateLigne, CoSt_FormatDateAttendu), IPLigne
            Else
                'Ici ajoute le code a exécuter si une de tes extraction ne c'est pas fait correctement
            End If
            CompteurLigne = CompteurLigne + 1
        Loop
    End With
    'Arriver ici ta collection est remplie avec toutes tes informations
    Do While MaCollection.Count > 0
        'Chargement et découpage des données de ta collection
        TableauTexte = Split(MaCollection.Item(1), "|")
        'Suppression des données de ta collection
        MaCollection.Remove 1
        'Affiche les données dans la fenêtre de débug
        Debug.Print "Voila l'IP : " & TableauTexte(0)
        Debug.Print "Voila toutes les date heures de cette IP : "
        For CompteurTableau = 1 To UBound(TableauTexte)
            Debug.Print TableauTexte(CompteurTableau)
        Next
    Loop
End Sub


Habituellement je ne fait pas tout comme ça mais bref je n'ai pas le temps de polémiquer

Amicalement
PS :
Je n'en ferais pas plus, j'ai déjà fait presque tout ton code là
Pense à valider la réponse si tout vas bien
Recherches sur Google = émission de CO²
Recherches sur Forestle = 0,1 m² de forêt tropicale préservé.
Surfez écolo
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

Bonjour,

Pour faire ce que tu veux tu doit :
Être capable d'extraire une IP de tes lignes
InStrRev pourras te renvoyé la position de certains caractère à partir d'un certain caractère et en partant de la fin.
Mid te permet de découper une chaine

Vue la structure de test ligne, logiquement ça devrais te retourné l'IP :
mid(texte,InStrRev(texte,",",InStrRev(texte,",")-1)+1,len(texte)-InStrRev(texte,",")+1)

Concernant la date heure en début de ligne utilise plutôt InStr mais le principe reste le même.

Ensuite il faut que tu sache si un IP à déjà été trouvé ou non.
Une Fonction du reçois l'IP et la date sous forme de texte, et l'ajoute dans une collection doit pouvoir te faire ça.
Attention il vas falloir gérer les erreurs car si tu tente d'ajouter un élément avec un clef déjà existante une erreur survient (mais cela te permet de savoir que l'IP existe déjà dans ta collection, donc ce n'est pas forcément négatif
Dans ce cas tu ajoute la date heure dans ta collection :
Private Sub AjouteCollection(ByRef MaCollection As Collection, DateHeure As String, IP As String)
    On Error GoTo ItemExiste
    MaCollection.Add DateHeure, IP
    Exit Sub
ItemExiste:
    MaCollection.Item(IP) = MaCollection.Item(IP) & "|" & DateHeure
End Sub


Une fois que tu auras envoyé toutes ces infos dans ta collection il faut que tu parcours tout les éléments de ta collection. Pour chacun de tes élément (IP) tu cherche la plus petite et la plus grande date (La fonction AjouteCollection à séparé toute tes date-heures par des |, la fonction Split te permet de redécouper facilement ces chaines : Split(ElementDeLaCollection,"|")

Reste à déterminer quel date est la plus petite et la quel est la plus grande (et le nombre de date) pour que tu ai toutes les infos en main

Bon courage

Amicalement
Recherches sur Google = émission de CO²
Recherches sur Forestle = 0,1 m² de forêt tropicale préservé.
Surfez écolo
Merci pour toutes ces précisions

Mais je n'y arrive vraiment pas..
merci c'est nickel !