Macro pour suppression doublon

Le
Marti
Bonjour,

Avec Excel 2000

Dans un tableau de 12 colonnes je souhaite supprimer les lignes en double
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques.

En clair supprimer les lignes quand les 2 responsables d'un enfant habitent
à la même adresse. S'ils n'habitent pas à la même adresse, conserver la ligne
des 2 responsables de l'enfant.


Exemple:
=>Ligne1
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: Mme
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Toto
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

=>Ligne2
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: M.
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Jules
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

Donc dans ce cas supprimer la ligne 2 puisque les 2 responsables habitent a
la même adresse


Je veux également supprimer les lignes lorsque la colonne 9 est vide

J'arrive avec la mise en forme conditionnelle a coloriser les lignes a
supprimer.

=SOMMEPROD((L1C7:LC7=L(1)C7)*(L1C9:LC9=L(1)C9)*(L(1)C7<>""))

A supprimer les lignes ou la colonne 9 est vide
=LC9=""

Pourriez vous m'aider a intégrer cela dans une macro pour supprimer les
doublons.
Peut être est il plus facile de s’y prendre différemment mais je n'ai pas
trouvé.

En vous remerciant par avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #4997721
Bonsoir,
'-------------
Sub jj()
For i = [g65535].End(3).Row To 2 Step -1
If Cells(i, 7) = Cells(i, 9) Then Rows(i).Delete
Next
End Sub
'-------------------
J'ai supposé la ligne 1 comme ligne de titre
Sinon
For i = [g65535].End(3).Row To 1 Step -1

--
Salutations
JJ


"Marti"
Bonjour,

Avec Excel 2000

Dans un tableau de 12 colonnes je souhaite supprimer les lignes en double
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques.

En clair supprimer les lignes quand les 2 responsables d'un enfant
habitent
à la même adresse. S'ils n'habitent pas à la même adresse, conserver la
ligne
des 2 responsables de l'enfant.


Exemple:
=>Ligne1
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: Mme
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Toto
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

=>Ligne2
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: M.
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Jules
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

Donc dans ce cas supprimer la ligne 2 puisque les 2 responsables habitent
a
la même adresse


Je veux également supprimer les lignes lorsque la colonne 9 est vide

J'arrive avec la mise en forme conditionnelle a coloriser les lignes a
supprimer.

=SOMMEPROD((L1C7:LC7=L(1)C7)*(L1C9:LC9=L(1)C9)*(L(1)C7<>""))

A supprimer les lignes ou la colonne 9 est vide
=LC9=""

Pourriez vous m'aider a intégrer cela dans une macro pour supprimer les
doublons.
Peut être est il plus facile de s'y prendre différemment mais je n'ai pas
trouvé.

En vous remerciant par avance



Jacky
Le #4997691
Re...
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques
????

D'après ton exemple les infos ne sont pas sur la même ligne, donc...
'---------
Sub jj()
For i = [g65535].End(3).Row To 2 Step -1
If Cells(i, 7) = Cells(i - 1, 7) And Cells(i, 9) = Cells(i - 1, 9) Then
Rows(i).Delete
' ou
' If Cells(i, 7) & Cells(i, 9) = Cells(i - 1, 7) & Cells(i - 1, 9) Then
Rows(i).Delete
Next
End Sub
'------------

--
Salutations
JJ


"Marti"
Bonjour,

Avec Excel 2000

Dans un tableau de 12 colonnes je souhaite supprimer les lignes en double
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques.

En clair supprimer les lignes quand les 2 responsables d'un enfant
habitent
à la même adresse. S'ils n'habitent pas à la même adresse, conserver la
ligne
des 2 responsables de l'enfant.


Exemple:
=>Ligne1
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: Mme
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Toto
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

=>Ligne2
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: M.
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Jules
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

Donc dans ce cas supprimer la ligne 2 puisque les 2 responsables habitent
a
la même adresse


Je veux également supprimer les lignes lorsque la colonne 9 est vide

J'arrive avec la mise en forme conditionnelle a coloriser les lignes a
supprimer.

