Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

supression de doublons amélioré

  • Initiateur de la discussion Initiateur de la discussion shadoune
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

shadoune

Guest
Bonjour,

je travaille sur un fichier ce ce type:

colonneA colonneB
Nom Fréquence
toto 3
tata 1
titi 4
tutu 2
tete 2
tete 1


Je voudrais supprimer une ligne à chaque fois qu'un nom de la colonne A est en doublon (comme ici tete). Bon ça je sais déjà faire!

Sub sup_doublons()
Range("B2").Select
Do While ActiveCell <> ""
If ActiveCell = ActiveCell.Offset(-1, 0) Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub


Mais la y'a une particularité que je ne sais pas intégrer :

- quand un nom est répété, il faut tenir compte de la colonne B et garder uniquement la ligne ayant la fréquence la plus élevée (il peut y avoir des répétitions de plus de 2)

- il peut arriver que les répétitions aient la même fréquence, dans ce cas conserver la première ligne.


Si quelqu'un pouvait m'aider ce sera super!

Merci
 
Re : supression de doublons amélioré

bonjour,

1. si tu trie ta liste par col A puis par col b en ordre descendant,
2. tu commences en bas de la liste
3. si la cellule Ax = Ax-1, tu effaces cette ligne puisque le tri fait qu'elle est forcément inf ou égale à celle du dessus
CQFD
 
Re : supression de doublons amélioré

Bonjour Shadoune, Bonjour Mutzik, le forum,

Avec le VBA, on pourrait peut etre essayer avec un test et un offset:

Code:
Sub sup_doublons()
Range("B2").Select
Do While ActiveCell <> ""

[COLOR="Green"]'compare la cellule active et la cellule suivante ET les valeurs de la frequence (colonne C) de ces memes cellules, tri croissant comme suggere Mutzik[/COLOR]
If ActiveCell = ActiveCell.Offset(1, 0) _
[COLOR="Red"]And ActiveCell.Offset(, 1).Value < ActiveCell.Offset(1, 1).Value[/COLOR] Then

[COLOR="Green"]'supprime la ligne de la cellule en cours car frequence de la cellule suivante est superieure[/COLOR]
ActiveCell.EntireRow.Delete

ElseIf ActiveCell = ActiveCell.Offset(1, 0) _
[COLOR="Red"]And ActiveCell.Offset(, 1).Value > ActiveCell.Offset(1, 1).Value[/COLOR] Then

[COLOR="Green"]'supprime la ligne de la cellule suivante car frequence de la cellule active est superieure[/COLOR]
ActiveCell.Offset(1,0).EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub

Non teste... En esperant que ca fonctionne🙄

Bonne journee,🙂
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

N
Réponses
6
Affichages
881
N
Réponses
7
Affichages
1 K
S
  • Question Question
Microsoft 365 Mise à Jour dates
Réponses
0
Affichages
651
Stephane Mex
S
M
Réponses
2
Affichages
1 K
Mr.Nobody
M
F
Réponses
13
Affichages
2 K
R
Réponses
8
Affichages
2 K
raoulruiz
R
Réponses
39
Affichages
6 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…