Nettoyage fichier excel

Fermé
Leelette Messages postés 4 Date d'inscription vendredi 14 juin 2013 Statut Membre Dernière intervention 14 juin 2013 - 14 juin 2013 à 10:34
Leelette Messages postés 4 Date d'inscription vendredi 14 juin 2013 Statut Membre Dernière intervention 14 juin 2013 - 14 juin 2013 à 14:51
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
A voir également:

6 réponses

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
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
Leelette Messages postés 4 Date d'inscription vendredi 14 juin 2013 Statut Membre Dernière intervention 14 juin 2013
14 juin 2013 à 11:08
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
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
14 juin 2013 à 11:11
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Leelette Messages postés 4 Date d'inscription vendredi 14 juin 2013 Statut Membre Dernière intervention 14 juin 2013
14 juin 2013 à 11:16
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
Leelette Messages postés 4 Date d'inscription vendredi 14 juin 2013 Statut Membre Dernière intervention 14 juin 2013
14 juin 2013 à 14:51
Excellent, merci infiniment pour votre aide.

Bonne fin de journée


Leelette
0