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 :

Créer une liste déroulante dans une cellule avec liste dans une autre feuille VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Points : 56
    Points
    56
    Par défaut Créer une liste déroulante dans une cellule avec liste dans une autre feuille VBA
    Bonjour à tous!

    Voila grâce à ce bout de 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
    For compteDonnees = 2 To 20000
                        If Sheets("Données").Cells(compteDonnees, 3).Value = "" Then
                            Dim NewAddress As String
                            NewAddress = "M1:M" & compteDonnees - 1
                            Exit For
                        End If
                    Next compteDonnees
     
                    Sheets("Compte rendu").Activate
                    Sheets("Compte rendu").Unprotect ("excel")
                    Range("D" & compteur2).Select
                    With Selection.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=" & NewAddress
                        .IgnoreBlank = True
                        .InCellDropdown = True
                        .InputTitle = ""
                        .ErrorTitle = "Interdit"
                        .InputMessage = ""
                        .ErrorMessage = _
                        "Veuillez sélectionner une valeur dans la liste déroulante de la cellule."
                        .ShowInput = True
                        .ShowError = True
                    End With
    je devrais pouvoir créer une liste déroulante dans une cellule. La liste se créée bien, le problème sont les données qui sont dedans. Mes données se situent dans une feuille "Données". Le problème c'est qu'avec cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=" & NewAddress
    Et bien il va chercher les données dans la feuille "Compte rendu" et non dans la feuille "Données". Comment lui indiquer que je souhaite utiliser les données d'une autre feuille svp?

    En le faisant par enregistreur de macro, il est impossible de sélectionner une liste dans une feuille différente de celle où l'on veut créer la liste. Est-ce possible de faire ça?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewAddress = "Données!M1:M" & compteDonnees - 1

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Points : 56
    Points
    56
    Par défaut
    Ceci ne fonctionne pas.
    J'ai une erreur sur cette ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=" & NewAddress
    Edit : J'ai essayé en mettant un nom de plage plutôt que d'entrer en dur les coordonnées. Voici le résutat :

    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("Liste").Delete
                              For compteDonnees = 2 To 20000
                        If Sheets("Données").Cells(compteDonnees, 3).Value = "" Then
                            ActiveWorkbook.Names.Add Name:="Liste", RefersToR1C1:="=Données!R2C3:R" & compteDonnees - 1 & "C3"
                            Exit For
                        End If
                    Next compteDonnees
     
                    Sheets("Compte rendu").Activate
                    Sheets("Compte rendu").Unprotect ("excel")
                    Range("D" & compteur2).Select
                    With Selection.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween , Formula1:="=Liste"
    ....
    Mais cela bloque lors de la suppression du nom de la liste, est-ce que quelqu'un sait pourquoi svp?
    PS : Je viens d'y penser, mes feuilles sont protégées mais peut-être que le classeur complet aussi, je vais regarder de ce côté la!

    Edit 2 : Le classeur n'est pas protégé, mauvaise piste...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    C'est valable avec XL2010. Je regarde.

    Quel est le message d'erreur ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Points : 56
    Points
    56
    Par défaut
    Voici l'erreur : Erreur d'exécution '1004':
    Erreur définie par l'application ou par l'objet

    En me surlignant bien cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=" & NewAddress

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Points : 56
    Points
    56
    Par défaut
    Voila, j'ai finalement trouvé un code qui fonctionne, le voici :

    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("Liste").Delete
                    For compteDonnees = 2 To 20000
                        If Sheets("Données").Cells(compteDonnees, 3).Value = "" Then
                            ActiveWorkbook.Sheets("Données").Range("C2:C" & compteDonnees - 1).Name = "Liste"
                            Exit For
                        End If
                    Next compteDonnees
     
                    Sheets("Compte rendu").Activate
                    Sheets("Compte rendu").Unprotect ("excel")
                    Range("D" & compteur2).Select
                    With Selection.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=Liste"
                        .IgnoreBlank = True
    C'est l'ajout du nom Liste qui n'était pas écris correctement, j'ai trouvé cette syntaxe dans l'aide Microsoft.
    Merci à toi Daniel.C pour m'avoir aidé en tout cas!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/06/2012, 16h13
  2. Selectionner une valeur dans une liste déroulante sur le net avec vba
    Par zneidi77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2012, 15h48
  3. Réponses: 8
    Dernier message: 13/08/2010, 09h18
  4. Réponses: 1
    Dernier message: 17/06/2007, 10h10
  5. Réponses: 3
    Dernier message: 14/08/2006, 21h27

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