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 cellule basée sur liste déroulante si liste déroulante modifiée [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 30
    Points : 15
    Points
    15
    Par défaut Mise à jour automatique cellule basée sur liste déroulante si liste déroulante modifiée
    Bonsoir à tous les utilisateurs d'Excel...et aux autres aussi !

    Après une recherche via l'outil recherche et après la lecture de plus d'une dizaine de page sans aucune piste je me tourne vers vous.

    Je vous explique la situation:

    Je dois déterminer un indice de difficulté pour chaque catégorie de produit d'un magasin.

    Pour ce faire j'ai créé un tableau "Liste de critères" qui recense les critères et les valeurs que chaque critère peut prendre.

    Donc pour le critère poids on a:
    -Léger
    -Moyen
    -Lourd

    Et pour chaque valeur de chaque critère j'attribue une note ici:
    -0.5
    -1
    -2

    J'ai donc fais cela pour 4 critères avec un nombre de valeurs variable ce qui me donne 36 possibilités possibles.

    J'ai fait la liste des 36 combinaison de note possible afin d'avoir une note totale par possibilités. Et a partir de ce tableau que j'ai fait à la main (je ne sais pas le faire en VBA donc si quelqu'un à une idée je prends ), je récupère, pour chaque combinaison, le libellé de chaque note pour chaque critère afin d'avoir un intitulé du style:

    Léger - Hauteur d'homme - 1 à plusieurs - 3.
    le 3 étant le totale de la note des 3 critères précédents.

    A partir de la liste des 36 libellés dont le modèle est ci-dessus, je crée une liste déroulante dans chaque cellule du tableau qui contient toute mes catégories de produits afin d'attribué une note à chacun d'entre eux.

    Mon problème est que:

    Si je modifie dans mon tableau liste critères (qui recense les critères ), que je modifie soit le libellé soit la note de l'une des valeur de l'un des critères, le contenu de ma liste déroulante ce modifie (logique et c'est ce que je veux) MAIS le contenu de la cellule ne change pas, et il faut donc que je sélectionne de nouveau, pour chaque famille le libellé qui m'intérèsse.
    (dans la feuille que je vous joins j'ai limité les famille mais j'en ai 200 au total, je vous laisse imaginer combien c'est fastidieux)


    Mon souhait:

    Je voudrais savoir s'il est possible de mettre à jour le contenu de la cellule automatiquement du moment que je modifie le tableau qui permet la création de la liste déroulante.

    Souhait annexe: j'aimerais pouvoir générer automatiquement (et pas à la main) la liste des combinaisons possibles à partir du tableau Liste critères.

    Mon idée:

    J'aimerais faire un peu comme sous Access, c'est à dire que pour chaque combinaison possible, j'attribue un indice (un rang ou une clé primaire c'est comme vous voulez ) et que ma liste déroulante soit basé sur cet indice la MAIS que dans la liste déroulante, le libellé (qui est la concaténation de tous les critères) soit affiché et non pas l'indice qui le représente.

    De ce fait, si je modifie les libellés ou notes du tableau "liste critères", mes libellés dans les cellules seront modifiés car l'indice sélectionné dans la cellule n'aura pas changé.
    Mais je ne sais pas si ça peut fonctionner et je sais encore moins si j'ai réussi à être clair .

    Donc Help me please ! Je galère un peu et je sais pas trop par ou prendre ce truc.

    Je vous joins un classeur Excel pour que vous puissiez y voir un peu plus clair.

    J'attends vos questions et idées avec impatience !
    Merci à vous

    PS: je travaille sous XL 2007 mais le fichier doit être compatible XL 2000
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Peut être qu'au lieu d'une colonne de critères concaténés, tu mets 3 colonnes pour les catégories de critères et une 4ème colonne qui contiendra la somme des valeurs des 3 critères. peut être ainsi tu simplifieras la gestion. bon c'est un point de vue
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,

    Tu as tout a fait raison Mercatog, je viens de jeter un oeil et il est déjà beaucoup plus pratique de "jongler" avec 3 listes qui ont chacune 3 critères qu'une seule liste qui concatène tous mes critères et qui contient 36 lignes (beaucoup moins lisible).

    J'ai essayé de faire avancer mon Schmilblick et j'ai pensé à un truc.

    Dans mon tableau "Liste critères" qui regroupe les infos sur les critères, je rajoute une colonne ID (l'identifiant de chaque valeur de chaque critère).

    Ensuite, je crée donc 4 cellules qui représente les critères:
    -Poids
    -Hauteur
    -Encombrement
    -Implantation par lot

    Chaque cellule contient une liste déroulante qui contient toutes les valeurs possibles du critère en question.

    Ensuite je crée 4 autres colonnes qui récupère (avec un rechercheV ?) l'ID à partir du choix de l'occurence du critère.

    Puis je crée 4 autres colonnes qui contiennent la note de chaque occurence sélectionné de chaque critère.

    enfin, je crée un bouton "Mise à Jour" en dessous du tableau "Liste critères" qui, lorsque je clique dessus, me permet:

    De parcourir les 4 colonnes contenant les ID de chacun des critères sélectionnées pour une famille de produit, de récupéré l'ID, et à partir de l'ID modifier les cellules qui contiennent les libellés et les cellules qui contiennent les notes.


    Grâce à cela à chaque modification du tableau "liste critères" je pourrais mettre à jour toutes mes lignes libellés et notes.

    Je voulais poser mon idée à plat avant d'aller au dodo donc peut être que ce que je viens de décrire n'est pas très clair mais je pense que c'est faisable. Le Hic c'est que je ne sais pas du tout comment faire le bouton qui va permettre une telle mise à jour

    Est ce que quelqu'un à une piste ?

    [EDIT] j'ai créer une feuille toute simple pour présenter mon idée, il ne me manque plus que le code VBA qui va bien donc je prends toutes vos idées [/EDIT]
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour, Ci-joint le code à mettre dans l'évènement Change de ta feuille.
    La présentation de la feuille est comme suit:
    Plage de la liste de critères: A5:B7, A10:B11, A14:B16, A19:B20 (non compris les titres)
    Plage de Choix des Critères: G3:Jx (x étant la dernière ligne non vide des ID Catégories en colonne D)
    Plage des résultats des indices de complexité: K3:Kx
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LastLig As Long
    Dim Plage As Range, PlageCrit As Range
    Dim c As Range, v As Range, w As Range
    Dim Crit As String
     
    Application.ScreenUpdating = False
    LastLig = Cells(Rows.Count, "D").End(xlUp).Row              'Dernière ligne remplie de la plage choix des critères
    Set Plage = Intersect(Target, Range("G3:J" & LastLig))      'Cellules modifiées dans plage Choix des critères
    Set PlageCrit = Union(Range("A5:B7"), Range("A10:B11"), Range("A14:B16"), Range("A19:B20"))                         'Plage contenant la liste des critères
     
    '# Changement dans plage Choix des critères
    If Not Plage Is Nothing Then
        For Each c In Plage
            Range("K" & c.Row).ClearContents                    'K: Colonne résultat valeurs
            For Each w In Range("G" & c.Row & ":J" & c.Row)
                Set v = PlageCrit.Find(w.Value, LookIn:=xlValues, lookat:=xlWhole)
                If Not v Is Nothing Then
                    Application.EnableEvents = False
                    Range("K" & c.Row).Value = Range("K" & c.Row).Value + Range("B" & v.Row)
                    Set v = Nothing
                    Application.EnableEvents = True
                End If
            Next w
        Next c
    End If
     
    '#Changement dans Liste des critères
    Set Plage = Range("G3:J" & LastLig)                         'Plage Choix des critères
    If Not Intersect(Target, PlageCrit) Is Nothing And Target.Count = 1 Then
        For Each c In Plage
            If c.Value <> "" Then
                Set v = PlageCrit.Find(c.Value, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True)
                If v Is Nothing Then
                    c.Value = Range("A" & Target.Row)
                Else
                    c.Value = c.Value
                    Set v = Nothing
                End If
            End If
        Next c
    End If
    Set Plage = Nothing
    Set PlageCrit = Nothing
    End Sub
    à adapter convenablement et à tester sur ton fichier d'origine
    Ci-joint fichier test modifié
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    Bonjour Mercatog,

    Je sais que tu astesté ta solution avant de la poster mais quand j'ai ouvert ton classeur et que ca a fonctionné j'étais trop content

    J'ai lu ton code et j'ai à peu près compris le fonctionnement, cependant je n'ai pas trouvé dans ton code la ligne qui ajoute la somme des 4 critères que je sélectionne dans les colonnes G à J.

    [EDIT 2] Je modifie mon post car le code VBA du fichier n'est pas le même que celui qui est dans ton post. J'ai donc modifier le fichier Excel pour qu'il soit identique à ton post et la somme des 4 critères fonctionne donc c'est parfait[/EDIT 2]

    Du coup, il faudrait que je puisse rajouter dans ton code le calcul de la somme des notes. [EDIT]suppression d'une connerie [/EDIT]

    Un grand merci à Mercatog Mon problème est résolu !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/08/2011, 23h16
  2. Réponses: 8
    Dernier message: 11/02/2010, 16h18
  3. [AC-2000] Problème de mise à jour d'une base sur réseau
    Par Dermochelys dans le forum Runtime
    Réponses: 2
    Dernier message: 04/02/2010, 13h43
  4. Mise à jour automatique champ base de donnée
    Par xav3601 dans le forum Visio
    Réponses: 0
    Dernier message: 16/06/2009, 15h12
  5. Question sur mise à jour automatique
    Par Al soltani dans le forum Access
    Réponses: 2
    Dernier message: 03/03/2006, 11h51

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