=SOMMEPROD((L1C7:LC7=L(1)C7)*(L1C9:LC9=L(1)C9)*(L(1)C7<>""))

A supprimer les lignes ou la colonne 9 est vide
=LC9=""

Pourriez vous m'aider a intégrer cela dans une macro pour supprimer les
doublons.
Peut être est il plus facile de s'y prendre différemment mais je n'ai pas
trouvé.

En vous remerciant par avance



Jacky
Le #4997671
Re..
Et si les lignes ne sont pas consécutives
'----------------
Sub jj()
Application.ScreenUpdating = False
For j = 2 To [g65535].End(3).Row
x = Cells(j, 7) & Cells(j, 9)
For i = [g65535].End(3).Row To j + 1 Step -1
If x = Cells(i, 7) & Cells(i, 9) Then Rows(i).Delete
Next
Next
End Sub
'------------------

--
Salutations
JJ


"Jacky" %
Re...
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques
????

D'après ton exemple les infos ne sont pas sur la même ligne, donc...
'---------
Sub jj()
For i = [g65535].End(3).Row To 2 Step -1
If Cells(i, 7) = Cells(i - 1, 7) And Cells(i, 9) = Cells(i - 1, 9) Then
Rows(i).Delete
' ou
' If Cells(i, 7) & Cells(i, 9) = Cells(i - 1, 7) & Cells(i - 1, 9) Then
Rows(i).Delete
Next
End Sub
'------------

--
Salutations
JJ


"Marti"
Bonjour,

Avec Excel 2000

Dans un tableau de 12 colonnes je souhaite supprimer les lignes en double
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques.

En clair supprimer les lignes quand les 2 responsables d'un enfant
habitent
à la même adresse. S'ils n'habitent pas à la même adresse, conserver la
ligne
des 2 responsables de l'enfant.


Exemple:
=>Ligne1
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: Mme
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Toto
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

=>Ligne2
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: M.
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Jules
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

Donc dans ce cas supprimer la ligne 2 puisque les 2 responsables habitent
a
la même adresse


Je veux également supprimer les lignes lorsque la colonne 9 est vide

J'arrive avec la mise en forme conditionnelle a coloriser les lignes a
supprimer.

=SOMMEPROD((L1C7:LC7=L(1)C7)*(L1C9:LC9=L(1)C9)*(L(1)C7<>""))

A supprimer les lignes ou la colonne 9 est vide
=LC9=""

Pourriez vous m'aider a intégrer cela dans une macro pour supprimer les
doublons.
Peut être est il plus facile de s'y prendre différemment mais je n'ai pas
trouvé.

En vous remerciant par avance







Marti
Le #4997511
Merci Jacky
La premiere proposition fonctionne tres bien. Les données sont bien en
ligne. La 1ere ligne est l'entete des colonnes.

Pour supprimer une ligne si la valeur de la colonne 9 est vide j'ai essayé
de rajouter
If Cells(i, 9).Value = "" Then Rows(i).Delete
mais cela ne fonctionne pas .Cela n'efface pas et boucle en permanence.
Si tu as un conseil a donner.

Merci


Sub Sup_doublon()
For i = [g65535].End(3).Row To 2 Step -1
If Cells(i, 7) = Cells(i, 9) Then Rows(i).Delete
If Cells(i, 9).Value = "" Then Rows(i).Delete
Next
End Sub





Bonsoir,
'-------------
Sub jj()
For i = [g65535].End(3).Row To 2 Step -1
If Cells(i, 7) = Cells(i, 9) Then Rows(i).Delete
Next
End Sub
'-------------------
J'ai supposé la ligne 1 comme ligne de titre
Sinon
For i = [g65535].End(3).Row To 1 Step -1

--
Salutations
JJ


"Marti"
Bonjour,

Avec Excel 2000

Dans un tableau de 12 colonnes je souhaite supprimer les lignes en double
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques.

En clair supprimer les lignes quand les 2 responsables d'un enfant
habitent
à la même adresse. S'ils n'habitent pas à la même adresse, conserver la
ligne
des 2 responsables de l'enfant.


Exemple:
=>Ligne1
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: Mme
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Toto
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

