InputBox détecter les doublons

Bonjour à tous

J'utilise ImputBox pour créer des Zones Nommées. J'annule la saisie si le nombre de cellules saisies n'est pas 10

Mon code fonctionne parfaitement :

Set Zone = Application.InputBox("selectionnez la plage Couleurs" & i, Type:=8)
NombreCellules = Zone.Cells.Count
If NombreCellules <> 10 Then
MsgBox "La Zone ne comporte pas 10 cellules).", 0

Une erreur de saisie classique consiste à sélectionner 2 fois la même cellule. Elle est prise en compte par le compteur.

Comment détecter ce défaut et annuler cette saisie comme le fait la MsgBox pour les saisies incomplètes ou surnuméraires?

Merci de votre aide.

M.P.

Bonjour

Essayez avec ce code

Sub test()
Dim liste As New Collection
Dim cel
Set zone = Application.InputBox("selectionnez la plage Couleurs" & i, Type:=8)
On Error Resume Next
For Each cel In zone
    liste.Add cel.Address, CStr(cel.Address)
Next
If liste.Count <= 9 Then MsgBox "La Zone ne comporte pas 10 cellules).", 0
End Sub

Cordialement

Merci de cette réponse qui fonctionne.....une fois seulement...

Un message signale que la clé de la collection a déjà servi et renvoie une erreur dès que l'on essaye de générer une nouvelle Zone.

Comment remettre à zéro la liste crée?

Cordialement

P.S. J'ai du rajouter Next (Cel)

Bonjour,

Merci de cette réponse qui fonctionne.....une fois seulement...

J'ai l'impression que je n'ai qu'une partie de votre demande ... ou que je n'ai pas le code complet pour comprendre.

Le code que je vous ai donné ne vérifie que s'il y un max de 10 cellules puis il faut relancer la macro en faisant une nouvelle sélection

Bonsoir

Merci Dan de vous intéresser à mon problème

Voici mon programme :

Public Sub zone_Couleur()

'Dim NombreCellules As Long
Dim Zone As Range
Dim Cell As Range
Dim Liste As Collection
Sheets("Grille2").Select
For i = 1 To 10
Line1:

Set Zone = Application.InputBox("selectionnez la plage Couleurs" & i, Type:=8)

'On Error Resume GoTo Line1
Set Liste = New Collection
For Each Cell In Zone
'Création d'une collection de données uniques (sans doublons)
Liste.Add Cell.Address, CStr(Cell.Address)
Err.Clear
Next Cell
MsgBox Liste.Count, 0
If Liste.Count <> 10 Then MsgBox "La Zone ne comporte pas 10 Cellules", 1
'Set Liste = Nothing

Zone.Name = "Zone" & i
Zone.Interior.Color = Sheets("Accessoire").Cells(2, i).Value
Next i
End Sub

Il fonctionne jusqu'à la première saisie avec "doublon(s)" mais il refuse la saisie suivante avec le message :

erreur d'exécution 457 : Cette clé est déjà associée à un élément de cette collection.

J'ai essayé de supprimer la "Liste" sans succès

Je pourrais me passer du premier test (redondant avec le second) mais il me sert pour essayer de "débuguer" le problème

Bonne soirée

M. P.

Bonjour,

Oui c'est normal. Vous n'avez pas exactement le même code que celui que j'ai placé dans mon post précédent.

J'ai besoin d'une info. Que doit-il se passer lorsque vous n'avez pas exactement 10 cellules sélectionnées car dans votre code, même si 8 ou 12 cellules, le code va tout de même donner un nom à la "zone". Donc là soit vous sortez du code soit vous continuez et ne définissez pas de nom pour cette "zone".

Bonsoir Dan

Voici mon programme Qui fonctionne maintenant

Je viens de trouver la solution : je remets à zéro la liste avec Set list = New Collection

Mon problème est résolu

Un grand merci de vos conseils.

M. P.

Sub test6()

Dim liste As New Collection

Dim cel

For i = 1 To 10

Retour:

Set List = New Collection

Set Zone = Application.InputBox("selectionnez la plage Couleurs" & i, Type:=8)

On Error Resume Next

For Each cel In Zone

liste.Add cel.Address, CStr(cel.Address)

Next

MsgBox liste.Count

If liste.Count <> 10 Then

MsgBox "La Zone ne comporte pas 10 cellules.", vbDefaultButton4

GoTo Retour

End If

Zone.Name = "Zone" & i

Zone.Interior.Color = Sheets("Accessoire").Cells(2, i).Value

Next i

End Sub

Bonjour,

C'est plus correct comme cela. Juste un truc, vous avez oublié un e après list --> Set Liste

Vous pouvez aussi ajouter juste après Next --> On error goto 0

Juste un truc pour le site, lorsque vous mettez un code dans un message, merci d'utiliser les balises de code

Cordialement

Bonsoir Dan

Merci de vos remarques (j'ai des problèmes avec l'orthographe dans VBA!) J'avais déjà corrigé car le programme plantait..

J'ai "plussoyé" vos réponses...

Bien cordialement

M. P.

Bonjour,

j'ai des problèmes avec l'orthographe dans VBA!

je te conseille fortement d'aller cocher 'Déclaration obligatoire des variables' dans les options de VBE.
Ca t'ajoute Option Explicit en tête de chaque nouveau module.
Ainsi tu seras alerté tout de suite en cas de faute sur un nom de variable, et t'évitera plusieurs jours de recherche pour des bugs très difficiles à trouver.
On a beau relire, on lit en corrigeant la faute sans s'en rendre compte...

Et tant qu'à les déclarer, autant en profiter pour les typer au mieux ces variables
eric

Bonjour à tous

Merci eriiic

Ton conseil me parait très pertinent!. Je manipule un peu VBA depuis longtemps sans jamais avoir connu cette vérification.

Je t'en suis d'autant plus reconnaissant

Cordialement

M. P.

Rechercher des sujets similaires à "inputbox detecter doublons"