(VBA) Contenu illisible suite liste déroulante

Hello le forum,

J'ai un gros problème ...

Dans un classeur, je veux afficher une liste déroulante dans la feuille "OSCAR" colonne 6. Ceci se fait avec un événement SELECTION CHANGE.

Mon algo est le suivant :

  • Je récupère la valeur de la colonne 5 de la même ligne dans l'onglet "OSCAR"
  • Je recherche cette valeur dans mon onglet "liste" colonne 3
  • Je recupère la valeur de la couleur
  • J'affiche dans ma target toutes les valeurs ayant la meme couleur de fonds de ma colonne 4 onglet liste.

Le problème c'est qu'il y a un bug dans ma liste mais je ne trouve pas quoi ...

Dans ma target j'ai bien la liste mais quand j'enregistre j'ai le message "Contenu ilisible blabla..."

Ex dans mon fichier avec la SU= TELECOM_MEDIA ça plante quand j'enregistre ....

Sauriez-vous comment je peux me sortir de là ?

Merci à vous.

22osc-demo-v2.xlsm (265.73 Ko)

Bonjour Rag02700

Désolé, mais apparemment le problème esr sur ton PC, chez moi ça fonctionne sans problème à l'enregistrement

A+

Bonsoir,

Je rencontre bien ton problème mais épisodiquement. Il se produit apparemment dès lors qu'un certain nombre de caractères sont entrés dans la liste de validation via VBA.La limite pourrait être par exemple 256.

Bonjour à tous,

thev a bien vu > si on limite dans la boucle à 16 noms > ça donne 250 caractères et la liste fonctionne bien. Au 17e > ça plante.

ric

Bonsoir,

En modifiant ta façon de procéder (sans VBA) et en modifiant tes params

Il semble ne plus y avoir de problème

A+

Hello le forum,

Bon apparemment j'ai ma réponse, elle me convient pas mais je l'ai

En effet, j'avais remarqué que ça venait des caractères ... je ne savais pas que c’était la limite, je pensais qu'excel ne voulait pas d'un des noms ...

Ok... Je vais faire différemment du coup

A tout hasard il n'y aurait pas une astuce pour contourner ?

En tout cas merci pour votre aide

R@g

En revanche, j'ai une question par rapport à ça ...

Pourquoi quand je fais ma liste déroulante directement via "données"-"validation" et que je prends ma liste de la ligne 2 à la dernière ligne, le fichier ne plante pas ????

Bonjour à tous,

... A tout hasard il n'y aurait pas une astuce pour contourner ? ...

Si la réponse de BrunoM45 ne te convient pas ET que le nombre d'items de la liste restait sensiblement le même, tu pourrais toujours ne prendre que les x premiers caractères de chaque item afin de ne pas dépasser les 254 caractères de la limite.

IIf(Resultat = "", Left(Cellule.Value, 8), Resultat & "," & Left(Cellule.Value, 8))

C'est une astuce parmi d'autres ...

Pour la dernière question, je ne répondrai pas sans la présence de mon avocat.

ric

Bonjour à tous,

autre façon :

   Dim Resultat() As String
    '...
    '...
    '...
    ReDim Resultat(1 To 500)
    i = 0
    For Each Cellule In plage
        If Cellule.Interior.ColorIndex = Couleur Then i = i + 1: Resultat(i) = Cellule.Value
    Next Cellule
    ReDim Preserve Resultat(1 To i)

    With ActiveCell.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:=Join(Resultat, ",")

eric

'...

Bonjour à tous,

Effectivement Rag02700, tu as vu juste > si l'on passe par le code, on est limité à 254 caractères.

Mais si l'on pointe sur une plage, tout fonctionne bien.

Je suggère donc de masquer la colonne H et de tester ce code, lequel compose dans la colonne H la liste dynamique au gré des choix.

Sub Liste_selon_couleur(Couleur As Byte, Head_col As String)
Dim plage, Plage_SM As Range, Cellule As Range
Dim i, D_Ligne_liste As Byte
Dim Ws As Worksheet

Set Ws = Worksheets("OSCAR")

   i = 1
   Do Until Sheets("Liste").Cells(1, i).Value = Head_col
      i = i + 1
   Loop
   D_Ligne_liste = Sheets("Liste").Cells(1, i).End(xlDown).Row

   With Worksheets("Liste")
      Set plage = .Range(.Cells(2, i), .Cells(D_Ligne_liste, i))
   End With

   Ws.Range("H5:H" & Cells(Rows.Count, "H").End(xlUp).Row).ClearContents ' vider la plage au préalable

   i = 0
   For Each Cellule In plage
      If Cellule.Interior.ColorIndex = Couleur Then i = i + 1: Ws.Cells(i + 5, "H") = Cellule.Value
   Next Cellule

   With ActiveCell.Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=H6:H" & i + 5
      .IgnoreBlank = True
      .InCellDropdown = True
      .InputTitle = ""
      .ErrorTitle = ""
      .InputMessage = ""
      .ErrorMessage = ""
      .ShowInput = True
      .ShowError = True
   End With
End Sub

ric

Hello,

Merci à vous. Je regarderai toutes vos solution au travail lundi

Pour ma gouverne ,

Je voudrais assembler 2 plages dans la formule de ma liste déroulante...

Exemple

set plage1 = sheets("Liste").Range("C2:C5")
Set plage2 = sheets ("Liste").Range("D2:D5")

With ActiveCell.Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Liste!" & plage1.address & plage2.address
      .IgnoreBlank = True

Je ne suis pas certain du tout de ma syntaxe

Est ce que ce code renvoie les 2 plages de liste ? ( Je ne peux pas tester de chez moi)

Merci a vous.

Bonjour,

Si l'on utilise ces plages dans une validation manuelle, on a le message :

"La liste Source doit être délimitée ou faire références à une seule ligne ou colonne."

ric

Ok

Merci ric.

Bonjour,

ci-jointe une proposition de solution via gestion de références.

11osc-demo-v4.xlsm (278.57 Ko)
Rechercher des sujets similaires à "vba contenu illisible suite liste deroulante"