=>Ligne2
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: M.
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Jules
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

Donc dans ce cas supprimer la ligne 2 puisque les 2 responsables habitent
a
la même adresse


Je veux également supprimer les lignes lorsque la colonne 9 est vide

J'arrive avec la mise en forme conditionnelle a coloriser les lignes a
supprimer.

=SOMMEPROD((L1C7:LC7=L(1)C7)*(L1C9:LC9=L(1)C9)*(L(1)C7<>""))

A supprimer les lignes ou la colonne 9 est vide
=LC9=""

Pourriez vous m'aider a intégrer cela dans une macro pour supprimer les
doublons.
Peut être est il plus facile de s'y prendre différemment mais je n'ai pas
trouvé.

En vous remerciant par avance








Marti
Le #4997481
En fait cela ne fonctionne pas. J'ai été trompé par le fait que la macro
supprime la colorisation apportée par la mise en forme conditionnelle qui
elle detecte bien ce qui est demandé. Les lignes ne sont pas supprimés donc.

Je me suis peut etre mal exprimé
Exemple
Ligne 2: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 3: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 4: Colonne7 = DURAND Colonne9 = Bd Arago

La macro devrait supprimer la Ligne 3 dont les colonnes 7 + 9 sont
identiques a la ligne 2.
La ligne 4 doit etre conservée

Merci pour votre aide




Bonsoir,
'-------------
Sub jj()
For i = [g65535].End(3).Row To 2 Step -1
If Cells(i, 7) = Cells(i, 9) Then Rows(i).Delete
Next
End Sub
'-------------------
J'ai supposé la ligne 1 comme ligne de titre
Sinon
For i = [g65535].End(3).Row To 1 Step -1

--
Salutations
JJ


"Marti"
Bonjour,

Avec Excel 2000

Dans un tableau de 12 colonnes je souhaite supprimer les lignes en double
lorsque la valeur de la colonne 7 et la valeur de la colonne 9 sont
identiques.

En clair supprimer les lignes quand les 2 responsables d'un enfant
habitent
à la même adresse. S'ils n'habitent pas à la même adresse, conserver la
ligne
des 2 responsables de l'enfant.


Exemple:
=>Ligne1
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: Mme
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Toto
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

=>Ligne2
C1-Division: 2-1
C2- Nom: Renard
C3- Prenom1: Blanc
C4- Date naissance: 20/07/90
C5- Sexe M
C6- Civilité: M.
=> C7- Nom Responsable: Abo
C8- Prénom Responsable: Jules
=> C9- Ligne 1 Adresse: 21 av du col
C10- Ligne 2 adresse:
C11- CP: 85200
C12- Commune responsable: Jupiter

Donc dans ce cas supprimer la ligne 2 puisque les 2 responsables habitent
a
la même adresse


Je veux également supprimer les lignes lorsque la colonne 9 est vide

J'arrive avec la mise en forme conditionnelle a coloriser les lignes a
supprimer.

=SOMMEPROD((L1C7:LC7=L(1)C7)*(L1C9:LC9=L(1)C9)*(L(1)C7<>""))

A supprimer les lignes ou la colonne 9 est vide
=LC9=""

Pourriez vous m'aider a intégrer cela dans une macro pour supprimer les
doublons.
Peut être est il plus facile de s'y prendre différemment mais je n'ai pas
trouvé.

En vous remerciant par avance








Jacky
Le #4997431
Re..
...Pour supprimer une ligne si la valeur de la colonne 9 est vide .....
Ceci supprime les lignes si la colonnes 7 et la colonne 9 sont identiques ET


si la colonne 7 est identique et la colonne 9 vide
'--------------
Sub jj()
Application.ScreenUpdating = False
For j = 2 To [g65535].End(3).Row
For i = [g65535].End(3).Row To j + 1 Step -1
If Cells(j, 7) & Cells(j, 9) = Cells(i, 7) & Cells(i, 9) _
Or (Cells(j, 7) = Cells(i, 7) And Cells(i, 9) = "") Then Rows(i).Delete
Next
Next
End Sub
'--------------------

--
Salutations
JJ


"Marti"

