Liste déroulante en VBA
Bonjour à tous,
J'ai une formule d'une liste déroulante mais qui ne marche pas.
Sub AFFICHDONNEES()
'
' AFFICHDONNEES Macro
'
'
Range("F6").Select
Range("F6:F9999").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=DECALER(INDIRECT($O$1);0;0;NBVAL(INDIRECT($O$1)))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Range("C3").Select
End Sub
Ca me met erreur d'exécution 1004
Erreur définie par l'application ou par l'objet.
En 01, j'ai une liste déroulante qui marche très bien.
Je voudrais que la macro me définisse toutes les cellules de F6 à F9999 comme des liste avec la formule plus haut.
Merci d'avance pour toute aide.
Cordialement
Bonjour
Quelle sont les données qui doivent faire partie de la liste déroulante ?
Crdlt
Bonjour Dan,
J'ai ma liste en O1 qui comporte 3 choix : LS / TRAD / TRAD_LS
Et j'ai des listes de pièces pour chaque choix.
Prenons par exemple :
LS : POMME / POIRE / ANANAS / POIRIER
TRAD : POMME / CERISE / POIRIER / FIGUE
TRAD_LS : POMME / POIRE / ANANAS / POIRIER / CERISE / FIGUE
TRAD_LS étant la liste de l'ensemble des références LS + TRAD
Le problème est que ces noms ont été copiés par une macro et font référence à des noms d'une autre feuille.
Donc du coup les cellules même vide de la liste, ne sont pas considérées comme vide.
Donc il me faut utiliser la fonction indirect pour faire référence à la liste en O1 et il me faut utiliser la fonction décaler pour utiliser
mes listes de produits sans le choix des cellules vides.
D'où cette formule dans données / validation des données :
=DECALER(INDIRECT($O$1);0;0;NBVAL(INDIRECT($O$1)))
Cependant, cette formule marche très bien.
Mais lorsque je veux forcer une macro à me le mettre de façon automatique pour les cellules F6 à F9999.
J'ai le message d'erreur : erreur d'exécution 1004 : erreur définie par l'application ou par l'objet.
Oui, je n'ai pas d'autre choix que de demander à une macro d'effectuer cette action car j'ai une autre macro qui me fige la valeur de la pièce pour l'utiliser comme valeur.
Il me faut donc redéfinir mon choix de liste par une nouvelle macro.
Voici la formule de ma macro :
Sub AFFICHDONNEES()
'
' AFFICHDONNEES Macro
'
'
Range("F6").Select
Range("F6:F9999").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula:="=OFFSET(INDIRECT(O1);0;0;NBVAL(INDIRECT(O1)))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Et c'est l'étape en couleur qui bloque.
Après je rechercherai à effectuer une liste semi automatique mais déjà résoudre ce problème me serait d'un grand secours.
Merci encore pour l'aide.
Cordialement
Bonjour Dan,
J'ai ma liste en O1 qui comporte 3 choix : LS / TRAD / TRAD_LS
Et j'ai des listes de pièces pour chaque choix.
Prenons par exemple :
LS : POMME / POIRE / ANANAS / POIRIER
TRAD : POMME / CERISE / POIRIER / FIGUE
TRAD_LS : POMME / POIRE / ANANAS / POIRIER / CERISE / FIGUE
TRAD_LS étant la liste de l'ensemble des références LS + TRAD
Le problème est que ces noms ont été copiés par une macro et font référence à des noms d'une autre feuille.
Donc du coup les cellules même vide de la liste, ne sont pas considérées comme vide.
Donc il me faut utiliser la fonction indirect pour faire référence à la liste en O1 et il me faut utiliser la fonction décaler pour utiliser
mes listes de produits sans le choix des cellules vides.
D'où cette formule dans données / validation des données :
=DECALER(INDIRECT($O$1);0;0;NBVAL(INDIRECT($O$1)))
Cependant, cette formule marche très bien.
Mais lorsque je veux forcer une macro à me le mettre de façon automatique pour les cellules F6 à F9999.
J'ai le message d'erreur : erreur d'exécution 1004 : erreur définie par l'application ou par l'objet.
Oui, je n'ai pas d'autre choix que de demander à une macro d'effectuer cette action car j'ai une autre macro qui me fige la valeur de la pièce pour l'utiliser comme valeur.
Il me faut donc redéfinir mon choix de liste par une nouvelle macro.
Voici la formule de ma macro :
Sub AFFICHDONNEES()
'
' AFFICHDONNEES Macro
'
'
Range("F6").Select
Range("F6:F9999").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula:="=OFFSET(INDIRECT(O1);0;0;NBVAL(INDIRECT(O1)))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Et c'est l'étape en couleur qui bloque.
Après je rechercherai à effectuer une liste semi automatique mais déjà résoudre ce problème me serait d'un grand secours.
Merci encore pour l'aide.
Cordialement
Bonjour
A tester
Sub AFFICHDONNEES()
'
' AFFICHDONNEES Macro
'
With Range("F6:F9999").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="=OFFSET(INDIRECT($O$1),0,0,COUNTA(INDIRECT($O$1)))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Bonjour,
Merci pour ta réponse.
Effectivement le fait d'écrire en anglais, maintenant la macro marche.
Est-ce que je peux faire en sorte que cette liste devienne semi-automatique dans ma macro ?
Ce serait l'objectif final.
Merci en tout cas.
Cordialement
Bonjour
KESAKO ?mynameisjeff a écrit :semi-automatique
Si pas de réponse, clôture ce post et ouvre en un autre
Oui semi-automatique, j'entends pas là que ma saisie dans la liste de cellules où j'ai
Ma liste soit une saisie semi automatique.
Par exemple si je tape "po"
Que la liste me propose pomme et poire
Et que si j'appuie sur la touche echap que j'ai à nouveau ma liste complète.
Merci encore
Cordialement
Bonjour
Il faut que tes listes soient triées
La formule originale n'est pas de moi, je l'ai juste adaptée à ton cas
Formule originale
=DECALER(Liste;EQUIV(B3&"*";Liste;0)-1;0;NB.SI(Liste;B3&"*"))
Ta macro
Sub AFFICHDONNEES()
'
' AFFICHDONNEES Macro
'
With Range("F6:F9999").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="=OFFSET(OFFSET(INDIRECT($O$1),0,0,COUNTA(INDIRECT($O$1))),MATCH(f6&""*"",OFFSET(INDIRECT($O$1),0,0,COUNTA(INDIRECT($O$1))),0)-1,0,COUNTIF(OFFSET(INDIRECT($O$1),0,0,COUNTA(INDIRECT($O$1))),f6&""*""))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = False
End With
End Sub
Parfait ça fonctionne exactement comme voulu.
Merci beaucoup pour ton aide!
Cordialement