Supprimer des lignes excel en fonction d'une valeur
balooooooooo
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
balooooooooo Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
balooooooooo Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je cherche une macro pour me débarrasser de lignes excel sous certaines conditions.
L'idée principale est de supprimer un certain nombre de lignes ayant des valeurs dupliquées dans la colonne A en fonction de la valeur d'une autre cellule (son maximum).
Pour être plus précis voici un exemple:
A B C D ... N
1 7
1 6
1 3
2 2
2 1
2 4
3 5
3 1
3 6
. .
. .
. .
300000 .
Je ne souhaite donc garder que les lignes en gras et supprimer les autres.
Je tiens à préciser que le fichier fait environ 300000 lignes.
La colonne A est celle qui contient les valeurs dupliquées, le tableau sera trié en fonction de cette colonne.
La colonne N contient un nombre allant de 1 à 40. Pour chaque valeur de la colonne A, le nombre contenu dans la colonne N ne sera jamais identique.
Merci d'avance pour toute aide potentielle
Je cherche une macro pour me débarrasser de lignes excel sous certaines conditions.
L'idée principale est de supprimer un certain nombre de lignes ayant des valeurs dupliquées dans la colonne A en fonction de la valeur d'une autre cellule (son maximum).
Pour être plus précis voici un exemple:
A B C D ... N
1 7
1 6
1 3
2 2
2 1
2 4
3 5
3 1
3 6
. .
. .
. .
300000 .
Je ne souhaite donc garder que les lignes en gras et supprimer les autres.
Je tiens à préciser que le fichier fait environ 300000 lignes.
La colonne A est celle qui contient les valeurs dupliquées, le tableau sera trié en fonction de cette colonne.
La colonne N contient un nombre allant de 1 à 40. Pour chaque valeur de la colonne A, le nombre contenu dans la colonne N ne sera jamais identique.
Merci d'avance pour toute aide potentielle
A voir également:
- Supprimer des lignes excel en fonction d'une valeur
- Supprimer rond bleu whatsapp - Guide
- Fonction si et excel - Guide
- Supprimer une page word - Guide
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
2 réponses
Bonjour,
Ton tableau s'arr^te il à la colonne N ? sinon , à quelle colonne ?
Dans la colonne A , le tri croissant est il déjà fait (pas bien compris le "sera") ?
les nombres dans la colonne A sont ils incrémentés de 1 à chaque changement de valeur dupliquée ?
le mieux serait de joindre un extrait de ton classeur avec 1000 ou 2000 lignes au maximum
Ton tableau s'arr^te il à la colonne N ? sinon , à quelle colonne ?
Dans la colonne A , le tri croissant est il déjà fait (pas bien compris le "sera") ?
les nombres dans la colonne A sont ils incrémentés de 1 à chaque changement de valeur dupliquée ?
le mieux serait de joindre un extrait de ton classeur avec 1000 ou 2000 lignes au maximum
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
http://cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
En supposant que le tableau s'arr^te en colonne N et commence en ligne 2
Merci de communiquer la durée pour 300 000 lignes
proposition de code
Michel
Merci de communiquer la durée pour 300 000 lignes
proposition de code
Option Explicit
'----------------------------
Sub epurer_svt_max()
Dim Derlig As Long, T_in()
Dim Dico As Object, Idx As Long, Maxi As Byte, Cle As Long, Nbre As Long
Dim T_lignemaxi(), T_out(), Lig As Long, Cptr As Long, Col As Byte
Dim Start As Single 'essai rapidité à supprimer apres essais
'-----initialisations
Start = Timer 'essai rapidité à supprimer apres essais
Application.ScreenUpdating = False
Derlig = Columns("A").Find("*", , , , , xlPrevious).Row
T_in = Range("A2:N" & Derlig) 'n=14
Set Dico = CreateObject("scripting.dictionary")
'----création du couple valeur dupliquée / index de son max
For Idx = 1 To UBound(T_in)
If Not Dico.exists(T_in(Idx, 1)) Then
Dico.Add T_in(Idx, 1), Idx
'détermination valeur initiale maxi
Maxi = T_in(Idx, 14)
Cle = T_in(Idx, 1) 'mémorisation clé
Else
If T_in(Idx, 14) > Maxi Then
'détermination nouvelle valeur maxi et ligne
Dico.Item(Cle) = Idx
Maxi = T_in(Idx, 14)
End If
End If
Next
'restitution de la selection des lignes avec maxi col_n
T_lignemaxi = Dico.items
'-----construction du tableau epuré
Nbre = Dico.Count
ReDim T_out(1 To Nbre, 1 To 14)
Cptr = 1
For Idx = 0 To Nbre - 1
Lig = T_lignemaxi(Idx)
For Col = 1 To 14
T_out(Cptr, Col) = T_in(Lig, Col)
Next
Cptr = Cptr + 1
Next
' ----restitution du tableau épuré
Range("A2:N" & Derlig).Clear ' à valider après essais
With Range("R2").Resize(Nbre, 14) ' R2 pour essai à remplacer par A2 au final
.Value = T_out
.Borders.Weight = xlThin
End With
'----essai rapidité à supprimer apres essais
Application.ScreenUpdating = False
MsgBox "tableau épuré en " & Timer - Start & " sec."
End Sub
Michel
Bonjour Michel,
Merci pour ce code.
J'ai testé sur le fichier que j'ai mis en exemple et j'ai eu une erreur de type mismatch qui apparait au niveau de cette ligne lorsque j'exécute:
Cle = T_in(Idx, 1) 'mémorisation clé
J'ai mis cette ligne en commentaire et j'ai re-exécuté, et la cela a fonctionné mais partiellement car les valeurs ont bien été effacées sauf une seule.
J'ai essayé de voir d'ou provenait l'erreur mais je n'ai pas réussi à trouver.
Merci d'avance pour votre aide.
Bien cordialement.
Merci pour ce code.
J'ai testé sur le fichier que j'ai mis en exemple et j'ai eu une erreur de type mismatch qui apparait au niveau de cette ligne lorsque j'exécute:
Cle = T_in(Idx, 1) 'mémorisation clé
J'ai mis cette ligne en commentaire et j'ai re-exécuté, et la cela a fonctionné mais partiellement car les valeurs ont bien été effacées sauf une seule.
J'ai essayé de voir d'ou provenait l'erreur mais je n'ai pas réussi à trouver.
Merci d'avance pour votre aide.
Bien cordialement.
quand je te demande:
le mieux serait de joindre un extrait de ton classeur avec 1000 ou 2000 lignes au maximum
tu me réponds
je n'ai mis que quelques lignes en exemples car le principe est le même quel que soit le nombre de lignes:
a ton avis, si je me permet de te demander 1000 ou 2000 lignes , ne crois tu pas qu'il y a une raison? sur les grands tableaux il vaut mieux voir la réalité (l'algorithme, mais oui mon cher, peut complètement changer) qu'un exemple bidon bricolé à la hâte
décourageant....
plus la la peine d'envoyer l'extrait demandé
le mieux serait de joindre un extrait de ton classeur avec 1000 ou 2000 lignes au maximum
tu me réponds
je n'ai mis que quelques lignes en exemples car le principe est le même quel que soit le nombre de lignes:
a ton avis, si je me permet de te demander 1000 ou 2000 lignes , ne crois tu pas qu'il y a une raison? sur les grands tableaux il vaut mieux voir la réalité (l'algorithme, mais oui mon cher, peut complètement changer) qu'un exemple bidon bricolé à la hâte
décourageant....
plus la la peine d'envoyer l'extrait demandé
Re-bonjour Michel,
Vraiment désolé, je ne voulais pas vous braquer. Je n'ai pas vu cela sous ce point mais vous avez tout à fait raison.
Je ne voulais pas vous "décourager".
Je vous prie donc d'accepter mes excuses.
Voici le fichier demandé si vous souhaitez encore m'aider.
https://www.cjoint.com/?3Drq6PRmIe0
En vous remerciant par avance et en vous priant une nouvelle fois d'accepter mes excuses.
Bien cordialement.
Vraiment désolé, je ne voulais pas vous braquer. Je n'ai pas vu cela sous ce point mais vous avez tout à fait raison.
Je ne voulais pas vous "décourager".
Je vous prie donc d'accepter mes excuses.
Voici le fichier demandé si vous souhaitez encore m'aider.
https://www.cjoint.com/?3Drq6PRmIe0
En vous remerciant par avance et en vous priant une nouvelle fois d'accepter mes excuses.
Bien cordialement.
Oui mon tableau s'arrête à la colonne N et le tri croissant est déjà fait sur la colonne A :-)
En fait dans ma colonne A j'ai des valeurs dupliquées et je souhaiterai supprimer chaque ligne ou les valeurs de A sont dupliquées. Pour identifier quelle ligne garder et quelle ligne supprimer, j'ai des valeurs dans ma colonne N et je ne souhaite garder pour chaque valeur dupliquée de la colonne A que la ligne ou la valeur dans la colonne N est à son maximum.
Voici le lien pour le fichier exemple comme demandé, je n'ai mis que quelques lignes en exemples car le principe est le même quel que soit le nombre de lignes:
https://www.cjoint.com/?3DrpAGHbxOz
Dans cet exemple je ne souhaite donc garder que les lignes 2, 6 et 10 car ce sont les lignes ou pour chaque valeur dupliquée de A nous avons la plus grande valeur dans la colonne N et je souhaite donc également supprimer les autres.
En vous remerciant par avance.
Cordialement.