• Initiateur de la discussion Initiateur de la discussion mimi9469
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

mimi9469

Guest
Bonjour,

J'ai construit une liste de validation des données de la maniere suivante :

For Each cell In ActiveSheet.Range("B4:B53")
list = list & cell.Value & " , "
Next

puis je l'utilise comme cela :

With cell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _
Operator:=xlBetween, Formula1:=list
.IgnoreBlank = False
.InCellDropdown = True
.ErrorTitle = ""
.ErrorMessage = "This project is not declared"
.ShowError = True

End With

J'obtien bien ma dropdown liste, mais elle ne contient a chaque fois que 10 elements. La liste "list", elle, en contient beaucoup plus. Je ne trouve pas ou modifier la taille par defaut.

Merci d'avance pour vos reponses !!!!
 
Re : xlValidateList

Bonjour,

J'ai déjà vu un probleme ce type. De mémoire, ça "marchouille" et je crois que de toutes façons, il y a une limite liée à la taille de la variable ("List" dans ton cas).
Chez moi, ça plante meme Excel (Excel 2002)
Pourquoi ne pas faire directement référence à la plage de cellule ?
Voir fichier joint.

Sub test()
With Selection.Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=" & Range("B4:B53").Address
.InCellDropdown = True
.ShowError = True
End With
End Sub
 

Pièces jointes

Re : xlValidateList

Bonjour,

le probleme c'est que ma liste est dans un autre onglet et que je ne peux pas y faire reference directement (enfin je ne crois pas...).
J'ai essayé ta solution en mettant le nom de mon onglet :
Formula1:="=" & Sheets("Projects").Range("B4:B53").address
Mais ca ne marche pas, j'obtiens les cellules de la page en cours...
 
Re : xlValidateList

bonjour mimi9469

Salut Catrice🙂

vois cet exemple dont tu pourrais peut-etre t'inspirer

List est declarée Public

tes macros legerement transformée sont dans les worksheet.activate des feuilles 1 et 2

Code:
Private Sub Worksheet_Activate()
For Each cell In ActiveSheet.Range("B4:B53")
List = List & cell.Value & " , "
Next
End Sub
 
 
Private Sub Worksheet_Activate()
With Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _
Operator:=xlBetween, Formula1:=[COLOR=red]ActiveSheet.Name & "!"[/COLOR] & List
.IgnoreBlank = False
.InCellDropdown = True
.ErrorTitle = ""
.ErrorMessage = "This project is not declared"
.ShowError = True
End With
 

Pièces jointes

Dernière édition:
Re : xlValidateList

Bonjour,

Pour faire réference à une autre feuille, je propose de passer par un nom.
Voir exemple joint.

PierreJean, dans ton exemple, si le nb de lignes augmente, j'ai le meme pb qu'à l'origine, je plante Excel.
 

Pièces jointes

Re : xlValidateList

Effectivement, il doit y avoir une limit a list
l'utilisation de la plage nommée resoud bien le problème

Bonjour a tous,

En cherchant à comprendre la démo de "_Thierry" (recherchev sans recherchev2 qui date de 2003), je rencontre un problème inattendu (au passage merci à _Thierry c'est fort instructif).

sa solution utilise un tableau pour alimenter la liste de validation et le résultat est tronqué si la liste est longue.

étant donné la discussion, connaissez vous une solution pour dépasser cette limite ?
Est il possible de faire la même chose avec un tableau dynamique ?

Merci d'avance

PS: c'est mon premier post pardonnez mes erreurs éventuelles

ci-dessous le code et en pièce jointe un fichier de test:

Option Explicit
'Thierry's Macro Démo sur Excel-Downloads.com, February 2003


Sub ListeRechercheV()
Dim MyArray(0 To 29) As String 'adapter
Dim Cell As Range
Dim Plage As Range
Dim WSSource As Worksheet
Dim WSCible As Worksheet
Dim i As Integer
Dim ii As Integer
Dim iii As Integer

Set WSSource = Sheets("Database")
Set Plage = Sheets("Recherche").Range("A2:A30") 'à adapter

ii = 0
For Each Cell In Plage
For i = 1 To 30 ' à adapter
If Cell.Value = "" Then Exit Sub
If Cell.Value = WSSource.CellS(i, 1) Then
MyArray(ii) = MyArray(ii) & ", " & WSSource.CellS(i, 2).Value
Cell.Offset(0, 1).Value = WSSource.CellS(i, 2)
iii = iii + 1
End If
Next i
If MyArray(ii) = "" Then
MsgBox "Pas de Ville avec ce code Postal : " & Cell.Value, vbCritical, "Thierry's Démo"
Exit Sub
End If
With Cell.Offset(0, 1).Validation
.Delete
.Add Type:=xlValidateList, _
Operator:=xlBetween, _
AlertStyle:=xlValidAlertStop, _
Formula1:=MyArray(ii)
End With
If iii > 1 Then
Cell.Offset(0, 1).Value = ""
End If
MyArray(ii) = ""
ii = 0
iii = 0
Next Cell
End Sub
 
Re : xlValidateList

Bonjour Pierre Jean,

Merci bien pour cette étude express.

Je n'ai plus qu'a étudier ta solution.
Je me permettrais de revenir vers toi si j'ai quelques soucis de compréhension.

Merci encore pour ton aide

A bientôt sans doute

Jean-François
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

A
Réponses
27
Affichages
2 K
adet ruireux
A
Réponses
11
Affichages
3 K
F
N
Réponses
12
Affichages
1 K
NadJP
N
Réponses
12
Affichages
1 K
M
Réponses
2
Affichages
1 K
moialbert2
M
T
  • Question Question
Réponses
3
Affichages
1 K
T
  • Résolu(e)
XL pour MAC lenteur du vba
Réponses
16
Affichages
3 K
W
  • Question Question
Réponses
1
Affichages
1 K
P
Réponses
7
Affichages
2 K
Réponses
2
Affichages
953
Retour