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 :

Fonction VBA liste déroulante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2023
    Messages : 4
    Par défaut Fonction VBA liste déroulante
    Bonjour,

    J'aimerais réaliser une fonction VBA (avec une variable) qui permette de faire les choses suivantes :

    - Si la cellule choisie comme variable est remplie par un "Non" alors la fonction prend pour valeur "-"
    - Si la cellule choisie comme variable est remplie par un "Oui", alors la fonction prend comme valeur une liste déroulante

    Je sais faire une fonction qui affiche un message si la variable est "Oui" et un autre message si la variable est "Non" mais je n'arrive pas à créer une liste déroulante.
    J'ai regardé des discussions parlant de liste déroulante mais c'est toujours dans le cas d'une procédure et pas d'une fonction.
    Pouvez vous m'aidez?
    Merci d'avance pour votre temps!

    A+

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    si tu cherche à effacer le "OUI" et insérer une liste de validation
    adapter ça
    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
    Sub listeValidation()
     Application.ScreenUpdating = False
    Dim cel As Range
    Dim plage As Range
    Set plage = Sheets("feuil2").Range("A1:B40")
    For Each cel In plage
       If cel.Value = "OUI" Then
             cel.Select
             cel.Delete
             With Selection.Validation
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=C:C"
            End With
        End If
    Next cel
     Application.ScreenUpdating = True
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2023
    Messages : 4
    Par défaut
    Bonjour,

    Merci pour votre réponse, voici une photo de mon fichier excel, je pense que cela sera plus facile :
    Nom : image.png
Affichages : 134
Taille : 62,3 Ko

    J'ai le choix entre Oui ou Non dans la cellule R6. En fonction de ce choix, je voudrais en cellule S6 (à coté) :

    - Soit un "-" si j'ai Non en R6 (pour avoir une valeur par défaut qu'on ne peut pas changer)
    - Soit une liste déroulante permettant de choisir entre plusieurs stade de traitement si j'ai Oui dans la cellule R6 (le choix dans la liste déroulante entrainera différents calculs dans le second tableau)

    Peut être qu'il est impossible de faire cela avec une fonction. Je ne voulais pas faire une procédure car j'aimerais que tout s'ajuste automatiquement sans avoir à lancer une macro à chaque choix "Oui" ou "Non".

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    voir avec worksheet_change
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Not Application.Intersect(Target, Range("R6")) Is Nothing Then
     
       If Range("R6").Value = "OUI" Then
             Range("S6").Select
             Range("S6").Delete
             With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="A,B,C,D"
            End With
            Else
            Range("S6").Select
             Range("S6").Delete
             With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="-"
            End With
       End If
       End If
       Application.EnableEvents = True
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une autre approche
    Vous construisez vos listes déroulantes en R6 et N6 normalement et vous copiez cette procédure dans le module de la feuille de ces cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
       With Target
         If .Address = "$R$6" Then
            Range("S6").Validation.InCellDropdown = Not (.Value = "No")
            Application.DisplayAlerts = False
            If .Value = "No" Then Range("$S$6").Value = "-"
            Application.DisplayAlerts = True
         End If
       End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2023
    Messages : 4
    Par défaut
    Bonjour,

    Merci beaucoup pour la réponse! En effet cela fonctionne bien sur le fichier que vous avez envoyé mais si je copie la procédure sur mon fichier, je n'arrive pas à l’exécuter. Rien ne se passe et je ne sais pas comment faire. Désolé je suis vraiment débutant
    Et deuxième question, est ce que si je remplace la partie :
    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
     
     End With
            Else
            Range("S6").Select
             Range("S6").Delete
             With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="-"
            End With
     
    Par :
     
     End With
            Else
            Range("S6").Select
             Range("S6").Delete
             Range("S6") = "-"
    Pour ne pas avoir de liste déroulante dans le second cas, mais uniquement un "-" qui s'affiche directement?

    Merci d'avance et bonne journée!

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    n'est pas un code mais dans l’événement worksheet_change
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Not Application.Intersect(Target, Range("R6")) Is Nothing Then
     
       If Range("R6").Value = "OUI" Then
             Range("S6").Select
             Range("S6").Delete
             With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="A,B,C,D"
            End With
            Else
            Range("S6").Select
             Range("S6").Delete
             With Selection.Validation
            .Delete
          '  .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="-"
            End With
            Range("S6").Value = "-" ' ajouter cette partie
       End If
       End If
       Application.EnableEvents = True
    End Sub
    Images attachées Images attachées  

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/08/2007, 12h46
  2. [VBA] liste déroulante avec requête
    Par dalmasma dans le forum VBA Access
    Réponses: 17
    Dernier message: 16/07/2007, 14h52
  3. Réponses: 15
    Dernier message: 14/07/2007, 20h12
  4. Réponses: 1
    Dernier message: 04/05/2007, 12h15
  5. Problème fonction affichage listes déroulantes
    Par JLDR69 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/09/2006, 19h06

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