IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

acces a plage de donnee pour menu deroulant


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut acces a plage de donnee pour menu deroulant
    Bonjour, voila mon probleme
    Je veux remplir un menu déroulant sur une feuille1 à partir d'une plage de donnée située sur une feuille 2 et je n'arrive pas à accéder à cette plage de donnée.

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    With Selection.Validation
            .Delete
            '.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=$A$13:$A$14"
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=CUSTOMER_GROUP!$A$5:$A$655"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    Le code fonctionne avec la ligne en commentaire mais cela va chercher les données sur la meme feuille.

    Pour moi le problème vient de ma façon d'appeler ma feuille2(CUSTOMER_GROUP)dans mon formula1.

    Merci,

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Si les données se trouve dans une autre feuille que la liste, il faut que tu utilises les "noms"
    Sélection des cellules puis au dessus de la cellule A1 taper un nom (ex : toto)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    With Selection.Validation
            .Delete
            '.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=$A$13:$A$14"
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=toto"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    J'ai également tenté de passé par les noms en utilisant le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    ActiveWorkbook.Names.Add Name:="Toto", RefersToR1C1:="R12C1:R15C1"
    Range("A13").Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=Toto"
    .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    Mais ca ne fonctionne pas non plus il ne reconnais pas le =Toto au niveau de Formula1
    Merci quand meme JFontaine. Est ce que quelqu'un aurait une autre idée?

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    En fait tu dois d'abord mettre tous tes éléments dans un variable de type variant séparé par des virgules ensuite tu peux utiliser cette variable dans le Formula 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Private Sub CommandButton1_Click()
     
    Dim liste As Variant
    Dim j As Integer
     
    'Ma liste de valeurs va de B1 à B7 sur la feuille 1
    j = 1
    While (j <= 7)
        If (j <> 7) Then
            liste = liste + CStr(Worksheets("Feuil1").Range("B" + CStr(j)).Value) + ","
        Else
            liste = liste + CStr(Worksheets("Feuil1").Range("B" + CStr(j)).Value)
        End If
        j = j + 1
    Wend
     
    Worksheets("Feuil2").Range("D6").Select 'cellule où est inserée la liste
    With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=liste
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    End Sub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Merci beaucoup, c'est pas la méthode à laquelle j'avais pensé mais je comprend bien la logique seul hic j'ai une erreur d'execution au niveau de la première utilisation de la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    Dim liste As Variant
    Dim j As Integer
     
    'Ma liste de valeurs va de B1 à B7 sur la feuille 1
    j = 5
    While (j <= 15)
        If (j <> 15) Then
           ' a la ligne qui suit il me sort une erreur l indice n'appartien pas a la selection 
    liste = liste + CStr(Worksheets("CUSTOMER_GROUP").Range("A" + CStr(j)).Value) + ","
        Else
            liste = liste + CStr(Worksheets("CUSTOMER_GROUP").Range("A" + CStr(j)).Value)
        End If
        j = j + 1
    Wend
    Dim k As Integer
    k = 5
    While (k <> 15)
    Worksheets("BUDGET_NEW").Range("B" + CStr(k)).Select 'cellule où est inserée la liste
    With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=liste
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
        k = k + 1
    Wend

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    je n'avais pas d'erreur lors de l'execution
    A mon avis c'est une erreur au niveau du nom de ta feuille

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    ptitemar,
    Evite d'utiliser l'opérateur + pour concaténer.

    L'opérateur de concaténation est &.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    Dans le message du 10/08/2007, 14h38, tu avais oublié de spécifier le nom de la feuille contenant les données:


    Tu peux réessayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ActiveWorkbook.Names.Add Name:="Toto", RefersTo:="=Feuil2!A1:A10"
     
    With Worksheets("Feuil1").Range("A13").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Formula1:="=Toto"
     
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With


    michel

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Merci a tous pour vos participations. J'ai bien avancé sur le sujet mais il me reste cependant un problème:

    Les fonctions ci-dessous marche bien pour une boucle j qui ne contient pas plus de 11 élements mais au dessus ca ne marche pas et je pense que c'est dut au retour à la ligne dans ma variable Liste voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
        Dim liste As Variant
     
    Dim j As Integer
     
    'List of CUSTOMER_GROUP
    j = 5
     
    '-----------------Boucle 1
    While (j <= 100)
        If (j <> 100) Then
            liste = liste & CStr(Worksheets("CUSTOMER_GROUP").Range("A" + CStr(j)).Value) & ", "
        Else
            liste = liste & CStr(Worksheets("CUSTOMER_GROUP").Range("A" + CStr(j)).Value)
        End If
        j = j + 1
    Wend
     
    '--------------Fin Boucle 1
     
    'INSERT THE SCROLLING MENU OF CUSTOMER GROUP INTO THE BUDGET_NEW SHEET
    Dim k As Integer
    k = 10
    '--------------Boucle 2
    While (k <> 12)
    Worksheets("BUDGET_NEW").Range("A" + CStr(k)).Select 'cellule où est inserée la liste
    With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=liste
            .IgnoreBlank = True
            '.MultiLine = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
        k = k + 1
    Wend
    '-------------fin boucle 2
    Je pensais intégrer des retours à la ligne avant mes "," grace a chr(10) dans ma boucle 1 mais visiblement ca ne fonctionne pas.
    Si vous avez une idée...

Discussions similaires

  1. Fonction setTimeout() pour menu deroulant
    Par romca dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/03/2009, 11h07
  2. probleme de code en css pour menu deroulant
    Par gaya102 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 02/03/2009, 19h08
  3. [debutant]recuperer donnee dans menu deroulant
    Par lexu1213 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/06/2007, 12h43
  4. [MySQL] besoin d'aide pour menu deroulant a 3 niveaux
    Par fast462 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/05/2007, 10h46
  5. Intégration Javascript pour menu deroulant CSS compatible IE
    Par Dantahoua dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 18/08/2005, 21h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo