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.
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é.
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 ¨ ^
Pour limiter la casse, faire la comparaison en tout "majuscule" If ucase(Cells(j, 2) & Cells(j, 3) & Cells(j, 9)) = ucase(Cells(i, 2) & Cells(i, 3) & Cells(i, 9)) _ Or Cells(i, 9) = "" Then Rows(i).Delete
-- Salutations JJ
"kerr2" a écrit dans le message de news:
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" a écrit dans le message de news: %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" a écrit dans le message de news:
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...
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 ¨ ^
Pour limiter la casse, faire la comparaison en tout "majuscule"
If ucase(Cells(j, 2) & Cells(j, 3) & Cells(j, 9)) = ucase(Cells(i, 2) &
Cells(i, 3) & Cells(i, 9)) _
Or Cells(i, 9) = "" Then Rows(i).Delete
--
Salutations
JJ
"kerr2" <en.tropkerr2entrop@free.onsupprimefr> a écrit dans le message de
news: OTg11u0FIHA.4308@TK2MSFTNGP06.phx.gbl...
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" <Dupond@marcel.fr> a écrit dans le message de news:
%23d%23QrB0FIHA.5272@TK2MSFTNGP05.phx.gbl...
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" <Marti@discussions.microsoft.com> a écrit dans le message de
news:
0B687522-59A2-4B66-9F70-41750AD4766F@microsoft.com...
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
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 ¨ ^
Pour limiter la casse, faire la comparaison en tout "majuscule" If ucase(Cells(j, 2) & Cells(j, 3) & Cells(j, 9)) = ucase(Cells(i, 2) & Cells(i, 3) & Cells(i, 9)) _ Or Cells(i, 9) = "" Then Rows(i).Delete
-- Salutations JJ
"kerr2" a écrit dans le message de news:
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" a écrit dans le message de news: %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" a écrit dans le message de news:
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
Merci Jacky pour le temps passé à m'aider. Cela m'a bien rendu service.
"Jacky" a écrit dans le message de news:
Re...
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 ¨ ^
Pour limiter la casse, faire la comparaison en tout "majuscule" If ucase(Cells(j, 2) & Cells(j, 3) & Cells(j, 9)) = ucase(Cells(i, 2) & Cells(i, 3) & Cells(i, 9)) _ Or Cells(i, 9) = "" Then Rows(i).Delete
-- Salutations JJ
"kerr2" a écrit dans le message de news:
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" a écrit dans le message de news: %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" a écrit dans le message de news:
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
Merci Jacky pour le temps passé à m'aider. Cela m'a bien rendu service.
"Jacky" <Dupond@marcel.fr> a écrit dans le message de news:
OYbQf40FIHA.5752@TK2MSFTNGP02.phx.gbl...
Re...
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 ¨ ^
Pour limiter la casse, faire la comparaison en tout "majuscule"
If ucase(Cells(j, 2) & Cells(j, 3) & Cells(j, 9)) = ucase(Cells(i, 2) &
Cells(i, 3) & Cells(i, 9)) _
Or Cells(i, 9) = "" Then Rows(i).Delete
--
Salutations
JJ
"kerr2" <en.tropkerr2entrop@free.onsupprimefr> a écrit dans le message de
news: OTg11u0FIHA.4308@TK2MSFTNGP06.phx.gbl...
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" <Dupond@marcel.fr> a écrit dans le message de news:
%23d%23QrB0FIHA.5272@TK2MSFTNGP05.phx.gbl...
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" <Marti@discussions.microsoft.com> a écrit dans le message de
news:
0B687522-59A2-4B66-9F70-41750AD4766F@microsoft.com...
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
Merci Jacky pour le temps passé à m'aider. Cela m'a bien rendu service.
"Jacky" a écrit dans le message de news:
Re...
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 ¨ ^
Pour limiter la casse, faire la comparaison en tout "majuscule" If ucase(Cells(j, 2) & Cells(j, 3) & Cells(j, 9)) = ucase(Cells(i, 2) & Cells(i, 3) & Cells(i, 9)) _ Or Cells(i, 9) = "" Then Rows(i).Delete
-- Salutations JJ
"kerr2" a écrit dans le message de news:
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" a écrit dans le message de news: %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" a écrit dans le message de news:
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