Gwad063
Messages postés23Date d'inscriptionlundi 10 décembre 2007StatutMembreDernière intervention25 janvier 2008
-
24 janv. 2008 à 12:27
Gwad063
Messages postés23Date d'inscriptionlundi 10 décembre 2007StatutMembreDernière intervention25 janvier 2008
-
25 janv. 2008 à 09:59
Bonjour à tous,
Je me permets de solliciter encore votre aide parce que j'ai un peu de mal à mettre sur pied une macro toute simple qui va balayer un tableau ligne par ligne et, lorsque elle trouve en ligne i+1 les mêmes valeurs que sur la ligne i (pour les colonnes de A à E), elle va supprimer la ligne avant de passer à la suivante...
Voilà ce que donne ma code :
Sub SuppressionDoublons()
Dim i, j as long
Dim NomFeuille as String
Dim LigPrem as long
Dim Original, Doublons as range
LigPrem = 2
NomFeuille="Spécifiques sur BPR standard"
For i = LigPrem to Sheets(NomFeuille).Range("A" & "65536").End(xlup).row
For j= LigPrem +1 to Sheets(NomFeuille).Range("A" & "65536").End(xlup).row + 1
Set Original = sheets(NomFeuille).Range("A", i & sheets(NomFeuille).range("E", i))
Set Doublons = sheets(NomFeuille).Range("A", j & sheets(NomFeuille).range("E",j))
If Original = Doublons Then
Rows(j).Delete
End If
Next j
Next i
End If
J'ai une erreur à partir du morceau de code en rouge...
Si quelqu'un a quelques conseils à me donner.
Merci beaucoup par avance.
nanardino64
Messages postés131Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention17 mars 2010 24 janv. 2008 à 14:28
Salut,
For i = LigPrem to Sheets(NomFeuille).Range("A" & "65536").End(xlup).row
For j= LigPrem +1 to Sheets(NomFeuille).Range("A" & "65536").End(xlup).row + 1
Pourquoi tu pars de tout en bas de ton tableau pour remonter ?
Ensuite j'arrive pas à voir quand est-ce que tu regardes les valeurs dans ta ligne ? Parce que en fait dans original et doublon tu ne mets que des adresses ?
Gwad063
Messages postés23Date d'inscriptionlundi 10 décembre 2007StatutMembreDernière intervention25 janvier 2008 24 janv. 2008 à 15:51
Bonjour nanardino64,
Bon, j'ai fait quelques modifications (sans que cela marche pour autant...) :
Sub SuppressionDoublons()
Dim i, j as long
Dim NomFeuille as String
Dim LigPrem as long
Dim Original as range
LigPrem = 2
NomFeuille="Spécifiques sur BPR standard"
For i = LigPrem to Sheets(NomFeuille).Range("A" & "65536").End(xlup).row
'For j= LigPrem +1 to Sheets(NomFeuille).Range("A" & "65536").End(xlup).row + 1
Set Original = sheets(NomFeuille).Range("A" & i & ":E65536").End(xlup).offset(i, 0)
'Set Doublons = sheets(NomFeuille).Range("A", j & sheets(NomFeuille).range("E",j))
If Original.Value = Sheets(NomFeuille).Range("A" & i+1 & ":E65536").End(xlup).Offset (i+1, 0).Value Then
Rows(i +1).Delete
End If
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 24 janv. 2008 à 16:10
Bonjour
Ma proposition (non testée) :
Sub SuppressionDoublons()
Dim i as long, j as long, z as long
Dim NomFeuille as String
Dim LigPrem as long
Dim lOriginal(0 to 4) as variant
dim lIdentique as Boolean
Dim lToControl as range
Dim lMaxLine as long
lMaxLine=Sheets(NomFeuille).Range("A" & "65536").End(xlup).row
LigPrem = 2
NomFeuille="Spécifiques sur BPR standard"
For i = LigPrem to lmaxLine
'Mise en tampon de la ligne à controler et controle de non vide (risque de bouclage infini sinon)
lIdentique=true
for z=0 to 4
lOriginal(z)=sheets(NomFeuille).Range("A" & i).offset(0, z).value
if lOriginal(z)<>"" then lIdentique=false
next z
if not lIdentique then
For j= i +1 to lmaxLine+1
if j< i +1 then j= i +1
set lToControl=sheets(NomFeuille).Range("A" & j)
lIdentique=True
for z=0 to 4
if lOriginal(z)<>lToControl.Offset(0,z).value then
lIdentique=false
exit for
end if
next z
if lIdentique then
Rows(j).Delete
j=j-2
end if
Next j
end if
Next i
End Sub
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
nanardino64
Messages postés131Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention17 mars 2010 24 janv. 2008 à 16:27
En fait je pense qu'il ne peut pas mettre dans une variable les valeurs d'une plage de cellules enfin en tout cas en faisant un test simple ça ne marche pas.
Je pense qu'il va falloir que tu compares les colonnes de chaque ligne en faissant une boucle de colonnes dans ta boucle de lignes.
Je sais pas si j'ai été très clair donc dis moi si c'est clair pour toi.
nanardino64
Messages postés131Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention17 mars 2010 24 janv. 2008 à 17:04
J'ai quand même une remarque
pas besoin de faire j=j-2
j=j-1 suffit vu que tu supprimes une ligne il faut revenir d'une ligne et comme ça tu économises le bloc
if j< i +1 then j= i +1
Qui n'a plus lieu d'être car impossible
Et bonne idée de contrôler le non vide car j'avais commencé à taper un code et je m'étais fait b....er
Voilà juste pour perfectionner ce code qui l'était déjà pas mal (en même temps j'espère que j'ai pas dit une grosse connerie qui va me rendre ridicule une fois de plus)
@+
Gwad063
Messages postés23Date d'inscriptionlundi 10 décembre 2007StatutMembreDernière intervention25 janvier 2008 24 janv. 2008 à 18:02
Bonsoir à tous,
NHenry, j'ai testé ton code dans mon fichier mais la macro ne fonctionne pas...elle tourne correctement aprs 2/3 modif pour l'adapter, mais sans effacer les lignes identiques...
En tout cas, joli code...
Gwad063
Messages postés23Date d'inscriptionlundi 10 décembre 2007StatutMembreDernière intervention25 janvier 2008 25 janv. 2008 à 09:59
Bonjour,
Merci à tous pour le temps que vous avez consacré à la résolution de mon problème...
MPi, je pense que je vais suivre tes conseils (une fois de plus...); je suis un peu pris par le temps, et c'est ta solution qui me parle le plus...