Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Function SansDoublonsTrié

2 réponses
Avatar
Circé
Bonjour à tous !

J'utilise régulièrement la Function SansDoublonsTrié créée par J.
Boisgontier, qui permet de récupérer dans une liste déroulante des
données triées et sans doublon d'une base.

Ça marche très bien sauf que... je viens de me heurter à un problème
qui est celui de la longueur de liste. A priori Excel a une limite de
2200 lignes. Au-delà, j'ai un message d'erreur...

Y a-t-il un contournement connu à cette limite ???

Circé
http://faqword.fr

ps :

Pour ceux qui connaissent pas, je copie-colle :

Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function

Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub

2 réponses

Avatar
MichDenis
Bonjour Circé,

Longueur de liste dans une liste déroulante ?

Quelle est ta version d'Excel ? De quelle liste déroulante parles-tu ?




"Circé" a écrit dans le message de groupe de discussion :

Bonjour à tous !

J'utilise régulièrement la Function SansDoublonsTrié créée par J.
Boisgontier, qui permet de récupérer dans une liste déroulante des
données triées et sans doublon d'une base.

Ça marche très bien sauf que... je viens de me heurter à un problème
qui est celui de la longueur de liste. A priori Excel a une limite de
2200 lignes. Au-delà, j'ai un message d'erreur...

Y a-t-il un contournement connu à cette limite ???

Circé
http://faqword.fr

ps :

Pour ceux qui connaissent pas, je copie-colle :

Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function

Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
Avatar
Circé
Bonjour MichDenis,


Bon, au temps pour moi, j'ai dit des âneries !! ;)
Quand on ne lit pas les messages d'erreur, voilà où ça mène... Le
message était "incompatibilité de type..."

Pour donner un peu plus d'explications, voilà où était mon pb :

J'ai une base de 2 colonnes, clients et pays, récupérés par formules
d'un autre classeur externe.
Dans le classeur actif, j'ai un petit formulaire avec une listbox qui
me donne la liste des clients pour un pays choisi (grâce à la fonction
de JB).
J'avais 2200 lignes au total dans la base + des lignes contenant des
formules qui ne pointaient sur rien (au cas où la base du classeur
externe devait s'agrandir)... C'est ces lignes là qui posaient
problème. Je les ai virées et j'ai donné des noms avec une formule
DECALER, et mon problème est résolu.

Merci quand même pour l'intérêt et à + ! ;)
Bon week end

Circé
http://faqword.fr

MichDenis a écrit :
Bonjour Circé,

Longueur de liste dans une liste déroulante ?

Quelle est ta version d'Excel ? De quelle liste déroulante parles-tu ?




"Circé" a écrit dans le message de groupe de discussion :

Bonjour à tous !

J'utilise régulièrement la Function SansDoublonsTrié créée par J.
Boisgontier, qui permet de récupérer dans une liste déroulante des
données triées et sans doublon d'une base.

Ça marche très bien sauf que... je viens de me heurter à un problème
qui est celui de la longueur de liste. A priori Excel a une limite de
2200 lignes. Au-delà, j'ai un message d'erreur...

Y a-t-il un contournement connu à cette limite ???

Circé
http://faqword.fr

ps :

Pour ceux qui connaissent pas, je copie-colle :

Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function

Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub