Menu

Excel VBA validation de données

schoret2 4 Messages postés jeudi 14 juin 2018Date d'inscription 14 juin 2018 Dernière intervention - 14 juin 2018 à 07:29 - Dernière réponse : schoret2 4 Messages postés jeudi 14 juin 2018Date d'inscription 14 juin 2018 Dernière intervention
- 14 juin 2018 à 21:26
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.
Afficher la suite 

Votre réponse

6 réponses

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

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=OFFSET(NOM,,,COUNTIF(NOM,""><""))"
gbinforme 15099 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 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...
Commenter la réponse de schoret2
gbinforme 15099 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - Modifié par gbinforme le 14/06/2018 à 09:30
0
Merci
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
Commenter la réponse de gbinforme
gbinforme 15099 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 14 juin 2018 à 20:43
0
Merci
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 ?
schoret2 4 Messages postés jeudi 14 juin 2018Date d'inscription 14 juin 2018 Dernière intervention - 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.
schoret2 4 Messages postés jeudi 14 juin 2018Date d'inscription 14 juin 2018 Dernière intervention - 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
Commenter la réponse de gbinforme