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
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
A voir également:
- Nettoyage fichier excel
- Fichier rar - Guide
- Nettoyage mac - Guide
- Liste déroulante excel - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
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"
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"
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
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
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
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
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
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
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
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
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
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
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
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
14 juin 2013 à 14:51
Excellent, merci infiniment pour votre aide.
Bonne fin de journée
Leelette
Bonne fin de journée
Leelette