Eviter la saisie d'un doublon dans une liste [Résolu]

Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
- - Dernière réponse : cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 26 mai 2007 à 14:01
Bonjour à tous,

Je ne me sors pas de la réponse #N/A qui peut m'être retournée par RECHERCHEV...
Dans Excel, je saisie une valeur (en A4) dans une feuille "Fiche". Au lancement de la macro, une nouvelle feuille sera crée qui portera pour  nom la valeur entrée en A4 ; de plus, cette même valeur sera reportée en colonne A à la première ligne vierge d'une troisième feuille Sommaire (jusque là pas de problème). Bien sûr il ne faut pas entrer en A4 une valeur déjà existante (plantage de la macro à la création de la feuille demandée puisqu'elle existe déjà...). Pour lancer un warning, j'ai pensé utiliser REHERCHEV et reprendre le résultat dans la macro : Pas de soucis quand c'est VRAI, mais ça casse quand la valeur retournée est #N/A dans la cellule AC1...
Ci-dessous la macro en question :

Private Sub Enregistrer_Click()


n = Range("A4").Value  ' valeur saisie dans A4
v = Range("AC1").Value  ' Valeur renvoyée en AC1=SI(A4=0;0;RECHERCHEV(A4;Sommaire!$A$3:$A$256;1;FAUX))If (v) (n) Then  ' si vrai> OK, le "doublon est bloqué, mais si faux (#N/A): ça ne passe pas à Else...
    Application.Run "RetourSommaire"  ' retour au sommaire (perte des saisies)
    '   Doublon.Show   ' Option UserForm "Alerte Doublon" pour un message d'erreur avant)
Else
    Sheets("Fiche").Select
    I = Sheets.Count
    Sheets("Fiche").Copy After:=Sheets(I)
    Sheets("Fiche").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Sheets("Fiche (2)").Select
    ActiveSheet.Shapes("Enregistrer").Select
    Selection.Delete
    Sheets("Fiche (2)").Name = CStr(Range("A4").Value)
    Application.Run "CopierVersSommaire"
End If
End Sub

Voilà mes 2 questions :
Est-il possible de "récupérer" la valeur #N/A sous une forme (texte?) permettant que la macro déroule ?
Peut-être y-a-t'il "plus simple" que de tenter de reprendre le résultat de RECHERCHEV ?

Toute aide grandement appréciée d'avance !
Merci, et pardon d'être un peu long...
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
3
Merci
Si la formule que tu mets en AC1 te retourne #N/A, c'est qu'elle ne trouve pas la valeur, ce qui est OK. Si tu ne veux pas voir de #N/A, il faut ajouter une condition [ Si(Esterreur) ] à cette formule.

SI(A40;  0;  Si(ESTERREUR(RECHERCHEV(A4;Sommaire!$A$3:$A$256;1;FAUX)); "X" ; RECHERCHEV(A4;Sommaire!$A$3:$A$256;1;FAUX)))

ou encore A:A au lieu d'un Range fixe comme $A$3:$A$256 à moins que ce Range ne change jamais

=SI(A4=0;  0;  Si(ESTERREUR(RECHERCHEV(A4;Sommaire!A:A;1;FAUX)); "X" ; RECHERCHEV(A4;Sommaire!A:A;1;FAUX)))

MPi

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_MPi
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
3
Merci
Merci à toi MPI : Toujours aussi rapide !
Je ne connaissais pas ESTERREUR...
Entre temps j'ai tenté une toute autre approche, mais j'ai calé car je n'ai pas su trouver la syntaxe qui permet de renvoyer le numéro de la ligne d'une cellule sélectionnée un truc du genre "L = ActiveRow.Value" (qui n'est évidemment pas bon).
Mais c'est un autre topic, et je vais continuer de chercher avant d'éventuellement le lancer.
Grâce à toi, mon affaire avance bien ; merci encore .

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de CerberusPau
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
0
Merci
EstErreur gère tout type d'erreur d'une formule.
Dans ton cas, comme la fonction retourne #N/A, tu aurais pu utiliser EstNA.
Personnellement, par habitude, j'utilise exclusivement EstErreur
Plusieurs autres fonctions commencent par ce EST qui ciblent différents types de retours de fonctions (#REF!, #DIV/0!, ...

Pour le numéro de la ligne, essaie ActiveCell.Row, si la cellule est bien activée.

MPi
Commenter la réponse de cs_MPi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.