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

Suppression doublons avec critère sur le début de la ligne

  • Initiateur de la discussion Initiateur de la discussion Fred51
  • 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 !

F

Fred51

Guest
Bonjour,

débutant en VB, je dois faire une macro qui me supprime certaines lignes doublons.
Mon fichier ne comporte qu'une seule colonne, chaque cellule contenant une chaîne de caractères, que l'on distingue grâce au premier caractère : 1, 2 ou 3 :

10|reference|...|...
10|reference|...|...
10|reference|...|...
20|reference|...|...
20|reference|...|...
30|reference|...|...
30|reference|...|...
30|reference|...|...
30|reference|...|...
[...]

Il faudrait que je puisse supprimer tous les doublons pour les lignes commençant par 1 ou 2 uniquement. J'ai essayé avec le filtre élaboré, ça marche si l'on sélectionne à la main uniquement les lignes désirées bien sûr, mais j'aimerais pouvoir faire ça de manière automatisée.

Si quelqu'un a une idée... Merci ! 🙂
 
Re : Suppression doublons avec critère sur le début de la ligne

Bonjour Fred, le forum,

Avec une macro, ce n'est guère compliqué (on suppose les données en colonne A et triées) :

Code:
Sub SupDoublon()
Dim i As Long
For i = Range("A65536").End(xlUp).Row To 2 Step -1
If UCase(Cells(i, 1)) = UCase(Cells(i - 1, 1)) And Left(Cells(i, 1), 1) < "3" And Left(Cells(i, 1), 1) > "0" Then Rows(i).Delete
Next
End Sub

Edit : j'ai mis UCase pour le cas où l'on ne tient pas compte de la casse (majuscules ou minuscules)

A+
 
Dernière édition:
Re : Suppression doublons avec critère sur le début de la ligne

Merci pour ta réponse ^^

En fait, mon fichier d'entrée n'est pas trié, et il ne doit pas l'être. Ces données sont destinées à être intégrées ligne par ligne dans une appli en vue de créer des objets, et l'ordre de création est très important.

J'avais pensé récupérer les lignes 30 de la feuille principale F1, les copier dans une nouvelle feuille F2, puis revenir à F1, supprimer les lignes 30, faire sur ce qui reste une extraction sans doublon, copier le résultat dans une troisième feuille F3, et concaténer à la fin de F3 les lignes 30 sauvegardées dans F2.

J'ai réussi à coder certains de ces traitements, mais à mon avis je suis en train de faire une usine à gaz alors que je suis sûr qu'il y a bien plus simple...
 
Re : Suppression doublons avec critère sur le début de la ligne

Re,

Si le fichier ne peut pas être trié :

Code:
Sub SupDoublon()
Dim i As Long
For i = Range("A65536").End(xlUp).Row To 2 Step -1
If IsNumeric(Application.Match(Cells(i, 1), Range(Cells(i - 1, 1), Cells(1, 1)), 0)) And Left(Cells(i, 1), 1) < "3" And Left(Cells(i, 1), 1) > "0" Then Rows(i).Delete
Next
End Sub

Application.Match (EQUIV) ne tient pas compte de la casse.

Edit : il ne faut pas qu'il y ait les caractères ~, * ou ?, sinon il faut compliquer un peu la macro :

Code:
Sub SupDoublon()
Dim i As Long, txt$
For i = Range("A65536").End(xlUp).Row To 2 Step -1
txt = Replace(Cells(i, 1), "~", "~~")
txt = Replace(txt, "*", "~*")
txt = Replace(txt, "?", "~?")
If IsNumeric(Application.Match(txt, Range(Cells(i - 1, 1), Cells(1, 1)), 0)) And Left(txt, 1) < "3" And Left(txt, 1) > "0" Then Rows(i).Delete
Next
End Sub

A+
 
Dernière édition:
Re : Suppression doublons avec critère sur le début de la ligne

Merci, j'ai testé ta première macro et ça a marché nikel. 😉

Il est possible en effet que dans une cellule on retrouve le caractère * dans la chaîne de caractères.
Je viens de tester ta seconde requête, et les doublons contenant * ne sont pas supprimés. 😕
 
Dernière modification par un modérateur:
Re : Suppression doublons avec critère sur le début de la ligne

Re,

J'avais traité le tildé en dernier, il faut bien sûr le traiter en premier, voir la macro précédente modifiée.

On peut aussi utiliser Application.CountIf (NB.SI), pour lequel le tildé n'a pas besoin d'être traité :

Code:
Sub SupDoublon()
Dim i As Long, txt$
For i = Range("A65536").End(xlUp).Row To 2 Step -1
txt = Replace(Cells(i, 1), "*", "~*")
txt = Replace(txt, "?", "~?")
If Application.CountIf(Range(Cells(i - 1, 1), Cells(1, 1)), txt) And Left(txt, 1) < "3" And Left(txt, 1) > "0" Then Rows(i).Delete
Next
End Sub

A+
 
Re : Suppression doublons avec critère sur le début de la ligne

Je viens de tester, ça a l'air de très bien marcher. Je ferai d'autres tests ce soir.
Merci beaucoup pour ton aide !

Fred
 
Re : Suppression doublons avec critère sur le début de la ligne




Bonjour,

Merci pour vos macros.
Je souhaiterais faire la même chose mais sans mettre de critères, simplement supprimer les casses identiques car j'ai des données du genre "FFHSJDF51" "UHJEF9ZE65"...

Merci de votre aide
 
- 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

A
Réponses
7
Affichages
1 K
Alex6942
A
B
Réponses
6
Affichages
2 K
Beoden
B
B
Réponses
2
Affichages
2 K
bastienb
B
D
Réponses
0
Affichages
1 K
donmax
D
F
Réponses
16
Affichages
2 K
franzoose
F
T
Réponses
22
Affichages
6 K
Thibault LB
T
C
Réponses
3
Affichages
1 K
corate92
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…