Merci Ryu, connaissant ta soif d'apprendre …
Pour éliminer les doublons il y a encore le filtre avancé - s'il y a une ligne de titres - avec des colonnes temporaires.
Tout est une question de contexte ou de contraintes imposées …
J'ai une préférence pour la formule - si les colonnes sont sans doublon - mais avec un grand volume de données
la célérité de l'objet Dictionary peut prévaloir et côté MAC, ne pas oublier la Collection.
Si quelqu'un me demande que choisir, je conseille la solution avec laquelle il est le plus à l'aise afin de la maintenir …
Envoyé par
MrcRafale
J'ai essayé différentes boucles (Do while, If, For...), le programme n'affiche jamais ce que je veux.
Le programme accomplit juste les instructions codées …
Donc pour ceux ayant des problèmes d'algorithmie et même pour des doublons par colonne :
Envoyé par
Menhir
A la main, ça ne serait pas très compliqué à faire.
Envoyé par
Marc-L
En utilisant le B-A-BA d'Excel, une formule de calculs (comme justement souligné par Menhir),
source sans titre en colonnes A & B, colonne C vide, résultat en colonne D
Ryu, à partir de ton classeur joint, les critères sont cellule A1 non vide,
la première occurrence du nom dans la colonne et nom n'existant pas dans la colonne B,
voici donc la formule de la cellule D1 avec une version française d'Excel :
=SI($A1>"";SI(NB.SI(INDIRECT("$A$1:$A$"&LIGNE());$A1)=1;SI(NB.SI($B$1:$B$6;$A1)=0;$A1;"");"");"")
La recopier vers le bas jusqu'à la cellule D6 …
Pour la colonne B, il suffit de commencer en D7 puis d'adapter la formule en inversant les références
des colonnes A & B et en insérant une soustraction de 6 au numéro de ligne de la cellule :
1 2 3 4 5 6 7 8 9 10 11
| Sub Demo1c()
Cells(4).CurrentRegion.Clear
R& = Cells(1).CurrentRegion.Rows.Count
F$ = "=SI($A1>"""";SI(NB.SI(INDIRECT(""$A$1:$A$""&LIGNE());$A1)=1;SI(NB.SI($#$1:$#$" & R & ";$A1)=0;$A1;"""");"""");"""")"
Cells(4).Resize(R).FormulaLocal = Replace(F, "#", "B")
Cells(R + 1, 4).Resize(R).FormulaLocal = Replace(Replace(Replace(F, "$A", "$B"), "))", ")-" & R & ")"), "#", "A")
With Cells(4).Resize(R * 2)
.Formula = .Value
.Sort .Cells(1), xlAscending, Header:=xlNo
End With
End Sub |
Comme quoi quand l'algorithmie paraît compliquée, une simple formule de calculs peut résoudre le besoin !
Penser Excel avant VBA !
_________________________________________________________________________________________________________
Pour apprendre quelque chose aux gens, il faut mélanger ce qu’ils connaissent avec ce qu’ils ignorent. (Pablo Picasso
Partager