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 :

Ajouter - supprimer des scrollbars


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Bonjour à tous,

    J'aimerais créer une macro qui permet de créer et de supprimer des menus déroulants (ListBoxes).. Ou sinon, de les cacher et de les faire apparaître...

    J'ai enregistré manuellement une macro qui réalise cette opération (création + suppression) sur Excel, et cela donne 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
     
      Range("D8").Select
        ActiveSheet.DropDowns.Add(120, 101.25, 75.75, 15.75).Select
        Range("D9").Select
        ActiveSheet.Shapes.Range(Array("Drop Down 4")).Select
        With Selection
            .ListFillRange = "Feuil7!$F$8:$F$13"
            .LinkedCell = "Feuil7!$F$19"
            .DropDownLines = 8
            .Display3DShading = False
        End With
     
        ActiveSheet.Shapes.Range(Array("Drop Down 4")).Select
        Selection.Delete
     
    End Sub
    Le problème, c'est que pour supprimer un menu déroulant, j'ai besoin de connaitre son nom (ex : "Drop Down 4")... Et je me demandais si on pouvait modifier le nom du menu déroulant dans les paramètres de création, ou s'il était possible de connaître le nom du menu déroulant que l'on souhaite supprimer...

    Je vous remercie d'avance pour votre aide. Je suis bien sûr disponible pour préciser des points qui ne seraient pas suffisamment clairs..

    Je précise que j'aimerais modifier les menus déroulant en fonction des choix utilisateur...
    Si la valeur est 1 : cela affiche un menu déroulant, si la valeur est 2, ça en affiche un autre...

    Le problème principal réside dans l'identification du menu déroulant, car sans ça, je ne peux pas le sélectionner pour le supprimer ou le masquer...
    A la création, aucun nom ne lui est affecté, et je ne sais pas comment lui en affecter un ou récupérer le nom.

    (pour info, le menu déroulant auquel je fais référence peut être ajouté manuellement de la manière suivante: Onglet développeur => Insérer => Zone de liste déroulante).

    Merci d'avance.. Je suis un peu en panique,je en sais pas si ce problème a une solution..

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je t'ai donné un exemple basé sur ta Macro, si tu as besoin d'explications supplémentaires, n'hésite pas.

    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
    Sub comb()
        Dim Ws As Worksheet, Cel As Range, Dd As DropDown
     
        Set Ws = ActiveSheet
        Set Cel = Ws.Range("D8")
     
        With Cel
            Set Dd = Ws.DropDowns.Add(.Left, .Top, .Width, .Height)
        End With
     
        With Dd
            .Name = "Ma Liste déroulante personnelle"
            .ListFillRange = "Feuil1!$F$8:$F$13"
            .LinkedCell = "Feuil1!$F$19"
            .DropDownLines = 8
            .Display3DShading = False
        End With
     
        Dd.Delete
     
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Bon, au risque de paraître Skizo (je me fais les questions et les réponses), je pense avoir trouvé:
    il suffit de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .name = "Liste_déroulante"
    . Comme ça, il est possible de supprimer la liste en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ActiveSheet.Shapes.Range(Array("Liste_déroulante")).delete
    Désolé pour les spams, j'espère que ça pourra servir à certaines personnes qui ont à peu près le même niveau (médiocre) que moi en vba

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Merci Nouveau2,

    Je te remercie beaucoup pour ta réponse que je n'avais pas vue, j'en suis désolé.
    Ta solution fonctionne super bien, je t'en remercie.

    J'ai cependant une petite question, penses-tu qu'il soit possible d'écrire quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Dim Feuil_1 As Worksheet
    Set Feuil_1 = ThisWorkbook.Sheets("Feuil1")
     
    [...]
     
    With Dd
            .Name = "Ma Liste déroulante personnelle"
            .ListFillRange = Feuil_1.range(Feuil_1.cells(8, 6), Feuil_1.cells(13,6))
            .LinkedCell = Feuil_1.cells(19, 6)
            .DropDownLines = 8
            .Display3DShading = False
    End With
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Dd
            .Name = "Ma Liste déroulante personnelle"
            .ListFillRange = "Feuil1!$F$8:$F$13"
            .LinkedCell = "Feuil1!$F$19"
            .DropDownLines = 8
            .Display3DShading = False
        End With
    J'ai essayé mais cela ne semble pas fonctionner... Quel serait l'équivalent de "Feuil1!$F$8:$F$13" avec range ?

    Je te remercie d'avance

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut tibss,

    De rien.

    Concernant le texte, je ne pense pas qu'il existe de fonction VBA pour passer directement d'une écriture VBA à une écriture Excel. Par contre, assez bizarrement, l'inverse fonctionne avec le module de classe Range (Range("'[AAA v0.0.xlsm]Feuil 1'!$A$1:$A$10") fonctionne par exemple).
    Donc, je pense qu'il faut le faire à la main.

    Un exemple:
    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
     
        'Exemple classeur ouvert (à adapter) : "'[AAA v0.0.xlsm]Feuil 1'!$A$1:$A$10"
        Classeur = "AAA v0.0.xlsm" 'ThisWorkbook.Name 'Classeur Ouvert
        Feuille = "Feuil 1" 'ActiveSheet.Name
        PlageDeCellule(1) = "$A$1:$A$10" 'Range("A1:A10").AddressLocal
        PlageDeCellule(2) = "$F$19" 'Range("F19").AddressLocal
     
        Chaine(1) = "'[" & Classeur & "]" & Feuille & "'!" & PlageDeCellule(1)
        Chaine(2) = "'[" & Classeur & "]" & Feuille & "'!" & PlageDeCellule(2)
     
        [...]
     
        With Dd
            [...]
            .ListFillRange = Chaine(1) "'[AAA v0.0.xlsm]Feuil 1'!$A$1:$A$10"
            .LinkedCell = Chaine(2) "'[AAA v0.0.xlsm]Feuil 1'!$F$19"
            [...]
        End With
    C'est le .Name de Workbooks/Worksheets qui donneront un texte (String)
    Dernière modification par Invité ; 01/11/2013 à 13h18.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Merci pour ta réponse Nouveau2,

    Du coup, à en croire ton message, j'ai l'impression que la sémantique initiale est peut-être plus pratique que la seconde..
    Si j'ai besoin de spécifier mon workbook, je pourrai toujours mettre "[AAA v0.0.xlsm]" avant la référence de ma worksheet et de ma cellule...

    Sinon, dernière petite question toujours en relation avec la gestion des menus déroulants:
    Sais-tu s'il est possible de tester la présence d'un menu déroulant dans un fichier ?

    Je m'explique, en fonction des trois chois possibles, j'aimerais pouvoir supprimer les menus déroulants qui ne correspondent pas aux choix en question. Il s'agirait donc d'un suppression conditionnelle du style :

    Si le choix 1 a été sélectionné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If le menu déroulant2 existe Then
    Feuil1.Range(Array("Menu_déroulant_2")).Delete
    End If
     
    Else If le menu déroulant3 existe Then
    Feuil1.Range(Array("Menu_déroulant_3")).Delete
    End If
    Lorsque j'écris directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Range(Array("Menu_déroulant")).Delete
    , je reçois le message d'erreur suivant : "L'élément portant ce nom est introuvable".

    Sinon, il existe peut être un moyen de ne pas stopper l'exécution du programme quand on reçoit ce type de message d'erreur.

    Merci d'avance,

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Une autre chose me fait un peu peur, quand j'appelle ma macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Feuil1.DropDowns.Add(181, 612, 215, 15.75).Select
     With Selection
     .Name = "Nom"
     .Display3DShading = False
     .DropDownLines = 8
     .ListFillRange = "'Feuil2'!$D$2:$D$5"
     .LinkedCell = "'Feuil2'!$D$7"
     End With
    à partir d'une autre feuille que "Feuil1", cela me lance un message d'erreur : "propriété ou méthode non gérée par cet objet".. En surlignant " .Display3DShading = False", alors que cela fonctionne très bien quand je suis sur la feuille1... :s

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/01/2010, 19h32
  2. Réponses: 2
    Dernier message: 06/11/2008, 07h42
  3. [AJAX] Ajouter / Supprimer des éléments de la page
    Par bilou95 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/10/2007, 22h54
  4. ajouter supprimer des lignes en utilisant TABLE de ADF
    Par mans27 dans le forum JDeveloper
    Réponses: 6
    Dernier message: 15/06/2007, 11h43
  5. [DOM] Ajouter/supprimer des entrées d'une liste déroulante
    Par Zakapatul dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/05/2007, 10h25

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