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
B
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
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
Cordialement,
Hello xorsankukai,
Et bien ça fonctionne nickel
Merci à toi
R@g