Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Validation sans doublons

  • Initiateur de la discussion Initiateur de la discussion michir
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

michir

XLDnaute Occasionnel
Bonjour
Je souhaite faire une plage de validation dans la feuille "validation" à partir d'une plage nommée "localisation" dans une autre feuille mais je ne souhaite pas faire apparaître les villes en double dans cette feuille de validation
Auriez vous une solution pas trop compliquée ?
Je joins fichier exemple
Merci
 

Pièces jointes

Re : Validation sans doublons

Bonjour.

Ça dépend de ce que vous appelez pas trop compliqué. Ça ne peut pas s'étendre à la complexité des fournitures de l'application que vous utiliseriez, puisque vous ne la voyez pas. Si ça s'étend à tout ce qu'on peut voir dans la programmation, non, je n'ai rien de simple. Si ça se limite à ce qu'il peut y avoir à y retoucher ou personnaliser, j'ai ce qu'il faut. Mais tout d'abord pour une seule cellule à valider, il vaudrait mieux faire le choix dans un Userform, ça offrirait en plus la possibilité de taper les 1ères lettres de la ville. Mais j'ai aussi quelque chose de prêt à rendre service si ce sont toutes les lignes de certaines colonnes qui portent des validations identiques interdépendantes.
Il y a plusieurs code différents pour une ville. Faudra-t-il aussi le choisir parmi les seuls possibles ?
 
Dernière édition:
Re : Validation sans doublons

Bonjour
j'aimerais un exemple si tu en as en réserve et je l'adapterais
Il faut dans la validation "localisation" affiche une seule ville sans les doublons
par contre si il y a des doublons dans le code pour une ville donnée on les garde tous
je ne suis peut être pas suffisamment clair ?
Merci
 
Re : Validation sans doublons

Bonjour Michir, bonjour le forum,

Malheureusement je ne sais pas le faire par formule et je te propose une solution VBA qui, pour être efficace nécessite du code à trois endroit :
• dans le Module1 :
Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TEMP As Variant 'déclare la variable TEMP (tableau TEMPoraire)
Dim Liste As String 'déclare la variable Liste (Liste de validation)

Set O = Sheets("REF") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A2:A" & DL) 'définit la plage PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TEMP = D.keys 'récupèr dans le tableau temporaire TEMP les données sans doublon
Call Tri(TEMP, LBound(TEMP), UBound(TEMP)) 'tri alphabétique du tableau TEMP
Liste = Join(TEMP, ",") 'définit la liste Liste en plaçant une virgule enrte chaque donnée
With Sheets("Validation").Range("A1").Validation 'prend en compte la validation de la cellule A1 de l'onglet "Validation"
    .Delete 'efface une éventuelle ancienne validation de données
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Liste 'attribue la variable Liste comme liste de validation de données
End With 'fin de la prose en compte de...
End Sub

Code:
Sub Tri(a As Variant, gauc As Integer, droi As Integer) ' Quick sort tiré du site de Jacques BOISGONTIER : http://boisgontierjacques.free.fr/
Dim ref As String
Dim g As Integer: Dim D As Integer
Dim tmp As String

ref = a((gauc + droi) \ 2)
g = gauc: D = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(D): D = D - 1: Loop
    If g <= D Then
        tmp = a(g): a(g) = a(D): a(D) = tmp
        g = g + 1: D = D - 1
    End If
Loop While g <= D
If g < droi Then Call Tri(a, g, droi)
If gauc < D Then Call Tri(a, gauc, D)
End Sub
• Dans le composant ThisWorkbook :
Code:
Private Sub Workbook_Open() 'à l'ouverture du classeur
Module1.Macro1 'lance la procédure "Macro1" du module "Module1"
End Sub
• dans l'onglet Vaidation :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si le chagement a lieu dans la colonne 1 (=A), lance la procédure "Macro1" du module "Module1"
If Target.Column = 1 Then Module1.Macro1
End Sub