En fait cela ne fonctionne pas. J'ai été trompé par le fait que la macro
supprime la colorisation apportée par la mise en forme conditionnelle qui
elle detecte bien ce qui est demandé. Les lignes ne sont pas supprimés
donc.

Je me suis peut etre mal exprimé
Exemple
Ligne 2: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 3: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 4: Colonne7 = DURAND Colonne9 = Bd Arago

La macro devrait supprimer la Ligne 3 dont les colonnes 7 + 9 sont
identiques a la ligne 2.
La ligne 4 doit etre conservée

Merci pour votre aide






Marti
Le #4997381
Merci pour cette réponse:

En fait il y a 2 choses differentes:
- Quand la cellule colonne 9 est vide supprimer la ligne
- Quand cellule 7 + cellule 9 sont identique a cellule 7 + cellul 9 ligne+1
supprimer la ligne

J'ai modifié donc, juste pour: si cellule colonne 9 vide supprimer la ligne
Ce qui donne:

Sub Sup_doublon()
Application.ScreenUpdating = False
For j = 2 To [g65535].End(3).Row
For i = [g65535].End(3).Row To j + 1 Step -1
If Cells(j, 7) & Cells(j, 9) = Cells(i, 7) & Cells(i, 9) _
Or (Cells(i, 9) = "") Then Rows(i).Delete
Next
Next
End Sub

Cela fonctionne par contre cela a pris 6'22 sur mon PC au lycee.
Y a t'il moyen d'améliorer la vitesse de la macro.
Une façon simple doit être de limiter aux 3000 premieres lignes. Peut etre y
a t'il autrement ?

Merci encore





Re..
...Pour supprimer une ligne si la valeur de la colonne 9 est vide .....
Ceci supprime les lignes si la colonnes 7 et la colonne 9 sont identiques ET


si la colonne 7 est identique et la colonne 9 vide
'--------------
Sub jj()
Application.ScreenUpdating = False
For j = 2 To [g65535].End(3).Row
For i = [g65535].End(3).Row To j + 1 Step -1
If Cells(j, 7) & Cells(j, 9) = Cells(i, 7) & Cells(i, 9) _
Or (Cells(j, 7) = Cells(i, 7) And Cells(i, 9) = "") Then Rows(i).Delete
Next
Next
End Sub
'--------------------

--
Salutations
JJ


"Marti"

En fait cela ne fonctionne pas. J'ai été trompé par le fait que la macro
supprime la colorisation apportée par la mise en forme conditionnelle qui
elle detecte bien ce qui est demandé. Les lignes ne sont pas supprimés
donc.

Je me suis peut etre mal exprimé
Exemple
Ligne 2: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 3: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 4: Colonne7 = DURAND Colonne9 = Bd Arago

La macro devrait supprimer la Ligne 3 dont les colonnes 7 + 9 sont
identiques a la ligne 2.
La ligne 4 doit etre conservée

Merci pour votre aide











Marti
Le #4997301
Jacky serait il possible lorsqu'il y a doublon de supprimer la 2ème ligne et
non pas la premiere.
La personne qui a saisi les données dans la base a quelques fois quand le
pere et la mere d'un eleve habitent a la meme adresse saisi des informations
en plus pour le premier parent dans une autre colonne. IL n'a pas pris la
peine de les rentrer a nouveau pour le 2eme parent. En supprimant la 1ere
ligne du doublon on surrprime donc l'information.


J'ai essayé Then Rows(i).Delete a la place de Then Rows(j).Delete
mais cela a effacé toute les lignes sauf les 2 premieres


Code en cours:
-----------------------------------------------------------------------------------------
Sub Sup_doublon()
Application.ScreenUpdating = False
For j = 2 To [g5000].End(3).Row
For i = [g5000].End(3).Row To j + 1 Step -1
If Cells(j, 7) & Cells(j, 9) = Cells(i, 7) & Cells(i, 9) _
Or (Cells(j, 9) = "") Then Rows(j).Delete
Next
Next
End Sub

---------------------------------------------------------------------------------------
J'ai remplacé la valeur de g65535 par g5000 pour essayé de gagner du temps
sur l'execution de la macro mais cela ne gagne pas grand chose


