Liste déroulante et saisie libre

bbcancer

XLDnaute Nouveau
Bonjour,

J'ai peut être une question bête et peut être il n'y a pas de solution mais voilà mon problème.
J'ai 2 colonnes : ma 1ère colonne est une colonne avec une liste déroulante (donc la pas de souci) et dans ma 2ème colonne, j'aimerais avoir la possibilité en fonction de ma 1ère colonne soit avoir une liste déroulante (choix imposés) soit possibilité d'écrire ce que je veux.

Par exemple en colonne I j'ai le choix entre abs just, retard, poids, autres....
Pour la colonne J (qui dépend du choix de ma colonne I) :
- pour asb just : A, B, C
- pour retard : saisie libre (cad que je peux marquer ce que je veux)
- pour poids : D, E, F
- pour autres : saisie libre (cad que je peux marquer ce que je veux)

Je ne sais pas si c'est clair. Au pire je vous joins un fichier

Merci par avance pour vos réponses

Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Liste déroulante et saisie libre

Bonjour Bbcancer, Michel, bonjour le forum,

Je plussoie Michel, avec un fichier c'est mieux...

En pièce jointe un exemple à adapter à ton cas avec le code ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim lv As String 'décalre la variable lv (Liste de Validation)

'si le changement a lieu dans la plage "I2:I51" (tu adapteras à ton cas), sort de la procédure
If Application.Intersect(Target, Range("I2:I51")) Is Nothing Then Exit Sub
If Selection.Cells.Count > 1 Then Exit Sub 'si le nombre de cellules sélectionnées est supérieur à 1, sort de la procédure
Target.Offset(0, 1).Validation.Delete 'supprime une éventuelle validation de données dans la cellule de la colonne J
Target.Offset(0, 1).ClearContents 'supprime le contenu de la cellule de la colonne J
Select Case Target.Value 'agit en fonction de la valeur de la cellule éditée
    Case "abs just" 'cas "abs just"
        lv = "A,B,C" 'définit la liste de validation lv
    Case "poids" 'cas "poids"
        lv = "D,E,F" 'définit la liste de validation lv
    Case Else 'tous les autres cas
        lv = "" 'vide la loste de validation lv
End Select 'fin de l'action en fonction de la valeur de la cellule éditée
If lv <> "" Then 'condition : si lv n'est pas vide
    With Target.Offset(0, 1).Validation 'prend en compte la validation de données de la cellule de la colonne J
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=lv 'attibut la liste de validation lv
    End With 'fin de la prise en comnpte de...
End If 'fin de la condition
End Sub
Le fichier (que j'ai pas eu la flemme d'envoyer moi... Et paf !) :

 

Pièces jointes

  • bbcancer_v01.xls
    42 KB · Affichages: 90

bbcancer

XLDnaute Nouveau
Re : Liste déroulante et saisie libre

Merci pour cette information, je vais le tester...
Par contre si mes plages sont dans un autres onglet. comment je peux faire?
Allez cette fois ci je mets un fichier en exemple!!!! (fichier simplifié mais il y a au moins 500 lignes)
Mais merci pour votre aide
 

Pièces jointes

  • Commentaire.xls
    121.5 KB · Affichages: 74
  • Commentaire.xls
    121.5 KB · Affichages: 87
  • Commentaire.xls
    121.5 KB · Affichages: 82

Robert

XLDnaute Barbatruc
Repose en paix
Re : Liste déroulante et saisie libre

Bonsoir le fil, bonsoir le forum,

En pièce jointe une version 2 avec le code ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim StrValidation As String
Dim r As Range
Dim cel As Range

If Target.Column = 5 And Target.Count = 1 Then
    Set r = Sheets("Liste commentaire").Columns(1).Find(Target.Value, , xlValues, xlWhole)
    If Not r Is Nothing Then
        For Each cel In r.MergeArea
            StrValidation = IIf(StrValidation = "", cel.Offset(0, 1).Value, StrValidation & "," & cel.Offset(0, 1).Value)
        Next cel
    End If
    'Ajoute la validation sur la cellule a droite de la cellule cible
    Target.Offset(0, 1).Validation.Delete
    Target.Offset(0, 1).Value = ClearContents
    If StrValidation <> "" Then
        With Target.Offset(0, 1).Validation
            .Delete
            If StrValidation <> "" Then
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=StrValidation
            End If
        End With
    End If
End If
End Sub
Le fichier :
 

Pièces jointes

  • Bbcancer_v02.xls
    121 KB · Affichages: 111

bbcancer

XLDnaute Nouveau
Re : Liste déroulante et saisie libre

:confused::confused:Aie aie ...
En travaillant sur mon fichier original, je me suis aperçue que la 2ème liste si elle est trop longue il n'y a pas tout qui apparaît!!!
Comment ça se fait???
Y a-t-il une solution pour régler ce problème?

Merci d'avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Liste déroulante et saisie libre

Bonsoir le fil, bonsoir le forum,

Un petit exemple aurait été le bienvenu... Une variable déclaré String accepte jusqu'à 65536 caractères. Aurais-tu atteint cette limite ?
 

Fo_rum

XLDnaute Accro
Re : Liste déroulante et saisie libre

Bonsoir,

cela ne viendrait-il pas des cellules fusionnées qui posent souvent des problèmes.
Voici un exemple qui n'utilise pas de fusion (peur de la réaction en chaîne ;)).
Attention : il faut finir par une cellule non vide !
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim StrValidation As String
  Dim C As Range
  Dim r As Long, n As Long
  With Sheets("Liste commentaire")
    If Target.Column = 5 And Target.Count = 1 Then
      Target.Offset(0, 1).Validation.Delete: Target.Offset(0, 1) = ""
      Set C = .Columns(1).Find(Target, , xlValues, xlWhole)
      If Not C Is Nothing Then r = C.Row
      If Target = "" Or .Cells(r, "B") = "" Then Exit Sub
      Do
        StrValidation = StrValidation & .Cells(r + n, "B") & ","
        n = n + 1
      Loop Until .Cells(r + n, "A") <> ""
      With Target.Offset(0, 1).Validation
        If StrValidation <> "" Then
          .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=StrValidation
        End If
      End With
    End If
  End With
End Sub
 

Pièces jointes

  • Listes de Validation (VBA).xls
    48 KB · Affichages: 86

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 059
Membres
104 014
dernier inscrit
Aurélie MONTEIL