Excel VBA validation de données

Fermé
schoret2 Messages postés 4 Date d'inscription jeudi 14 juin 2018 Statut Membre Dernière intervention 14 juin 2018 - 14 juin 2018 à 07:29
 PEB - 27 déc. 2018 à 23:22
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

schoret2 Messages postés 4 Date d'inscription jeudi 14 juin 2018 Statut Membre Dernière intervention 14 juin 2018
14 juin 2018 à 09:25
J'ai trouvé ...

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=OFFSET(NOM,,,COUNTIF(NOM,""><""))"
0
gbinforme Messages postés 14935 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 638
14 juin 2018 à 09:47
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
gbinforme Messages postés 14935 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 638
Modifié le 14 juin 2018 à 09:30
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)"

Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.  Antoine de Saint-Exupéry
0
gbinforme Messages postés 14935 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 638
14 juin 2018 à 20:43
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
schoret2 Messages postés 4 Date d'inscription jeudi 14 juin 2018 Statut Membre Dernière intervention 14 juin 2018
14 juin 2018 à 21:17
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
schoret2 Messages postés 4 Date d'inscription jeudi 14 juin 2018 Statut Membre Dernière intervention 14 juin 2018
14 juin 2018 à 21:26
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
J'ai exactement le même problème : erreur 1004
0