Re..
...Pour supprimer une ligne si la valeur de la colonne 9 est vide .....
Ceci supprime les lignes si la colonnes 7 et la colonne 9 sont identiques ET


si la colonne 7 est identique et la colonne 9 vide
'--------------
Sub jj()
Application.ScreenUpdating = False
For j = 2 To [g65535].End(3).Row
For i = [g65535].End(3).Row To j + 1 Step -1
If Cells(j, 7) & Cells(j, 9) = Cells(i, 7) & Cells(i, 9) _
Or (Cells(j, 7) = Cells(i, 7) And Cells(i, 9) = "") Then Rows(i).Delete
Next
Next
End Sub
'--------------------

--
Salutations
JJ


"Marti"

En fait cela ne fonctionne pas. J'ai été trompé par le fait que la macro
supprime la colorisation apportée par la mise en forme conditionnelle qui
elle detecte bien ce qui est demandé. Les lignes ne sont pas supprimés
donc.

Je me suis peut etre mal exprimé
Exemple
Ligne 2: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 3: colonne7 = DURAND Colonne9 = rue des acacias
Ligne 4: Colonne7 = DURAND Colonne9 = Bd Arago

La macro devrait supprimer la Ligne 3 dont les colonnes 7 + 9 sont
identiques a la ligne 2.
La ligne 4 doit etre conservée

Merci pour votre aide











Jacky
Le #4996521
Re...
Jacky serait il possible lorsqu'il y a doublon de supprimer la 2ème ligne
et
non pas la premiere.
Après test, chez moi, c'est bien la première ligne qui reste en place et

la(les) suivante qui est supprimée.
Voir ici:
http://cjoint.com/?kzvxYBSFqF
Cela fonctionne par contre cela a pris 6'22 sur mon PC au lycee.
Y a t'il moyen d'améliorer la vitesse de la macro.
S'il y a des calculs dans les autres cellules, passer en "Calculation xlManual" (voir dans l'exemple)

tester avec 5000 lignes>>= 7 secondes

Une façon simple doit être de limiter aux 3000 premieres lignes. Peut etre
y
a t'il autrement ?
Cette instruction:

For j = 2 To [g65535].End(3).Row
Va chercher la dernière ligne occupée dans la colonne G et la boucle
"For...Next" n'ira pas au-delà.
Ceci
For j = 2 To [g5000].End(3).Row
ne change à rien dans la durée de la macro
Il faut bien sûre qu'il n'y ait pas de lignes occupées dans cette colonne en
dehors du tableau concerné

Sinon il reste la solution du "filtre élaboré", que l'on trouve sur
l'excellent site de JB.
http://boisgontierjacques.free.fr/pages_site/FiltreElabore.htm#ExtractionFeuille

--
Salutations
JJ


"Marti"
Jacky serait il possible lorsqu'il y a doublon de supprimer la 2ème ligne
et
non pas la premiere.
La personne qui a saisi les données dans la base a quelques fois quand le
pere et la mere d'un eleve habitent a la meme adresse saisi des
informations
en plus pour le premier parent dans une autre colonne. IL n'a pas pris la
peine de les rentrer a nouveau pour le 2eme parent. En supprimant la 1ere
ligne du doublon on surrprime donc l'information.


J'ai essayé Then Rows(i).Delete a la place de Then Rows(j).Delete
mais cela a effacé toute les lignes sauf les 2 premieres


Code en cours:
-----------------------------------------------------------------------------------------
Sub Sup_doublon()
Application.ScreenUpdating = False
For j = 2 To [g5000].End(3).Row
For i = [g5000].End(3).Row To j + 1 Step -1
If Cells(j, 7) & Cells(j, 9) = Cells(i, 7) & Cells(i, 9) _
Or (Cells(j, 9) = "") Then Rows(j).Delete
Next
Next
End Sub

---------------------------------------------------------------------------------------
J'ai remplacé la valeur de g65535 par g5000 pour essayé de gagner du temps
sur l'execution de la macro mais cela ne gagne pas grand chose


