Excel VBA validation de données

Bonjour,

J'essaie via l'enregistreur de macro d'excel de faire une liste de validation de données
j'obtiens une erreur 1004

ma formule =decaler(NOM;;;nb.si(NOM;"><")) fonctionne pourtant bien avec excel ...

voici la modeste macro
----------------------------------
Sub menu_auto()

With Range("O13").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=DECALER(NOM;;;NB.SI(NOM;""><""))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
-----------------------------------
J'ai également essayer de traduire ma formule en anglais qui donne
=offset(NOM;;;countif(NOM;"><"))
et sa fonctionne pas non plus.

merci de votre aide.

3 réponses

  1. Contributeur
    Bonjour,

    Je tiens vraiment à ce qui est donné comme solution fonctionnelle le soit vraiment et la solution fournie par shoret2 ne me semble pas fonctionner car j'obtiens une erreur 1004 comme dans la question initiale.

    Voilà le résultat qui se produit et il me semble que j'ai bien copié la ligne de code
    Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=OFFSET(NOM,,,COUNTIF(NOM,""><""))" 

    Peux-tu nous confirmer ta solution en me disant ce qui cloche chez moi pour pouvoir valider la discussion ?
    0
    1. Chez moi ce bout de code fonctionne parfaitement maintenant.
      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

      merci de m'avoir répondu.
      0
    2. et ensuite dans ma feuille excel j'y ai mis ce code

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Call menu_auto
      End Sub
      0
    3. J'ai exactement le même problème : erreur 1004
      0
  2. Contributeur
    Bonjour,

    ma formule =decaler(NOM;;;nb.si(NOM;"><")) fonctionne pourtant bien avec excel ...
    Là je demande à voir ....
    Ceci fonctionne :
    =DECALER(NOM;;;NBVAL(NOM);1)

    Et en macro cela donne :
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=offset(NOM,,,counta(NOM),1)"
    

    0
    1. J'ai trouvé ...

      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=OFFSET(NOM,,,COUNTIF(NOM,""><""))"
      0
      1. Contributeur
        Content pour toi mais si tu pouvais donner le lien d'un fichier exemple ce serait parfait car (Jusqu'à preuve du contraire !) je le vois mal fonctionnel...
        0