Re: => DEMO Liste de Validation Construite par VBA (sans vide, triée et sans doublon
Bonsoir à tous ;-)
Sacré Jean Marie t'es vraiment allé chercher la petite bête, l'initialisation de la plage par des cellules.... comme indiqué dans le code était là "Just For the Fun" ... pour mon ami André qui n'aime pas trop les modules VBA !
Mais bon "le client est Roi" alors voici comment tu dois faire Jean-Marie:
'====================================DEBUT DE ZONE INUTILE !! lol ====================================
Dim CellDep As String, CellArr As String
Dim Size As Long
CellDep = Range("F11")
CellArr = Range("F12")
If CellDep = "" Or CellArr = "" Then MsgBox "Il faut spécifier une plage sur les cellules": Exit Sub
'===========================ON POURSUIT LE DELIRE DE L'INUTILE !! lol ====================================
' (mais çà fera plaisir à Jean Marie !!! )
Dim x As Byte, xx As Byte, xxx As Byte
For xx = 1 To Len(CellDep)
For x = 48 To 57
If Mid(CellDep, xx, 1) = Chr(x) Then xxx = xxx + 1
Next x
Next xx
Dim z As Byte, zz As Byte, zzz As Byte
For zz = 1 To Len(CellArr)
For z = 48 To 57
If Mid(CellArr, zz, 1) = Chr(z) Then zzz = zzz + 1
Next z
Next zz
Size = CLng(Right(CellArr, zzz)) - CLng(Right(CellDep, xxx))
MsgBox Size
Set Plage = Range(CellDep & ":" & CellArr)
Plage.Select
Exit Sub
Maintenant donc Size est bien délimitée quelque soit la plage que l'on tape (de A1 à IV65536 par exemple....)
Mais comme vous l'avez remarqué... Il y a un "Exit Sub" dans la macro car inutile de poursuire tellement plus loin.... Car une Liste de Validation reste une Liste de Validation, soit un petit "plus" pour faire des choses sympa dans les feuilles sans trop toucher de programmation (ou pas du tout) ...
Et Jean Marie, bien que s'expliquant bizarrement pour son histoire d'acceptation de données venant d'un tableau, même en utilisant un nom ??? enfin de quel Tableau parles-tu ?
Enfin bref, donc Jean-Marie à mis le doigt sur les limites de cette petite Liste de Validation : la longueur de la chaîne de caractères est limitée à 255 et je préciserais que donc la chaine suivante : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 pour avoir dix choix dans la liste.... "Coûte" 29 caractères.... Donc c'est vite fait de la remplir cette mini Liste !!!
Pour conclure, non cette petite appli que j'ai réalisée pour André a d'ailleurs été paramétrée (limitée) as Byte tout à fait volontairement pour ne pas dépasser la capacitée de la List de Validation elle-même....
Ceci dit la plage pour le Tableau Séquentiel (pas celui de Jean Marie), "Dynamic Array" pour être clair, peut être une large plage.... L'important est de ne pas retourner plus de 255 caractères, sinon la pauvre petite Liste de Validation va être submergée (sans message VBA) mais elle ne pourra qu'afficher "#Value"....
Donc pour SYL's, si sa plage dépasse 255 (limite de Byte) il peut passer en Integer les variables suivantes :
Dim a As Integer, i As Integer, ii As Integer, j As Integer, y As Integer
et aussi la fameuse "Size", mais Integer suffira aussi (long c'est au cas ou tu dépasse 32767... (çà laisse de l'espace... Sauf pour ceux qui travaillent dans IV65536 !!)
Enfin Voilà, pour passer à des plus grandes tailles, je pense que c'est bien pour ceci qu'il y a tout une panoplie d'ActiveX, qui n'ont, quant à eux, que les limites de l'imagination du développeur !
En fait il suffit de retourner le Tableau trié sans doublon dans une ListBox de Feuille directement au stade où on en est... Il suffit de faire :
1°) dessiner une ListBox ActiveX sur la Feuille (Boite à Outils "Contrôle)
2°) remplacer la ligne :
TheList = TheList & ", " & Item
par:
Sheets("Home").ListBox1.AddItem Item
3°) supprimer toute la partie finale à partir de "With ActiveCell.Validation.... Jusqu'à End With inclu...
Là.... No Limit !
Bonne Soirée et merci à tous pour vos compliments, c'est sympa ;-)
@+Thierry