VBA liste déroulante via array

Hello le forum,

J’essaie de faire une liste déroulante avec des valeurs stockées dans un array ... mais mon code retourne l'erreur définie par l'application ou pas l'objet sur la ligne

.Add

Pourriez-vous m'aider svp ? Merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
    Dim Mes_Valeurs_D, Mes_Valeurs_S
    Select Case Range("B1")
        Case Is = "DEMARRAGES"
'            Mes_Valeurs_D = Split("TU; DIVISION_SECTEUR; SU; RESP_CLOSING", ";")

            Mes_Valeurs_D = Array("TU", "DIVISION_SECTEUR", "SU", "RESP_CLOSING")
            With Target.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=Mes_Valeurs_D
End With
        Case Is = "SORTIES"
            Mes_Valeurs_S = Array("TU", "TM_RH", "DIVISION_SECTEUR", "SU", "SALES")
        Case Else
            MsgBox "Merci d'indiquer la vue que vous souhaitez en cellule B1 !", vbCritical, "Cellule B1 vide"
            Exit Sub
    End Select
End If
End Sub

Hello

Est ce que tu dois absolument le faire par VBA ?

Et connais tu la fonction DECALER ? Elle te permettrait de faire ce que tu veux et de pouvoir adapter les listes déroulantes plus facilement

Hello,

Oui par VBA mes valeurs sont stockées nulle part. Sauf dans le code

Bonsoir Rag02700, BAROUTE78, le forum,

Je ne maitrise pas les Array, donc tout simplement:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Not Application.Intersect(Target, Range("B2")) Is Nothing Then

    Select Case Range("B1")
        Case Is = "DEMARRAGES"
            With Target.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="TU, DIVISION_SECTEUR, SU, RESP_CLOSING"
            End With

        Case Is = "SORTIES"
            With Target.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="TU, TM_RH, DIVISION_SECTEUR, SU, SALES"
            End With

        Case Else
            MsgBox "Merci d'indiquer la vue que vous souhaitez en cellule B1 !", vbCritical, "Cellule B1 vide"
            Exit Sub
        End Select
  End If
End Sub
6rag02700.xlsm (15.56 Ko)

EDIT: un essai avec Array....

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
    Dim Mes_Valeurs_D, Mes_Valeurs_S

            Mes_Valeurs_D = Array("TU", "DIVISION_SECTEUR", "SU", "RESP_CLOSING")
            Mes_Valeurs_S = Array("TU", "TM_RH", "DIVISION_SECTEUR", "SU", "SALES")

    Select Case Range("B1")
        Case Is = "DEMARRAGES"
            With Target.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=Join(Mes_Valeurs_D, ",")
            End With

        Case Is = "SORTIES"
            With Target.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=Join(Mes_Valeurs_S, ",")
            End With

        Case Else
            MsgBox "Merci d'indiquer la vue que vous souhaitez en cellule B1 !", vbCritical, "Cellule B1 vide"
            Exit Sub
       End Select
End If
End Sub
27rag02700-array.xlsm (16.03 Ko)

Cordialement,

Hello xorsankukai,

Et bien ça fonctionne nickel . Je préfère passer par les tableaux ( + propre )

Merci à toi

R@g

Rechercher des sujets similaires à "vba liste deroulante via array"