Macro Excel qui empêche les doublons ?

Résolu/Fermé
eperluette Messages postés 2 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 23 juin 2008 - 23 juin 2008 à 17:32
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 8 juil. 2008 à 22:19
Bonjour à tous !

Voilà, j'ai trouvé une petite macro (que j'ai changée très légèrement) et qui marche très bien :

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Value
Case "": Case Else
If Not Application.Intersect(Target, [A:A]) Is Nothing Then
Select Case Application.WorksheetFunction.CountIf([A:A], Target)
Case 1: Case Else
myMatch = Application.WorksheetFunction.Match(Target, [A:A], 0)
myPrompt = "Returns note below has already been entered in cell A" & myMatch & _
Chr(10) & "Please modify your entry"
myDefault = Target
myInput = InputBox(Prompt:=myPrompt, Default:=myDefault, Title:="Excel Tip")
Target = myInput
End Select
End If
End Select
End Sub

Cette macro permet d'empêcher la saisie de doublons dans une feuille donnée (pour la colonne A uniquement). Si l'utilisateur entre une donnée déjà présente, une fenêtre s'affiche indiquant l'adresse de la donnée déjà entrée et invitant à entrer une autre donnée.

En fait, j'aimerais savoir s'il est possible de modifier cette macro pour l'étendre au classeur entier ?

Si par exemple, je suis dans la feuille 2 et j'essaie de saisir une donnée déjà présente dans la feuille 1 (mais pas dans la 2), est-il possible d'avoir une macro qui me dise que la donnée a déjà été entrée dans la feuille 1, cellule tant ?

Euh voilà, j'espère que ce que je raconte n'est pas trop confus (pardonnez-moi, je débute !)

Merci beaucoup pour votre aide !!!
A voir également:

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 juin 2008 à 00:18
bonjour

En modifiant ainsi cela devrait fonctionner :
Select Case Application.WorksheetFunction.CountIf(Sheets("Feuil1").[A:A], Target) _
+ Application.WorksheetFunction.CountIf(Sheets("Feuil2").[A:A], Target)
Case 1: Case Else
myMatch = Application.WorksheetFunction.Match(Target, [A:A], 0)
If myMatch = Target.Row Then
    myMatch = "Feuil2!A" & Application.WorksheetFunction.Match(Target, Sheets("Feuil2").[A:A], 0)
Else
    myMatch = "A" & myMatch
End If
myPrompt = "Returns note below has already been entered in cell " & myMatch & _

Ensuite il faut copier la macro dans la feuille 2 en changeant cette ligne
    myMatch = "Feuil1!A" & Application.WorksheetFunction.Match(Target, Sheets("Feuil1").[A:A], 0)
0
Bonjour gbinforme,

Toutes mes excuses pour le temps mis à te répondre ! Mais enfin voilà, je voulais juste te remercier de m'avoir répondu, ce code fonctionne parfaitement. J'ai juste changé le nom de la feuille (à la place de "Feuil1" j'ai mis le nom de l'onglet) et ça marche.

Encore merci pour ton aide.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
8 juil. 2008 à 22:19
bonjour et merci de ta réponse : mieux vaut tard que jamais dit l'adage !

Il fallait bien sûr adapter le nom des onglets et je suis heureux que tu soit en ordre de marche.
0