Eviter la saisie d'un doublon dans une liste

Résolu
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 25 mai 2007 à 22:53
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 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...

3 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
25 mai 2007 à 23:36
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
3
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
26 mai 2007 à 10:38
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 .
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 mai 2007 à 14:01
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
0
Rejoignez-nous