Nettoyage fichier excel

Leelette Messages postés 4 Statut Membre -  
Leelette Messages postés 4 Statut Membre -
Bonjour,

j'ai besoin de "purger" les lignes d'un fichier excel comprenant des historiques de salariés.
Mon extraction comprend environ 1000 matricules et x lignes par matricule avec des notions de date début et date fin avec un montant de prime allouée. Malheureusement cette extraction est issue d'un outil de paie qui génére une occurence sur toutes les variables de paie même si une seule d'entre elles est changée.
Je dois nettoyer mon extraction pour obtenir pour chaque matricule de salarié (colonne A) les seuls changements opérés pour une variable donnée situé en colonne D, les dates début et fin étant respectivement en colonne E et F.
Ex

Matricule Nom Prénom Prime d'objectif Date début Date fin
10201 XXXX xxxx 0 21/05/1990 30/06/2002
10201 XXXX xxxx 0 01/07/2002 31/07/2002
10201 XXXX xxxx 0 01/08/2002 30/06/2003
10201 XXXX xxxx 0 01/07/2003 31/08/2003
10201 XXXX xxxx 305 01/09/2003 30/04/2004
10201 XXXX xxxx 305 01/05/2004 31/07/2004
10201 XXXX xxxx 305 01/08/2004 31/12/2004
10201 XXXX xxxx 0 01/01/2005 31/01/2005
10201 XXXX xxxx 305 01/02/2005 31/05/2005
10201 XXXX xxxx 305 01/06/2005 31/12/2005
10201 XXXX xxxx 0 01/01/2006 28/02/2006
10201 XXXX xxxx 305 01/03/2006 31/05/2006
10201 XXXX xxxx 305 01/06/2006 31/12/2006
10201 XXXX xxxx 0 01/01/2007 31/01/2007
10201 XXXX xxxx 305 01/02/2007 31/05/2007
10201 XXXX xxxx 305 01/06/2007 31/08/2007
10201 XXXX xxxx 675 01/09/2007 31/12/2007
10201 XXXX xxxx 0 01/01/2008 31/01/2008
10201 XXXX xxxx 675 01/02/2008 30/04/2008
10201 XXXX xxxx 750 01/05/2008 30/06/2009
10201 XXXX xxxx 750 01/07/2009 ø

Doit devenir

Matricule Nom Prénom Prime d'objectif Date début Date fin
10201 XXXX xxxx 305 01/09/2003 31/08/2007
10201 XXXX xxxx 675 01/09/2007 30/04/2008
10201 XXXX xxxx 750 01/05/2008

Avez vous une idée ?

Merci pour votre aide

Leelette

6 réponses

  1. WeaponEDGE
     
    Re Bonjour,

    Normalement le code suivant devrait obtenir le résultat souhaité :

    Sub Fltrage_Donnees()
    Sht1 = ActiveSheet.Name
    Sht2 = "Resultat_Macro"
    Sheets.Add
    ActiveSheet.Name = Sht2
    Sheets(Sht2).Cells(1, 1) = "Matricule"
    Sheets(Sht2).Cells(1, 2) = "Nom"
    Sheets(Sht2).Cells(1, 3) = "Prénom"
    Sheets(Sht2).Cells(1, 4) = "Prime d 'objectif"
    Sheets(Sht2).Cells(1, 5) = "Date début"
    Sheets(Sht2).Cells(1, 6) = "Date fin"

    Sheets(Sht1).Select

    Nb_Ligne = Sheets(Sht1).Cells(65536, 1).End(xlUp).Row

    x = 2
    For i = 2 To Nb_Ligne
    If Sheets(Sht1).Cells(i, 7) <> "x" Then
    Sheets(Sht1).Cells(i, 7) = "x"
    Ref_Matricule = Sheets(Sht1).Cells(i, 1)
    Ref_NOM = Sheets(Sht1).Cells(i, 2)
    Ref_Prenom = Sheets(Sht1).Cells(i, 3)
    Ref_Prime = Sheets(Sht1).Cells(i, 4)
    Ref_Date_D = Sheets(Sht1).Cells(i, 5)
    Ref_Date_F = Sheets(Sht1).Cells(i, 6)

    If Ref_Prime <> 0 Then
    For u = i + 1 To Nb_Ligne
    If Sheets(Sht1).Cells(u, 7) <> "x" Then
    Ref_Mat = Sheets(Sht1).Cells(u, 1)
    Ref_Pri = Sheets(Sht1).Cells(u, 4)
    Ref_DD = Sheets(Sht1).Cells(u, 5)
    Ref_DF = Sheets(Sht1).Cells(u, 6)

    If Ref_Matricule = Ref_Mat And Ref_Prime = Ref_Pri Then
    Sheets(Sht1).Cells(u, 7) = "x"
    If Ref_Date_D > Ref_DD Then
    Ref_Date_D = Ref_DD
    End If
    If Ref_Date_F < Ref_DF Then
    Ref_Date_F = Ref_DF
    End If
    End If
    End If
    Next u
    Else
    GoTo Suite
    End If
    Else
    GoTo Suite
    End If

    Sheets(Sht2).Select
    Sheets(Sht2).Cells(x, 1) = Ref_Matricule
    Sheets(Sht2).Cells(x, 2) = Ref_NOM
    Sheets(Sht2).Cells(x, 3) = Ref_Prenom
    Sheets(Sht2).Cells(x, 4) = Ref_Prime
    Sheets(Sht2).Cells(x, 5) = Ref_Date_D
    Sheets(Sht2).Cells(x, 6) = Ref_Date_F
    x = x + 1
    Sheets(Sht1).Select
    Suite:
    Next i
    Sheets(Sht1).Columns(7).ClearContents
    End Sub

    Le résultat est obtenu dans une autre feuille renommé "Resultat_Macro"
    1
  2. WeaponEDGE
     
    Bonjour,

    Ok, Si j'ai bien compris la logique :

    Pour chaque Matricule et pour chaque montant de prime :
    Il faut faire ressortir la Date de Début la plus ancienne
    et la Date de Fin la plus éloigné.

    Et si le Montant de Prime = 0 on ignore les données ?

    C'est bien ça ?

    WeaponEDGE
    0
  3. Leelette Messages postés 4 Statut Membre
     
    Bonjour,

    Oui, et si pour un matricule il y a augmentation de la prime, j'ai besoin pour chaque montant de prime de la date à laquelle ce montant a été attribué et jusqu'à quelle date il l'a été.
    Je dois en fait reconstituer les carrières de mes salariés, donc cette problématique, je vais l'avoir pour des montants, pour des titres...

    Merci

    Leelette
    0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Pour avoir une idée du problème, est ce que ça doit ressembler à ça?
    https://www.cjoint.com/?3FolkgJm09x
    Le résultat sera envoyé dans une autre feuille
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Leelette Messages postés 4 Statut Membre
     
    Oui, mais il faut ignorer quand la valeur est égale à zéro ou vide pour la variable en colonne D.

    Ci-dessous correction de votre résultat :

    10202 XXXX2 xxxx2 315 01/09/2003 31/01/2005
    10202 XXXX2 xxxx2 350 01/02/2005 31/05/2006
    10202 XXXX2 xxxx2 450 01/06/2006 31/05/2007
    10202 XXXX2 xxxx2 500 01/06/2007 31/08/2007
    10202 XXXX2 xxxx2 675 01/09/2007 30/04/2008
    10202 XXXX2 xxxx2 750 01/05/2008
    0
  7. Leelette Messages postés 4 Statut Membre
     
    Excellent, merci infiniment pour votre aide.

    Bonne fin de journée

    Leelette
    0