EXCEL VBA - J'ai perdu un string !!

Résolu/Fermé
karine666 Messages postés 48 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 18 décembre 2012 - 23 janv. 2009 à 18:00
 karine666 - 26 janv. 2009 à 09:47
Bonjour,

voilà j'ai un petit soucis de programmation sous EXCEL 2003. En effet, je cherche à faire une liste de choix dans un cellule, proposant les choix trouvé dans un autre fichier.
Je cherche donc ma liste de valeurs à proposer, et je me retrouve avec une string 288 char. Que je mets dans ma validation.
Le probleme est que la cellule n'affiche pas tous les choix. On dirait qu'il en manque une cinquantaine. Comme s'il ne pouvait afficher que 250 char ??
Je me suis que ca venait de ma variable intermediaire (list_of_value), et je l'ai donc cassée en 2 (list_of_value2), là j'ai tout, donc les infos sont bien là. Mais quand je copie tout ca dans la formule de validation (.Formula1), et bien ca ne me m'affiche pas toute la variable. Seulement (a peu pres) 250 char...

voici mon code
With Workbooks(DB_File_Name).Sheets(Sheet_text_calibration).Range("A:A")
Set objCell = .find(What:=MyArg.CPC_INTER, LookIn:=xlValues, MatchCase:=True)
If Not objCell Is Nothing Then
PremAdresse = objCell.Address
Do
If Find_in_DB Is Nothing Then Set Find_in_DB = objCell
'on lit les differentes valeurs et on les avale
If Len(list_of_values) > 200 Then
list_of_values2 = list_of_values
list_of_values = ""
End If
list_of_values = Workbooks(DB_File_Name).Sheets(Sheet_text_calibration).Cells(objCell.Row, 2).Value & "," & list_of_values
Set objCell = .FindNext(objCell)
Loop While Not objCell Is Nothing And objCell.Address <> PremAdresse
End If
End With
'on vire la derniere virgule
list_of_values = Mid(list_of_values, 1, Len(list_of_values) - 1)

With ActiveSheet.Cells(LignePlus1, 6).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, OPERATOR:= _
xlBetween, Formula1:=list_of_values2 & list_of_values
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Choose TC"
.ErrorTitle = "Warning ; I detect an error"
.InputMessage = ""
.ErrorMessage = "This TC is unknown ; are you dislexic ?"
.ShowInput = True
.ShowError = False
End With

Merci à tous pour m'avoir lue !
bisous
A voir également:

4 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 janv. 2009 à 18:03
Bonjour,

Avec un titre comme ça tu vas trouver une âme charitable pour te le retrouver ...

Dsl, mais c'était trop tentant.

;o)
2
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
24 janv. 2009 à 00:05
Bonsoir,

J'ai retrouvé le string de karine !!!!
Une liste de validation est limitée à 255 caractères, séparateurs compris.
Il ne te reste plus qu'à mettre ta liste de validation en colonne dans un onglet à part, de nommer la plage et d'utiliser ce nom comme source de la validation avec: =nomdelaliste

eric
2
Bonjour

J'ai peur qu'excel impose une limite sur la longueur de ce paramètre, même si je n'ai rien trouvé à ce sujet dans MSDN.

Par contre, dans l'aide d'Excell (2000, mais sûrement valable pour 2003) :
Formula1 obligatoire. Formula2 ignoré. L'argument Formula1 doit contenir soit une liste de valeurs délimitées par des virgules, soit une référence de feuille de calcul à cette liste.


Tu dois donc pouvoir t'en tirer sans string :-D))) en mettant tes valeurs dans une feuille (éventuellement temporaire) et en laissant une référence à cette feuille "en dur" dans ton script.
0
Merci beaucoup !

C'est bien ce que je pensais pour les 255 char. Cela correspond à mes observations. Il ne me reste plus qu'a envoyer les valeurs dans une autre feuille et faire une reference. C'est embetant, mais j'ai pas trop le choix.

merci pour l'aide
@+ bisous tout plein
0