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

supprimer ligne en doublon

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

matt31

XLDnaute Occasionnel
Bonjour,

je voudrais savoir comment faire pour supprimer une ligne entière si la valeur de la cellule en C est égale à la valeur d'une cellule toujours en C mais sur une autre ligne..

Merci pour votre aide
 
Re : supprimer ligne en doublon

Bonjour Matt, bonjour le forum,

Cette macro fonctionne, je pense, si les doublons se suivent (si il y a eu un tri avant). Mais il faut adapter la ligne :
nb = Application.WorksheetFunction.CountIf(pl, Cells(x, 2).Value) 'definit la nombre d'occurrences de la cellule dans la plage pl
par :
Code:
nb = Application.WorksheetFunction.CountIf(pl, Cells(x, 3).Value) 'definit la nombre d'occurrences de la cellule dans la plage pl
pour tenir compte de la colonne C.

Je te propose la macro ci-dessous mieux adaptée :
Code:
Sub Macro1()
 
'**************************
'déclarations des variables
'**************************
Dim dl As Long 'déclare la varaible dl (Dernière Ligne)
Dim pl As Range 'd;eclare la varaible pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim r As Range 'déclare la variable r (Recherche)
Dim tbl() As Long 'déclare le tableau de variables tbl (TaBleau de Lignes)
Dim x As Long 'déclare la variable x (incrément de variable)
Dim le As Range 'déclare la variable le (Lignes à Effacer)
 
'********************************
'Définition dynamique de la plage
'********************************
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1" (à adapter à ton cas)
    dl = .Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la ligne de la dernière cellule éditée de la colonne C (3)
    Set pl = .Range("C1:C" & dl) 'définit la plage pl
End With 'fin de la prise en compote de l'onglet Feuil1
 
'*********************
'repérage des doublons
'*********************
Application.ScreenUpdating = False 'masque les changement à l'écran
For Each cel In pl 'boucle sur toutes cellules de la plage pl
    If cel.Interior.ColorIndex <> 3 Then 'condition 1 : si la couleur de fond de la cellule n'est pas rouge
        If Application.WorksheetFunction.CountA(pl, cel.Value) > 1 Then 'condition 2 : si il y a doublon de la cellule dans la plage pl
            pa = cel.Address 'définit la première adresse
            Set r = pl.Find(cel.Value, , xlValues, xlWhole) 'définit la recherche r (recherche la valeur de la cellule dans la plage pa)
 
            '********************************************************************************
            'récupérarion du numéro des lignes contenant un doublon dans un tableau dynamique
            '********************************************************************************
            Do 'exécute
                If r.Address <> pa Then 'condition 3 : si l'adresse de r est diférente de pa
                    r.Interior.ColorIndex = 3 'colore la cellule de rouge
                    ReDim Preserve tbl(x) 'redimensionne le tableau tbl
                    tbl(x) = r.Row 'attribue une variable indéxee au tableau tbl (le numéro de ligne)
                    x = x + 1 'incrémente x
                End If 'fin de la condition 3
                Set r = pl.FindNext(r) 'redéfinit la recherhce r (recherche suivante)
            Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrence trouvées ailleurs qu'en pa
 
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next cel 'prochaine cellule de la boucle
 
'*******************************************
'définition de la plage des lignes à effacer
'*******************************************
On Error GoTo fin 'gestion des erreurs, si une erreur est générée, va à l'étiquette "fin"
Set le = Rows(tbl(0)) 'définit la plage le (génère une erreur si il n'y a aucun doublon dans la colonne C
For x = 1 To UBound(tbl) 'boucle sur toutes les variables du tableau de variables tbl (en partant de la seconde)
    Set le = Application.Union(le, Rows(tbl(x))) 'redéfinit la plage le
Next x 'prochaine variable de la boucle
le.Delete 'supprime la plage le
Application.ScreenUpdating = True 'affiche les changement à l'écran
fin: 'étiquette
End Sub
 
Re : supprimer ligne en doublon

Bonjour,

Essaie en modifiant cette ligne:

Code:
nb = Application.WorksheetFunction.CountIf(pl, Cells(x, [B][COLOR=darkred]3[/COLOR][/B]).Value)

Bonne journée,

mth

Edit: oups, Bonjour Robert 🙂 🙂
à la traine moi...
Bise et bonne journée,
m
 
Re : supprimer ligne en doublon

merci à tous les 2.

Robert, lorsque j'applique ton code, j'ai l'erreur suivante :

Erreur d'exécution '91':
Variable objet ou variable de bloc Wtih non définie


sur cette ligne :

If r.Address <> pa Then 'condition 3 : si l'adresse de r est diférente de pa

J'avoue ne pas comprendre.
Merci de bien vouloir m'aider
 
Re : supprimer ligne en doublon

J'ai trouvé en voyant ton fichier où tu démarres de la 1° ligne alors que ce n'est pas mon cas.
J'ai donc modifié à cet endroit :

'********************************
'Définition dynamique de la plage
'********************************
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1" (à adapter à ton cas)
dl = .Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la ligne de la dernière cellule éditée de la colonne C (3)
Set pl = .Range("C3:C" & dl) 'définit la plage pl
End With 'fin de la prise en compote de l'onglet Feuil1


pour démarrer à la ligne 3 et ça marche super.

encore merci, je peux continuer mon fichier mais j'ai encore plein de questions. J'y vais étape par étape.
 
- 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

Discussions similaires

Réponses
2
Affichages
107
R
  • Question Question
Réponses
3
Affichages
115
regis6460
R
Réponses
2
Affichages
118
Réponses
2
Affichages
470
Réponses
4
Affichages
231
  • Question Question
Microsoft 365 bouton supprimer
Réponses
4
Affichages
228
Réponses
3
Affichages
221
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…