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 :

Mise à jour automatique de valeurs saisies avec des listes déroulantes si modification des données sources


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 17
    Par défaut Mise à jour automatique de valeurs saisies avec des listes déroulantes si modification des données sources
    Bonjour à tous,

    Je suis coincé sur un problème depuis maintenant un petit moment et je n'arrive pas à m'en sortir tout seul.

    Mon soucis est le suivant :

    Mon fichier Excel contient 3 feuilles :

    Sur la 1ère feuilles :
    Cette feuille contient 2 listes, une dans la colonne A et l'autre dans la colonne C. Ces listes me servent de données sources pour des listes déroulantes sur les feuilles suivantes.
    Je precise que ces listes sont de tailles variables, on peut ajouter des valeurs ou les modifier, elles sont également nommées via le gestionnaire de nom de manière dynamique (avec DECALER et NBVAL)

    2ième feuille :
    On remplit un tableau ou chaque cellule contient une liste déroulante à partir de la colonne A de la feuille 1. Disons que la plage de mon tableau est "D2:Z20" (en réalité mon tableau est plus grand)

    3ième feuille :
    On remplit un tableau ou chaque cellule contient une liste déroulante à partir de la colonne C de la feuille 1. Disons que la plage de mon tableau a une plage identique au précédent "D2:Z20"

    Je souhaiterais que lorsque je modifie les données sources dans la feuille 1, les données se mettent automatiquement à jour sur les feuilles 2 et 3.
    En fouillant sur internet et en me débrouillant je suis arrivé au 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim cell As Range
        Dim isect As Range
        Dim vOldValue As Variant, vNewValue As Variant
     
        Set isect = Application.Intersect(Target, ThisWorkbook.Names("LST_BUILD_STATION").RefersToRange)
        If Not isect Is Nothing Then
            Application.EnableEvents = False
            With Target
                vNewValue = .Value
                Application.Undo
                vOldValue = .Value
                .Value = vNewValue
            End With
     
            For Each cell In Sheet2.UsedRange.SpecialCells(xlCellTypeAllValidation)
                With cell
                    If .Validation.Type = 3 And .Validation.Formula1 = "=LST_BUILD_STATION" And .Value = vOldValue Then
                        cell.Value = vNewValue
                    End If
                End With
            Next cell
            Application.EnableEvents = True
        End If
    End Sub
    Je précise que pour le moment le code ne fonctionne que pour la feuille 2, étant donné que je n'arrive pas au résultats voulu, je ne l'ai pas encore modifié pour la feuilles 3.

    Les problèmes que je rencontre sont les suivants :

    - Si je saisie une nouvelle valeur dans ma liste de la feuille 1 puisque l'ancienne valeur était "" la macro remplace toutes les cellules vides de mon tableau par la valeur que je viens de saisir, et puisqu'en réalité mon tableau est imposant (100x500) cela prends une éternité

    -Dans le cas ou j'aurais sur la même feuille plusieurs liste déroulante avec des sources de données différentes, la macro ne fait pas la difference, elle recherche uniquement les cellules avec une validation de données type liste

    Désole pour le roman mais j'ai essayé d'être le plus précis possible

    Si je peux vous apporter des precisions supplémentaires n'hésitez pas (capture d'écran, fichier, ou autre precisions...)
    Je précise également que je suis debutant en VBA.

    Merci d'avance

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    CF exemple en PJ

    Boisgontier
    http://boisgontierjacques.free.fr
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 17
    Par défaut
    Bonjour et merci pour ta réponse.

    Malheuresement je n'arrive pas à appliquer les solutions proposer dans tes fichier.

    Avec le premier fichier (DVMaj) je n'arrive pas à appliquer le changement de valeurs lorsque je modifie une données "source", car contrairement à ton exemple je ne remlis pas une liste mais un tableau.
    Le point positif est que lorsqu'on ajoute une nouvelle donnée "source", toutes les cellules vide au format liste déroulante ne se remplissent pas avec cette nouvelle valeur.

    Avec le second fichier (dvliaisonLangue), lorsque je modifie une donnée "source" ça marche super
    Par contre quand j'ajoute une nouvelle donnée "source", toutes les cellules vides au format liste déroulante de mon tableau prennent cette nouvelle valeur.

    Ce que je cherche est donc un mix des deux solutions.

    J'espère avoir été assez précis, je continue de plancher la dessus mais si jamais tu as une solution je suis preneur

    Merci encore

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/07/2014, 01h40
  2. Réponses: 1
    Dernier message: 13/06/2012, 09h45
  3. Mise à jour automatique de la JList avec un Vector
    Par th0m44 dans le forum Composants
    Réponses: 1
    Dernier message: 09/05/2011, 01h17
  4. mise à jour de champs en fonction d'une liste déroulante
    Par kifouillou dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 09/04/2008, 16h37
  5. Mise à jour d'un champ texte via une liste déroulante
    Par dedein84 dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2008, 20h24

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