kerr2
Le #5004211
Merci Jacky
Je suis dessus depuis que j'ai eu l'indication de ta réponse.
Cela fonctionne. Cela m'a fait modifier la comparaison de mes colonnes. Ce
qui donne en clair:
Effacer ligne si la colonne 9 vide (colonne intitulée ligne 1 adresse)
Effacer ligne si Nom+Prenomeleve+adresse dans colonne9 = ligne +1
Nom+Prenomeleve+adresse dans colonne9
Par contre est il possible que le test de comparaison ne tienne pas compte
des majuscules minuscules voir même des caracteres accentués, accents ¨ ^

Merci pour ton suivi.

Sub jj()
Application.ScreenUpdating = False
Application.Calculation = xlManual
For j = 2 To [g65535].End(3).Row
For i = [g65535].End(3).Row To j + 1 Step -1
If Cells(j, 2) & Cells(j, 3) & Cells(j, 9) = Cells(i, 2) &
Cells(i, 3) & Cells(i, 9) _
Or Cells(i, 9) = "" Then Rows(i).Delete
Next
Next
Application.Calculation = xlAutomatic
End Sub

et pour mettre en evidence avec la mise en forme conditionnelle
modification également:

=LC9="" => remplir en bleu

=SOMMEPROD((L1C2:LC2=L(1)C2)*(L1C3:LC3=L(1)C3)*(L1C9:LC9=L(1)C9)*(L(1)C2<>""))
=> remplir en jaune





"Jacky" %23d%
Re...
Jacky serait il possible lorsqu'il y a doublon de supprimer la 2ème ligne
et
non pas la premiere.
Après test, chez moi, c'est bien la première ligne qui reste en place et

la(les) suivante qui est supprimée.
Voir ici:
http://cjoint.com/?kzvxYBSFqF
Cela fonctionne par contre cela a pris 6'22 sur mon PC au lycee.
Y a t'il moyen d'améliorer la vitesse de la macro.
S'il y a des calculs dans les autres cellules, passer en "Calculation > xlManual" (voir dans l'exemple)

tester avec 5000 lignes>>= 7 secondes

Une façon simple doit être de limiter aux 3000 premieres lignes. Peut etre
y
a t'il autrement ?
Cette instruction:

For j = 2 To [g65535].End(3).Row
Va chercher la dernière ligne occupée dans la colonne G et la boucle
"For...Next" n'ira pas au-delà.
Ceci
For j = 2 To [g5000].End(3).Row
ne change à rien dans la durée de la macro
Il faut bien sûre qu'il n'y ait pas de lignes occupées dans cette colonne
en
dehors du tableau concerné

Sinon il reste la solution du "filtre élaboré", que l'on trouve sur
l'excellent site de JB.
http://boisgontierjacques.free.fr/pages_site/FiltreElabore.htm#ExtractionFeuille

--
Salutations
JJ


"Marti"
Jacky serait il possible lorsqu'il y a doublon de supprimer la 2ème ligne
et
non pas la premiere.
La personne qui a saisi les données dans la base a quelques fois quand le
pere et la mere d'un eleve habitent a la meme adresse saisi des
informations
en plus pour le premier parent dans une autre colonne. IL n'a pas pris la
peine de les rentrer a nouveau pour le 2eme parent. En supprimant la 1ere
ligne du doublon on surrprime donc l'information.


J'ai essayé Then Rows(i).Delete a la place de Then Rows(j).Delete
mais cela a effacé toute les lignes sauf les 2 premieres


Code en cours:
-----------------------------------------------------------------------------------------
Sub Sup_doublon()
Application.ScreenUpdating = False
For j = 2 To [g5000].End(3).Row
For i = [g5000].End(3).Row To j + 1 Step -1
If Cells(j, 7) & Cells(j, 9) = Cells(i, 7) & Cells(i, 9) _
Or (Cells(j, 9) = "") Then Rows(j).Delete
Next
Next
End Sub

---------------------------------------------------------------------------------------
J'ai remplacé la valeur de g65535 par g5000 pour essayé de gagner du
temps
sur l'execution de la macro mais cela ne gagne pas grand chose







Publicité
Poster une réponse
Anonyme