bonjour,
j'ai un résultat (une zone de cellule) de A à P avec bien sûr x Lignes
Mais dans ce résultat, je dois filtrer et supprimer s'il y a des lignes
identiques. Quelqu'un aurait-il déjà eu à traiter le problème ?
merci 
bonjour,
j'ai un résultat (une zone de cellule) de A à P avec bien sûr x Lignes
Mais dans ce résultat, je dois filtrer et supprimer s'il y a des lignes
identiques. Quelqu'un aurait-il déjà eu à traiter le problème ?
merci 
Bonjour,
bonjour,
j'ai un résultat (une zone de cellule) de A à P avec bien sûr x Lignes
Mais dans ce résultat, je dois filtrer et supprimer s'il y a des lignes
identiques. Quelqu'un aurait-il déjà eu à traiter le problème ?
L'option "sans doublons" du filtre standard ne répond pas à ta demande ?
Bonne journée,
Luc.
Par macro tu veux dire ? car la tâche doit être automatisée !
Bonjour
LibreStefan wrote
j'ai un résultat (une zone de cellule) de A à P avec bien sûr x Lignes
Mais dans ce résultat, je dois filtrer et supprimer s'il y a des lignes
(Notamment vérifier que les colonnes A, E, F, G, H, J, I, K, L )
identiques. Quelqu'un aurait-il déjà eu à traiter le problème ?
...
j'ai ce code que j'ai créé mais il ne s'arrete pas quand la ligne est vide
!!!
Tout d'abord un conseil général : quand tu supprimes des éléments d'une
collection
il est prudent de commencer par la fin.
Ensuite ta méthode de concaténation des colonnes puis comparaison est
aléatoire :
A1 = "2", B1 = "3", C1 = "10" leur concaténation = 2310
A1 = "23", B1 = "", C1 = "10" leur concaténation = 2310
Ces conseils ne s'appliquent peut-être pas à ton cas (ce que je ne
peux deviner puisque tu ne joins pas de classeur) mais au cas où...
Dans l'exemple joint je ne teste que sur l'égalité des colonnes C, D et F
Il suffit d'étendre le principe...
*On suppose que le document est trié*
Je travaille sur les tableaux de valeur afin d'optimiser le traitement.
Le lockControllers est aussi là pour çà...
Dans le classeur exemple j'ai mis en couleur les colonnes testées et
j'ai ajouté une colonne "Test" (inutilisée dans le programme) pour
pouvoir visualiser ce qui est en double (colorié en bleu).
SupprimerDoublons.ods
<http://nabble.documentfoundation.org/file/n4105439/SupprimerDoublons.ods>
sub pysDelDoublon
dim oFeuille as object
dim oPlage as object
dim oLig as object, oLigPrec as object
dim i as long
ThisComponent.lockControllers
oFeuille = thiscomponent.sheets.getByName("Feuille1")
oPlage = oFeuille.getCellRangeByName("A2:F25")
for i = 23 to 1 step - 1
oLig = oPlage.DataArray(i)
oLigprec = oPlage.DataArray(i - 1)
if oLig(2) = oLigPrec(2) and oLig(3) = oLigPrec(3) and oLig(5) =
oLigPrec(5) then
oPlage.rows.RemoveByIndex(i, 1)
end if
next i
ThisComponent.unlockControllers
print "terminé"
end sub
Cordialement
Pierre-Yves
LibreStefan wrote
je regarde pour adapter à mon cas !
mais j'ai déjà une erreur "Index hors de la plage définie">
Il faut en effet adapter la valeur de départ de la boucle :
Dans mon exemple on travaille sur A2:F25
Donc 24 lignes "dans le tableur" (on ne part pas de A1)
Les collections étant numérotées à partir de 0 il faut commencer
la boucle à 23.
Cordialement
Pierre-Yves
Suite...
Tu peux aussi t'éviter de calculer en récupérant dans une variable:
ubound(oPlage.DataArray)
qui va te donner la borne supérieure pour la première dimension...
Cordialement
Pierre-Yves
Suite...
DataArray est un tableau de tableau.
Xray indique : T( 0 To 23 ) As object
Chacun de ces 24 éléments (un par ligne) est lui-même un tableau,
qui en l'occurence comprend : T( 0 To 5 ) As variant
Autrement dit un élément par colonne (de A à F).
Donc pour une ligne oLig(2) correspond à la colonne C,
oLig(3) à la colonne D, oLig(5) à la colonne F.
La colonne A est numérotée zéro, E = 4, etc.
Les instructions :
oLig = oPlage.DataArray(i)
oLigprec = oPlage.DataArray(i - 1)
récupèrent respectivement le tableau de la ligne i (oLig)
et celui de la ligne i - 1 (oLigprec)
Ensuite on peut tester les valeurs des éléments "colonne".
J'ai voulu "décomposer" en passant par la récupération des éléments
"ligne". Une autre manière d'écrire est d'adresser directement les
deux dimensions. Je ne l'avais pas employée car elle est peut-être
moins compréhensible :
oPlage = oFeuille.getCellRangeByName("A2:F25")
oData = oPlage.DataArray
for i = 23 to 1 step - 1
if oData(i)(2) = oData(i-1)(2) and oData(i)(3) = oData(i-1)(3) and
oData(i)(5) = oData(i-1)(5) then
oPlage.rows.RemoveByIndex(i, 1)
end if
next i
Si cette syntaxe "te parle" plus on peut aller plus loin dans son
utilisation en mettant également en tableau les numéros de colonne
à tester. Du coup, au lieu de faire un test "à rallonge" en combinant
des AND on boucle sur le tableau contenant les numéros de colonne.
J'ai illustré cela dans l'exemple joint:
SupprimerDoublons.ods
<http://nabble.documentfoundation.org/file/n4105500/SupprimerDoublons.ods>
Cordialement
Pierre-Yves
merci P.Y.S
je regarde pour adapter à mon cas !
mais j'ai déjà une erreur "Index hors de la plage définie"
merci P.Y.S
je regarde pour adapter à mon cas !
mais j'ai déjà une erreur "Index hors de la plage définie"
merci pour ta réponse 
j'ai quand même une dernière question !
if oLig(2) = oLigPrec(2) and oLig(3) = oLigPrec(3) and oLig(5) =
oLigPrec(5) then
oLig(2) = colonne C et oLigPrec(2) and oLig(3) = colonne C et D (ab) et
ensuite oLigPrec(3) and oLig(5) = oLigPrec(5)
j'ai besoin d'explication pour l'adapter à mon cas
merci d'avance !!
moi j'ai les colonnes : A, E, F, G, H, I, J, K, L, M, N
merci pour ton aide je regarde cela
et j'aime bien la seconde macro 
merci pour ton aide je regarde cela
et j'aime bien la seconde macro 