Comapraison et suppression

alikan -  
thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux exécuter une macro qui compare la ligne précédene à la suivante et supprime la précédente si elle se correspondent,
J'ai trouvé ce code qui fait l'inverse

MaCellule = ("A2")
Range(MaCellule).Select
ActiveCell.CurrentRegion.Sort Key1:=Range(MaCellule), Order1:=xlAscending, Header:=xlYes
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select

While ActiveCell <> ""
If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
End If
Wend

J'ai essayé de jouer sur les ActiveCell.Offset mais ça ne marche pas non plus


A voir également:

5 réponses

thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   713
 
Bonjour,

Pas besoin de macro. Utiliser la commande suppression de doublons dans le menu Données.
Si tu veux utiliser VBA, voici le code

Sub supprimer_lignes_en_double()

Dim plage_utilisée As Range
Dim index_colonnes As String

Set plage_utilisée = ActiveSheet.UsedRange
index_colonnes = Empty
For Each colonne In plage_utilisée.Columns
If index_colonnes = Empty Then
index_colonnes = colonne.Column
Else
index_colonnes = index_colonnes & "," & colonne.Column
End If
Next
plage_utilisée.RemoveDuplicates Columns:=Array(index_colonnes)


End Sub

--
 
0
alikan
 
Bonjour;
J'ai réussi à exécuter et comme je vous ai dit il supprime l’élément suivant. Alors que ce qui me faut c'est de supprimer le premier s'il correspond au deuxième l'élément parce qu'en fait le dernier sur la liste correspond à un sous total.

Merci
0
thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   713
 
Dans ce cas, tes lignes ne sont pas complètement identiques. Il faudrait fournir un exemple précis pour répondre à ta demande d'aide.
0
alikan
 
Voila le lien vers capture écran : http://zupimages.net/viewer.php?id=16/25/vyh4.png

la première colonne est rétréci parce quelle contient des numéro de téléphone, la seconde cest la consommation. Les colonnes en bleus sont des Sous totaux que je veux garder en supprmant les doublons

:(
0
thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   713
 
D'après ce que je comprends, les doublons ne sont relatifs qu'à la colonne A et donc aux numéros de téléphone.
0
alikan
 
Oui exact
0
thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   713
 
En y réfléchissant,

trier l'ensemble de la plage utilisée ne me parait pas bon car les sous-totaux risquent de n'être plus pertinents

le plus simple me parait être
1- de déterminer chaque plage relative à un sous-total (hors le sous-total correspondant)
  2- d'éliminer ensuite les doublons figurant dans cette plage.

Qu'en pensez-vous ?
0
alikan
 
les sous totaux vont disparaitre avec, puisqu'il découle des colonnes en dessus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   713
 
Les sous-totaux ne disparaitront pas car ils seront exclus de la suppression des doublons.
Essayer le code ci-dessous.

Sub supprimer_doublons()

'plage utilisée
Set plage_utilisée = ActiveSheet.UsedRange
With plage_utilisée

'initialisation ligne après sous-total précédent
Set ligne_après_sous_tot_prec = .Rows(2).EntireRow
'recherche dernère cellule avant sous-total
Set cell_sous_tot_init = .Find("SUBTOTAL")
Set cell_sous_tot = cell_sous_tot_init
Do

'affectation ligne avant sous-total
Set ligne_avant_sous_tot = cell_sous_tot.EntireRow.Offset(-1)

'affectation plage doublons
Set plage_doublons = .Range(ligne_après_sous_tot_prec, ligne_avant_sous_tot)
'suppression doublons
plage_doublons.RemoveDuplicates Columns:=1

'affectation ligne après sous-total précédent
Set ligne_après_sous_tot_prec = cell_sous_tot.EntireRow.Offset(1)
'recherche dernère cellule suivante avant sous-total
Set cell_sous_tot = .FindNext(cell_sous_tot)

Loop Until cell_sous_tot.Address = cell_sous_tot_init.Address

'suppression lignes vides après suppression doublons
On Error Resume Next
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End With

End Sub
0