C'est sûr que ça risque de te paraître plus que compliqué, mais regarde le fichier en pièce jointe... Sinon un formuliste devrait te dégoupiller ça en moins de temps qu'il me faut pour te le dire...
 

Pièces jointes

Re : Validation sans doublons

Merci Robert pour ton code, je vais voir ce que cela donne. Je te dirai
Lorsque j'ouvre ton fichier attaché, j'ai le message:
Fonction supprimée: Validation des données dans la partie /xl/worksheets/sheet1.xml
Ce que j'aimerais c'est que lorsque j'affiche une ville, tous les codes concernant la ville s'affichent aussi
Merci à toi
 
Re : Validation sans doublons

Robert, ton code fonctionne, mais il affiche systématiquement le dernier code pour la ville.
Par exemple, si j'affiche Bordeaux, je voudrais que la liste des code concernant Bordeaux s'affiche également soit:
B 259
B 259
B 259
B 259
B 260
B 261
B 262
ou bien , ce serait encore mieux , uniquement les codes sans doublons de Bordeaux, soit
B 259
B 260
B 261
B 262
 
Re : Validation sans doublons

Bonjour à tous
Ton Fichier en retour
Code dans la Feuille Validation

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Address = "$A$1" Then
     Set d = CreateObject("Scripting.Dictionary")
     For Each c In [Localisation]: d(c.Value) = "": Next c
     Target.Validation.Delete
     Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
   End If
 End Sub

Nom de champ Localisation :
=DECALER(REF!$A$2;;;NBVAL(REF!$A:$A)-1)

Nom de champ Codes
=DECALER(REF!$B$2;;;NBVAL(REF!$B:$B)-1)

Ensuite dans la Cellule B1
Données-Validation
=DECALER(Codes;EQUIV(A1;Localisation;0)-1;0;NB.SI(Localisation;A1))


A+
 

Pièces jointes

Re : Validation sans doublons

Merci beaucoup Dranreb.
Je ne veux pas abuser, saurais-tu modifier ton ode pour qu'il affiche verticalement les codes dans la même colonne plutôt que horizontalement ?
Merci encore
 
Re : Validation sans doublons

Merci Regueiro
Même remarque que pour Robert
Je souhaiterais que les codes (sans doublons si possible) s'affichent verticalement pour une ville donnée
Merci encore
Michel
 
Re : Validation sans doublons

Ah, je n'avais pas vu. Pour avoir les code classés et sans doublon, c'est encore plus simple: on fait un dictionnaire à deux niveaux :
VB:
Option Explicit
Dim D As Dictionary

Private Sub UserForm_Initialize()
Set D = DictionnArbo(Feuil2.[Champ])
CbxVille.List = D.Keys
Me.Left = 10: Me.Top = 75
End Sub

Private Sub CbxVille_Change()
Dim Lignes() As Long, N As Long, L As Long, ECodes(), SCodes()
If CbxVille.ListIndex > -1 Then
   Feuil1.Rows(1).ClearContents
   Feuil1.[A1].Value = CbxVille.Text
   SCodes = D.Items(CbxVille.ListIndex).Keys
   Feuil1.[B1].Resize(, UBound(SCodes) + 1).Value = SCodes
   End If
End Sub
Ah, et pour l'avoir en vertical ben il suffit d'y envoyer le WorksheetFunction.Transpose, et de corriger en conséquence les suppressions préalables
 
Dernière édition:
Re : Validation sans doublons

Merci Dranreb
peux tu modifier le fichier que tu m'as envoyé car je ne maîtrise pas suffisamment les codes macros
Cela semble fonctionner parfaitement sauf à modifier légèrement comme indiqué
Merci encore à toi
Michel
 
Re : Validation sans doublons

Merci beaucoup David84 cela fonctionne parfaitement
Merci également à Dranreb , Robert, Regueiro, je conserve précieusement les contributions des uns et des autres
Merci à tous
Michel
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
539
Réponses
3
Affichages
254
Réponses
1
Affichages
177
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…