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 :

Aide VBA + Listes Dynamiques Interdépendantes = reset


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Aucune
    Inscrit en
    Juin 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Juin 2023
    Messages : 2
    Par défaut Aide VBA + Listes Dynamiques Interdépendantes = reset
    Bonjour. Nouveau sur ce forum, et loin d'être expert en Excel (que j'utilise surtout de manière occasionnelle), je viens ici querir l'aide de pointures pour m'aider à solutionner des soucis apparus suite à mes réponses à d'autres soucis...
    J'explique de manière plus détaillée ci-dessous:

    Je travaille sur un document possédant un total de deux feuilles de calcul, la seconde servant de conteneurs de référence pour les listes et formule de la première.
    Sur cette première feuille se trouve un ensemble de 5 listes déroulantes dynamiques et interagissant ensemble de la manière suivante:
    -Liste 1= 2 choix tels que: 1= autorise une liste de choix restreints dans la liste 3; 2= étend la liste 3 et autorise tous ses choix.
    -Liste 2= 2 choix tels que: 1= mène à une version.a de la liste 3; 2= mène à une version.b de cette même liste 3.

    A ce moment, nous avons donc déjà 4 itérations de la liste 3: Liste 3_restreinte.a; Liste 3_étendue.a; Liste 3_restreinte.b; Liste 3_étendue.b.
    Les versions restreintes offrent 6 choix (en version a et b), et les versions étendues offrent, elles, un choix de plus, pour un total de 7 (également en version a et b).

    La Liste 4 propose quant à elle un nombre de choix variable (de 4 à 25 pour les versions a, de 4 à 26 pour les versions b), dépendant des choix de la Liste 3. Enfin, une dernière liste, la numéro 5, ne propose que des solutions à deux choix, dont les valeurs disponibles sont déterminées par l'ensemble des valeurs sélectionnées dans les listes précédentes.
    Bon, en version écrite, ça peut paraître un peu touffu, mais dans les faits, c'est en réalité assez basique. Tout fonctionne à merveille, ok, mais une chose me pose souci, c'est que modifier un choix, par exemple dans la Liste 3, pour sélectionner une valeur qui rend "invalide" l'une des valeurs auparavant sélectionnées dans une des listes suivantes, ne "reset" pas les listes suivantes à leur état d'origine. De plus, certaines cellules dans les tableaux de données (seconde feuille), possèdent des conditions qui leur permettent d'afficher un espace vide ou une valeur, selon les choix des diverses listes de la première feuille, et du coup, ces cellules restent disponibles en tant que "choix blanc" dans lesdites listes. De fait, même si rien n'y est écrit, elles peuvent encore être sélectionnées, donnant accès aux choix subséquents des listes suivantes.

    J'ai tout d'abord tenté de solutionner ce dernier souci par l'usage conjoint de fonctions INDIRECT, ADRESSE et NBVAL. Ceci n'a pas malheureusement pas fonctionné, puisque la formule adapte la taille de la liste déroulante pour en exclure les cellules ne contenant PAS de valeur, mais que les cellules que je souhaite exclure, bien que "vides", contiennent une formule, considérée comme valeur par Excel.

    Enfin, concernant le souci des listes "subordonnées" qui ne reviennent pas à leur état originel après modification d'une valeur au sein d'une liste "parente", j'ai tenté, de manière maladroite, de passer par l'exécution d'une macro VBA.
    Et là, je dois admettre que j'ai un gros souci, puisque ne connaissant rien au VBA, j'ai d'abord suivi un tutoriel me permettant de lancer une macro "bonjour". La macro fonctionnait parfaitement, et, une fois sur ma feuille Excel, en faisant alt+f8, ladite macro apparaissait dans la liste des macros disponibles.

    j'ai ensuite suivi les mêmes procédures afin de créer la macro suivante trouvée sur une page de ce même forum:

    Private Sub Worksheet_Change(ByVal Target as Range)
    If Target.Address = "$A$2" Then Range("A4").ClearContents
    End Sub

    J'en ai bien sûr changé les références aux cellules de cette manière:

    If Target.Address = "AD3" Then Range("AK6").ClearContents

    Où AD3 est ma liste numéro 2, et AK6 ma liste numéro 3, censée être remise à zéro après modification de la section AK6. HORS, pour le coup, la macro n'agit pas, et si je fais alt+F8 pour ouvrir la liste des macros disponibles, elle n'y apparait pas. Tentant d'explorer ce problème, j'ai copié et collé tout un ensemble de macros diverses et variées trouvées sur plein de pages internet, mais aucune de ces macro n'était au final reconnu par la liste alt+F8.
    J'ai naturellement bien vérifié, mon document est bien enregistré au format XLSM, et j'ai activé l'exécution de l'ensemble des macros dans la partie "sécurité des macros". Donc, je rate sans doute quelque chose, mais quoi ?

    En vous présentant mes excuses pour ce LONG pavé indigeste, mais au moins, je pense avoir bien expliqué mes besoins, mon cheminement et mes soucis.
    Merci d'avance de vos possibles réponses.

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Aucune
    Inscrit en
    Juin 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Juin 2023
    Messages : 2
    Par défaut UP
    Personne ? LOL. Je continue d'expérimenter seul, mais sans parvenir à solutionner ce problème...

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    Hello,
    Citation Envoyé par NightySama Voir le message
    Personne ? LOL. Je continue d'expérimenter seul, mais sans parvenir à solutionner ce problème...
    Problème avec énoncé long , sans capture d'écran et sans classeur exemple = peu de chance de réponse.
    Plus de chance de réponse avec seulement un exemple simple qui décrit le point technique qui bloque.
    Ami calmant, J.P

  4. #4
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 033
    Par défaut
    Bonjour,
    Je pense que vous avez trouvé l'idée en utilisant un événement sur chaque changement de valeur d'une cellule pour mettre à vide les listes filles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target as Range)
    If Target.Address = "$A$2" Then Range("A4").ClearContents
    End Sub
    Si une cellule vide ne convient pas car certaines listes acceptent les vides, vous pouvez remplacer par un autre caractère (espace, tiret du huit, etc.) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target as Range)
    If Target.Address = "$A$2" Then Range("A4")=" "
    End Sub
    Dans la famille des macros (programmation de code VBA dans les modules) on peut distinguer deux cas :
    - Celles qui commencent par Sub : elles acceptent des éventuels arguments mais ne renvoient aucune donnée. Elles sont accessibles dans la liste des macros disponibles du classeur par Alt+F8 uniquement si elles ne comportent pas d'argument.
    - Celles qui commencent par Function : elles acceptent des éventuels arguments et renvoient une donnée. Elles ne sont pas accessibles dans la liste des macros disponibles du classeur par Alt+F8.

    Les événements commencent par Sub mais ne sont pas accessibles dans la liste macros disponibles du classeur par Alt+F8 (et généralement ils ont un argument).

    Pour lancer une macro le plus simple est de passer par l'éditeur : Alt+F11
    - Les macros de type Sub qui n'ont pas d'argument peuvent être lancées, après avoir sélectionné le code, par F5 (ou F8 pour faire du pas-à-pas).
    - Pour lancer une macro avec argument, le plus simple est d'utiliser la fenêtre d'exécution de l'éditeur Ctrl+G, faire Call ou ? suivi de la macro avec ses arguments.

    Vous pouvez mettre un point d'arrêt dans une macro.
    Tout ceci est expliqué plus en détail dans cette documentation : http://laurent-ott.developpez.com/tu...el-vba-tome-1/

    Bonne continuation.

Discussions similaires

  1. [Débutant] Aide combobox liste dynamique
    Par kikego dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/08/2018, 12h53
  2. [XL-2010] Listes déroulantes interdépendantes + source dynamique
    Par dragonslore dans le forum Excel
    Réponses: 1
    Dernier message: 04/10/2014, 11h10
  3. [XL-2007] VBA - Gestion dynamique liste
    Par lamselle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/12/2011, 18h49
  4. [struts] liste dynamique, aide sur création Form
    Par chouchou93 dans le forum Struts 1
    Réponses: 3
    Dernier message: 01/12/2006, 16h45

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