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 :

Y-a-t-il une possibilité de modification automatique d'une liste de validation?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Par défaut Y-a-t-il une possibilité de modification automatique d'une liste de validation?
    Bonjour à tous,

    j'ai un petit soucis et j'aurais bien besoin d'un petit coup de pouce si c'est possible..

    Pour info: mon fichier est à destination de mon service et comme je ne serais pas la seule à l'utiliser, il est à la base entièrement verrouillé à toutes modifications, (en particulier pour "garantir" l'intégrité des données mais aussi pour éviter les mauvaises manips de personnes maladroites)

    Pour cela, voilà ce que j'aurais souhaité faire si c'est possible, (je vais essayer d'être clair):

    Premièrement j'ai créé une liste dans la feuille2 de mon classeur que j'ai nommé "Mylist"
    Dans ma feuille1, J'ai créé avec l'outil d'excel une validation de donnée dans la cellule "A1" avec comme liste de choix "Mylist";
    Donc jusque là pas de soucis, tout fonctionne très bien.

    Voilà juste, "mylist" est une liste très longue et non exhaustive. Donc j'ai bien retiré le bloquage quand la donnée tapée en "A1" ne fait pas partie de la liste mais j'aurais bien voulu avoir dans ce cas un message (type userform) qui s'ouvre, indiquant que la donnée ne fait pas partie de la liste et demander si on veut l'y ajouter.
    Si oui, une macro permettrait l'insertion automatique de la nouvelle donnée dans "mylist".

    Mon soucis est que je suis nulle en codage VBA. Je parviens à adapter un code à mon utilité mais je ne sais pas les créer... et je n'ai pas trouvé de sujet pouvant répondre à mon problème sur la toile....

    Est ce que quelqu'un aurait une solution à me proposer??

    Je vous en remercie grandement par avance!!!!!!

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    C'est tout à fait possible, mais avant de te proposer quelque chose, il y a aussi la possibilité de ne pas faire de VBA et de rendre ton myList dynamique. Il faudra juste laisser aux utilisateurs la possibilité d'ajouter une valeur dans cette liste.

    Un petit exemple de liste dynamique
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Par défaut
    Merci pour ta réponse (elle me sera certainement utile sur un autre fichier )mais je ne suis pas sûre que je puisse l'utiliser comme ça dans mon cas présent...

    En effet mylist est assez longue et j'ai trouvé une formule à rentrer dans la source qui me permette un choix qui se réduit suivant les premières lettres tapées:

    =DECALER(PHARMATH;EQUIV(G5&"*";PHARMATH;0)-1;0;NB.SI(PHARMATH;G5&"*")

    Pour cette utilisation, je crois qu'il est nécessaire que la liste soit triée par ordre alphabétique, et je ne voudrais pas que l'utilisateur alpha aille bidouiller dedans(rentrer une nouvelle donnée, trier la liste...), si possible, de façon à éviter les erreurs de manipulation et les pertes de données... C'est pour ça que j'essaye de complétement verrouiller mon fichier avec la mise en place d'actions bien spécifiques et cadrées..

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Voici mon exemple mieux adapté à ton cas en Feuille 2. Avec le code suivant dans la feuille :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$B$4" Then 'Seulement pour la cellule qui nous intéresse
            Dim testListe As Boolean
            Dim c As Range
            Dim res As VbMsgBoxResult
     
            'On vérifie si la valeur tapée est dans la liste
            testListe = False
            For Each c In Me.Range("listeCouleurs2")
                If c.Value = Target.Value Then testListe = True
            Next c
     
            'Si elle n'y est pas on demande si on peut l'ajouter
            If Not testListe Then
                res = MsgBox("Donnée non présente dans la liste, voulez-vous l'ajouter ?", vbYesNo)
                If res = vbYes Then
                    Me.Unprotect 'Avec éventuellement le mot de passe
                    Me.Range("D3").End(xlDown).Offset(1, 0).Value = Target.Value
                    Me.Protect 'Avec éventuellement le mot de passe
                End If
            End If
        End If
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éprouvé
    Homme Profil pro
    Back Office Marchés
    Inscrit en
    Mars 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Back Office Marchés
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 65
    Par défaut
    Citation Envoyé par ZebreLoup Voir le message
    Un petit exemple de liste dynamique
    Bonjour ZebreLoup. Ca m'intéresserait de savoir comment tu fais car je ne vois nulle part Listecouleur dans les plages nommées ?

    Guillaume

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Comme c'est une plage dynamique, on ne la voit pas à gauche au dessus des cellules. Mais tu peux la trouver dans Insertion/Nom/Définir sous 2003 (Il doit y avoir un menu équivalent sous 2007/2010). C'est une formule du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Feuil1!$D$4;0;0;NBVAL(Feuil1!$D$4:$D$65536))
    C'est très pratique pour ne pas devoir modifier toutes les formules, validations, combobox... dès que l'on fait une modification dans une plage de données.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Par défaut
    Merci Zebreloup, c'est exactement ce qu'il me faut mais je ne parviens pas à l'adapter à une plage de cellule:

    J'aimerais que cela fonctionne une colonne (par exemple toutes les cellules de B2 à B500 avec cette validation) mais avec le "Target.Address" j'ai essayé toutes sortes de référencement ("$B", "$B$", "$B:$B", "$B$2:$B$500"...) , je n'y parviens pas.

  8. #8
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Address = "$B$4" Then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column = 2 And Target.Row >= 2 Then
    Que tu peux adapter en fonction de tes besoins.

    Il y a aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Intersect(Target, Me.Range("B2:B1000")) Then

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

Discussions similaires

  1. [WD-2007] Citer une figure, avec modification automatique des champs
    Par moi14000 dans le forum Word
    Réponses: 6
    Dernier message: 11/09/2014, 10h02
  2. Modification automatique d'une propriété d'un control ayant un tooltip
    Par Trunks dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 29/07/2014, 11h25
  3. [SP-2007] date de modification automatique pour une seule colonne
    Par Bois990 dans le forum SharePoint
    Réponses: 5
    Dernier message: 15/03/2012, 15h42
  4. Réponses: 3
    Dernier message: 25/08/2011, 13h23
  5. Réponses: 6
    Dernier message: 04/04/2008, 08h50

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