Comapraison et suppression

Fermé
alikan - 15 juin 2016 à 09:07
thev Messages postés 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 - 20 juin 2016 à 16:53
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 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 691
16 juin 2016 à 11:38
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
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 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 691
20 juin 2016 à 10:43
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
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 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 691
20 juin 2016 à 11:58
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
Oui exact
0
thev Messages postés 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 691
20 juin 2016 à 12:40
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
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 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 691
Modifié par thev le 20/06/2016 à 16:57
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