suppression de redondances

  • Initiateur de la discussion MaTeO
  • Date de début
M

MaTeO

Guest
Bonjour,

Je suis confronté à un problème que je ne pense pas solutionnable directement avec Excel, donc besoin de VB.

Je recois un fichier csv qui contient diverse information en fonction de date.
par exemple a la date t j ai 3 lignes identiques et je ne voudrais garder que la derniere.Je m explique avec un exemple ce sera plus simple

Source originale(importé en colonne dans excel)

10/06/04;Appli1;Bug1;Acorriger
10/06/04;Appli1;Bug1;Avalider
10/06/04;Appli1;Bug2;Acorriger
10/06/04;Appli1;Bug1;Corrigé
11/06/04;Appli2;Bug3;Acorriger
11/06/04;Appli1;Bug1;Misenprod

Résultat attendu

10/06/04;Appli1;Bug2;Acorriger
10/06/04;Appli1;Bug1;Corrigé
11/06/04;Appli2;Bug3;Acorriger
11/06/04;Appli1;Bug1;Misenprod

Donc en gros en fonction de la date il ne doit me rester que la derniere instance du bug (la ligne le plus vers le bas à la date t)


Si une personne a déja codé ca en VB ou a une solution pour le faire directement avec Excel je suis fortement preneur.

Merci d'avance :)

MaTeO.
 
C

chris

Guest
Bonjour
Ton exemple contredit tes propos piusque tu gardes le lignes concernant bug1.
Sinon hors VB, si tes données sont classées chronologiquement, tu peux ajouter une colonne et utililiser une fonction equiv pour repérer la date la plus élevée de chaque cas puis le filtre auto ou bien élabloré avec copie vers un autre emplacement pour ne garder que ces éléments.

en colonne D
=B2&C2

en colonne E
=SI(ESTNA(EQUIV(B2&C2;E3:E1000;0));"bingo";0)

et filtre sur "Bingo" (auto ou élaboré selon ce que tu veux faire après).

le filtrage et la copie vers un autre classeur ou la suppression des colonnes sources peut s'enregistrer dans une macro pour simplifier l'utilisation.

Chris
 
D

Dugenou

Guest
Chris, Mateo,

Chris en lisant la prose de mateo, je ne comprends pas la même chose que toi : il veut garder la dernière mention d'un bug pour chaque date.
Ceci dit le principe est le même : on garde pour chaque date la mention la plus élevée dans l'ordre : acorriger, corrigé, misenprod.

Ca me rappelle un ancien post sur lequel on avait déjà bossé en commun :

http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=81114&t=80759

Je pense que Mateo devrait y trouver son bonheur

a bientot
 
M

MaTeO

Guest
Bonjour,

Tout d'abord merci a Chris et Dugenou de s'être penché sur mon probleme.
Finalement je me suis cassé la tête et j ai réussi a faire mon petit VB :)

En gros je rappel le probleme le but était de conserver les dernieres instances d'un état en fonction de la date:

Ex

a 14 10/06/2004
b 15 10/06/2004
b 16 10/06/2004
b 17 10/06/2004
b 18 10/06/2004
b 19 10/06/2004
b 20 10/06/2004
a 21 10/06/2004
a 22 12/06/2004
b 23 12/06/2004
b 24 12/06/2004
a 25 12/06/2004


Resultat attendu

b 20 10/06/2004
a 21 10/06/2004
b 24 12/06/2004
a 25 12/06/2004



Pour cela voila un petit prog pour ceux qui en aurait besoin eventuellement

Sub test()

Dim i As Long
Dim j As Long
Dim k As Long
Dim col_type As String
Dim lig_type As String
Dim rng_type As String
Dim dte As String
Dim val As String
Dim cpt As Long

'colonne à traiter
col_type = "A"
For k = 1 To 10000 Step 1
'Ligne du début du tableau à traiter
i = 19
'Compteur indiquant le nombre de traitement réalisé
cpt = 1
While ActiveSheet.Cells(i, 1) <> ""
dte = ActiveSheet.Cells(i, 3)
j = i + 1
While dte = ActiveSheet.Cells(j, 3)
val = ActiveSheet.Cells(i, 1)
If val = ActiveSheet.Cells(j, 1) Then
lig_type = i
rng_type = col_type & lig_type
'ligne courante à supprimer
Range(rng_type).EntireRow.Delete
cpt = cpt + 1
Else
End If
j = j + 1
Wend
i = i + 1
Wend
Next k
End Sub

Voila!

Merci beaucoup et au plaisir!

MaTeO
 

Discussions similaires

Réponses
26
Affichages
2 K

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 779
Messages
2 092 047
Membres
105 168
dernier inscrit
makari69