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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
Bonjour Circé,
Longueur de liste dans une liste déroulante ?
Quelle est ta version d'Excel ? De quelle liste déroulante parles-tu ?
"Circé" <circe@aea.gr> a écrit dans le message de groupe de discussion :
mn.d3247d9668f6b218.46999@aea.gr...
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
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
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
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é" <circe@aea.gr> a écrit dans le message de groupe de discussion :
mn.d3247d9668f6b218.46999@aea.gr...
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
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