Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 15h17   #1
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
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!!!!!!
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 17h45   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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
Type de fichier : xls exempleRangeDynamiquePourListe.xls (15,5 Ko, 11 affichages)
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h37   #3
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
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..
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h58   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Voici mon exemple mieux adapté à ton cas en Feuille 2. Avec le code suivant dans la feuille :
Code :
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
Type de fichier : xls exempleRangeDynamiquePourListe.xls (25,5 Ko, 4 affichages)
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 13h22   #5
Membre régulier
 
Homme Guillaume Chaudemanche
Back Office Marchés
Inscription : mars 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Chaudemanche
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : mars 2011
Messages : 39
Points : 92
Points : 92
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
Golonne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 14h19   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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 :
=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.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 15h36   #7
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
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.
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 15h48   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Remplace
Code :
If Target.Address = "$B$4" Then
par
Code :
If Target.Column = 2 And Target.Row >= 2 Then
Que tu peux adapter en fonction de tes besoins.

Il y a aussi
Code :
If Intersect(Target, Me.Range("B2:B1000")) Then
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h48   #9
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
Ca marche super!!!!!!

Merci beaucoup de ton aide!!!!!!
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h17.


 
 
 
 
Partenaires

Hébergement Web