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 :

Creation d'une liste ou non dans une celulle en fonction d'une condition


Sujet :

Macros et VBA Excel

  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut Creation d'une liste ou non dans une celulle en fonction d'une condition
    Bonjour,

    Je suis devant un petit problème.
    Je cherche à placer dans une celulle soit une valeur soit une liste avec le premier élément de la liste "actif".

    J'ai un test sur Sheet1.A20 qui renvoie TRUE ou FALSE. La formule regarde si la celulle Sheet1.A1 est vide ou non.
    2 cas:
    Si TRUE alors une la valeur en Sheet1.A1 est copiée en A21 est "envoyée" dans Sheet2.B1
    Si FALSE alors une liste située en Sheet3.A1:A10 est "placée" dans Sheet2.B1

    Des calculs sont faits en fonction de la valeur de la celulle en Sheet2.B1, il est important que la celulle ne soit pas vide.

    J'ai essayé de faire cela avec un Sub Worsheet_Change mais j'ai lamentablement échoué. Rien ne se pass lorsque je change la valeur en Sheet1.A1.
    Voici un extrait du code.

    Je suis aussi preneur d'une solution sans VBA.

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        With ThisWorkbook.Worksheets(Sheet2).Range("B1")
          If ThisWorkbook.Worksheets(Sheet1).Range("A20").Value Then
            .Clear
            .Value = ThisWorkbook.Worksheets(Sheet1).Range("A21").Value
          Else
            .Validation.Delete
            .Validation.Add Type:=xlValidateList, Formula1:="=Data_trajets_noms"
            'If you don't want the first list value of Data_trajets_noms put into B8 then remove the next line of code
            .InCellDropdown = True
            .Value = ThisWorkbook.Worksheets(Sheet3).Range("A1:A10").Cells(1).Value
          End If
        End With
        Application.EnableEvents = True
      End If
    End Sub

  2. #2
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 609
    Par défaut
    Hello,

    je n'ai pas testé, juste lu le code et je tique sur les noms Sheet1, 2 et 3.
    Tel que vous les avez écrit ce sont des variables, pas de noms de feuille, donc Worksheets(Sheet1) ça correspond à Worksheets(0) si Sheet1 n'est pas déclaré ailleurs (...et donc ça doit planter)

    Soit vous mettez les noms des feuilles entre ", soit vous utilisez les CodeName ce qui simplifie la lecture du code et permet à l'utilisateur de modifier les noms des feuilles sans que ça pose problème dans la macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sheet1").Range("A20").Value
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheet1.Range("A20").Value
    ...si Sheet1 est le codename de la feuille

    Vous n'êtes pas obligé de répéter ThisWorkbook non plus
    Nom : 2026-07-08_19-17-41.png
Affichages : 34
Taille : 91,6 Ko
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  3. #3
    Invité de passage
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut
    Merci.
    J'ai oublié de rajouter les "".
    Ils sont présents dans le fichier excel.

  4. #4
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 609
    Par défaut
    Vous pouvez mettre un fichier d'exemple en pièce jointe svp ?
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  5. #5
    Invité de passage
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut
    Voila.
    Test sur Sheet1.R91
    Celulle cible en Sheet2.B8. Pour l'instant je n'affiche qu'un 0...
    Fichiers attachés Fichiers attachés

  6. #6
    Invité de passage
    Homme Profil pro
         ​​​  
    Inscrit en
    Décembre 2025
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité :      ​​​  

    Informations forums :
    Inscription : Décembre 2025
    Messages : 73
    Par défaut
    Le test dans R91 échoue pour détecter le vide dans N8.
    changer la formule dans R90 par =EPURAGE(TRAJET_HHO)

    Sinion tu peux tester TRAJET_HHO directement dans le code sans passer par une formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          If ThisWorkbook.Worksheets("SaisieHHO").Range("TRAJET_HHO").Value <> "" Then
            .Clear

  7. #7
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 609
    Par défaut
    Waouh...
    C'est quoi ce bin's
    En fait je ne comprend pas bien le pourquoi de ce que vous voulez faire.

    Je vous donne la logique que je comprend
    - si saisie dans la cellule N8
    si R91 de la feuille SaisieHHO contient VRAI
    alors vider la cellule R8 de le feuille saisie et mettre le contenu de R92 de la feuille SaisieHHO
    sinon supprimer la liste de B8 et en remettre une avec DATA_TRAJETS_NOMS

    Donc, si je choisi un trajet en N8 il se retrouve bien dans B8 mais si vide N8 je met quand même le contenu de B8 (rien donc 0 en valeur). Donc la macro fonctionne, MAIS votre problème se situe dans la formule en R90/R91.

    R90 : ce qui est dans N8, donc s'il n'y a rien c'est 0
    R91 : si R90 contient qqchose alors Vrai et comme 0 c'est qqchose c'est toujours vrai

    Donc, pour que R91 passe à Faux il faudrait que la formule soit =N8<>""
    Si vous tenez à utiliser la cellule R90, la formule devrait être =R90<>0

    En passant, voici une version simplifié (et un peu plus claire) de votre macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("N8")) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        With Worksheets("Saisie").Range("B8")
            If Worksheets("SaisieHHO").Range("R91").Value Then
                .Clear
                .Value = Worksheets("SaisieHHO").Range("R92").Value
            Else
                .Validation.Delete
                .Validation.Add Type:=xlValidateList, Formula1:="=DATA_TRAJETS_NOMS"
            End If
        End With
        Application.EnableEvents = True
    End Sub
    Edit : c'est encore mieux avec la solution de @Informt2025
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  8. #8
    Invité de passage
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut
    Cela fonctionne.
    Merci messieurs.

    Je suis d'accord que c'est un sacré bazar mais je dois réutiliser un fichier existant et rajouter une couche. Je fais comme je peux.

Discussions similaires

  1. [X3-V7] Liste de choix dans un champ en fonction d'un autre
    Par leloup84 dans le forum SAGE
    Réponses: 9
    Dernier message: 06/08/2019, 16h33
  2. Réponses: 1
    Dernier message: 01/07/2014, 10h11
  3. Réponses: 3
    Dernier message: 13/11/2008, 23h55
  4. création d'une liste dans une barre d'outils
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/09/2008, 15h39

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