Rechercher : dans
Par :

Macro Excel qui empêche les doublons ?

Dernière réponse le 8 jui 2008 à 22:19:06 eperluette, le 23 jun 2008 à 17:32:40 
 Signaler ce message aux modérateurs

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 !!!

Configuration: Excel 2003
Windows 2000
Internet Explorer 6.0

Meilleures réponses pour « Macro Excel qui empêche les doublons ? » dans :
Exécuter une macro VoirExécuter une macro Excel et Calc proposent plusieurs façons d’exécuter une macro : en la sélectionnant dans une liste, dans la boîte de dialogue Macro ; par un raccourci clavier ; en l’attachant à un bouton de la barre d’outils ; ...

1

gbinforme, le 24 jun 2008 à 00:18:27

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)

Toujours zen

Répondre à gbinforme

2

eperluette, le 8 jui 2008 à 19:57:51

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.

Répondre à eperluette

3

 gbinforme, le 8 jui 2008 à 22:19:06

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.
Toujours zen

Répondre à gbinforme
Collection CommentÇaMarche.net