Merci d'avoir répondu ... Maintenant cela fonctionne bien merci.
voici le petit code si ça peut aider quelqu'un d'autre ...
Il créé une liste déroulante de choix si la condition est vrai, si non il la supprime pour redevenir une cellule normale 
cette formule supprime les blanc dans la liste =DECALER(_Détaillant_liste;;;NB.SI(_Détaillant_liste;"><")) 
Sub menu_auto()
Application.ScreenUpdating = False
   
If Range("_Main_type") = "Dépence" Then
   
    With Range("O13").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=OFFSET(_Détaillant_liste,,,COUNTIF(_Détaillant_liste,""><""))"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    Else
   If Range("_Main_type") = "Revenu" Then
With Range("O13").Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
        :=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    End If
    End If
   
End Sub