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

mynameisjeff a écrit :

semi-automatique

KESAKO ?

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

Rechercher des sujets similaires à "liste deroulante vba"