[OK] Recherche de doublon sur classeur excel entier

funcky222

XLDnaute Junior
Bonjour à tous,

j'ai effectué une recherche sur le forum avec les termes 'recherche doublon classeur' et 'verifier doublon classeur' et je ne trouve rien... du coup je me tourne vers vous !

J'utilise actuellement ce code là :

VB:
'#######################################
'# Il s'agit du code qui permet d'éviter les doublons dans les numéros de  
'# c/c sur l'onglet uniquement                                              
'############################################

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
 
'colonne à "surveiller" (ici colonne A)

If Target.Column = 1 Then
 
'  pour vérifier si la saisie n'existe pas déjà dans la colonne

If Application.WorkbookFunction. _
CountIf(Target.Value) > 1 Then
 
   
Select Case MsgBox("Le numéro de compte saisi est déjà présent !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")

Case vbOK

'procédure si click sur Ok

Target.Value = ""
    Target.Select

Case vbCancel

'procédure si click sur Annuler

Cancel = True
    
 End Select
 End If
 End If
 
 'colonne à "surveiller" (ici colonne A)

 If Target.Column = 8 Then
  
'  pour vérifier si la saisie n'existe pas déjà dans la colonne
  If Application.WorksheetFunction. _
    CountIf(Range("H:H"), Target.Value) > 1 Then
   
Select Case MsgBox("Un numéro de compte a déjà été attribué pour ce siren / siret !" & Chr(13) & Chr(13) & "]Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")

Case vbOK

'procédure si click sur Ok

Target.Value = ""
    Target.Select

Case vbCancel

'procédure si click sur Annuler

Cancel = True
    
 End Select

 End If
 End If
  
 End Sub

pour m'assurer qu'il n'y ait pas de doublons sur les valeurs de la colonne A et de la colonne H en avertissant l'utilisateur via une messagebox.


Ce que je souhaiterai, c'est que la recherche de doublon des valeurs de la colonne A se fasse sur tout le classeur et non pas sur l'onglet uniquement. Mais je n'y arrive pas, pourriez-vous m'aider à modifier ce bout de code ?

D'avance merci de votre aide.

;)
 
Dernière édition:

Hippolite

XLDnaute Accro
Re : Recherche de doublon sur classeur excel entier

Bonjour,
Utilise les balises # et les retraits, ton code est illisible.
Il faut ajouter un test pour détecter les sélections multiples qui provoqueraient une erreur à ton code.
Non testé (je n'ai pas Excel sous la main)
Quelque chose comme :
VB:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
	If Target.Cells.Count >1  Then
		MsgBox "Sélection multiple non autorisée, contrôle non fait"
		Exit Sub
	End If
	For Each Sh in ActiveWorkBook.Sheets
'------------------------------------- ton code --------------------------------	
		'colonne à "surveiller" (ici colonne A)
		If Target.Column = 1 Then
			'pour vérifier si la saisie n'existe pas déjà dans la colonne
			If Application.WorkbookFunction.CountIf(Target.Value) > 1 Then
				Select Case MsgBox("Le numéro de compte saisi est déjà présent !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")
				Case vbOK
					'procédure si click sur Ok
					Target.Value = ""
					Target.Select
				Case vbCancel
					'procédure si click sur Annuler
					Cancel = True
			    End Select
		    End If
	    End If
	    'colonne à "surveiller" (ici colonne H)
	    If Target.Column = 8 Then
		'pour vérifier si la saisie n'existe pas déjà dans la colonne
		If Application.WorksheetFunction. _
			CountIf(Range("H:H"), Target.Value) > 1 Then
				Select Case MsgBox("Un numéro de compte a déjà été attribué pour ce siren / siret !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")
				Case vbOK
					'procédure si click sur Ok
					Target.Value = ""
					Target.Select
				Case vbCancel
					'procédure si click sur Annuler
					Cancel = True  
				End Select
			End If
		End If
'----------------------------------------------------------------------------------
	Next Sh
End Sub
A+

Edit : corrigé faute de frappe "ActiveWorkBook" il manquait le "t"
 
Dernière édition:

funcky222

XLDnaute Junior
Re : Recherche de doublon sur classeur excel entier

Salut Hippolite,

le fichier bloque sur cette ligne :

Code:
 If Application.WorkbookFunction.CountIf(Target.Value) > 1 Then

avec ce message d'erreur :

Erreur d'execution 438 Propriété ou méthode non géré par cet objet.

Merci de ton aide.

;)

P.S. : ma tentative pour améliorer la visibilite de mon poste a lamentablement échouée :'( !
 

Hippolite

XLDnaute Accro
Re : Recherche de doublon sur classeur excel entier

Re,
je viens de regarder ton code, pour détecter la présence du numéro sur une autre feuille, tu devras utiliser quelquechose comme
Code:
Tv = Target.Value
.
.
.
Test = Test + Application.WorksheetFunction.CountIf(Sh.Range("A:A"), Tv)
.
.
.
If Test > 1 Then
A+
 

funcky222

XLDnaute Junior
Re : Recherche de doublon sur classeur excel entier

Salut,

nos réponses se sont croisées...

j'ai fait quelques essais et même si je comprends le 'code' je ne sais pas comment placer le bout que tu m'as donné...

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
 
    
    If Target.Cells.Count > 1 Then
        MsgBox "Sélection multiple non autorisée, contrôle non fait"
        Exit Sub
    End If
    For Each Sh In ActiveWorkbook.Sheets
  [B]  Test = Test + Application.WorksheetFunction.CountIf(Sh.Range("A:A"), Tv)[/B]
    
'------------------------------------- ton code --------------------------------
        'colonne à "surveiller" (ici colonne A)
        If Target.Column = 1 Then
            'pour vérifier si la saisie n'existe pas déjà dans la colonne
           If Application.WorksheetFunction.CountIf(Sh.Range("A:A"), Target.Value) > 1 Then
                Select Case MsgBox("Le numéro de compte saisi est déjà présent !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")
                Case vbOK
                    'procédure si click sur Ok
                    Target.Value = ""
                    Target.Select
                Case vbCancel
                    'procédure si click sur Annuler
                    Cancel = True
                End Select
            End If
        End If
        'colonne à "surveiller" (ici colonne H)
        If Target.Column = 8 Then
        'pour vérifier si la saisie n'existe pas déjà dans la colonne
        If Application.WorksheetFunction. _
            CountIf(Range("H:H"), Target.Value) > 1 Then
                Select Case MsgBox("Un numéro de compte a déjà été attribué pour ce siren / siret !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")
                Case vbOK
                    'procédure si click sur Ok
                    Target.Value = ""
                    Target.Select
                Case vbCancel
                    'procédure si click sur Annuler
                    Cancel = True
                End Select
            End If
        End If
'----------------------------------------------------------------------------------
    Next Sh
    
  [B]  If Test > 1 Then[/B]
       Select Case MsgBox("Le numéro de compte saisi est déjà présent !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")
                Case vbOK
                    'procédure si click sur Ok
                    Target.Value = ""
                    Target.Select
                Case vbCancel
                    'procédure si click sur Annuler
                    Cancel = True
                End Select
            End If
    
End Sub

Et est-ce que je laisse ce code dans ma feuille initiale, ne vaut-il pas mieux insérer ce code dans le workbook ?

Merci de ton aide.
 

Hippolite

XLDnaute Accro
Re : Recherche de doublon sur classeur excel entier

Re,
Voilà l'application de ce que je préconisais au post #7
J'ai mis en commentaire les deux lignes "Cancel = True" qui ne servent pas

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Sh As Worksheet
    Dim TestCompte As Long, TestSiren As Long, Tv As Variant

    Tv = Target.Value
    For Each Sh In ActiveWorkbook.Sheets
        'colonne à "surveiller" (ici colonne A)
        If Target.Column = 1 Then
            'pour vérifier si la saisie n'existe pas déjà dans la colonne
            TestCompte = TestCompte + Application.WorksheetFunction.CountIf(Sh.Range("A:A"), Tv)
            If TestCompte > 1 Then
                Select Case MsgBox("Le numéro de compte saisi est déjà présent !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")
                Case vbOK
                    'procédure si click sur Ok
                    Target.Value = ""
                    Target.Select
                Case vbCancel
                    'procédure si click sur Annuler
'                    Cancel = True
                End Select
                Exit Sub
            End If
        End If
        'colonne à "surveiller" (ici colonne H)
        If Target.Column = 8 Then
        'pour vérifier si la saisie n'existe pas déjà dans la colonne
        TestSiren = TestSiren + Application.WorksheetFunction.CountIf(Sh.Range("H:H"), Tv)
          If TestSiren > 1 Then
                Select Case MsgBox("Un numéro de compte a déjà été attribué pour ce siren / siret !" & Chr(13) & Chr(13) & "Mettez à jour le tableau et la ligne concernant ce dossier." & Chr(13) & Chr(13) & "Cliquez sur OK pour faire votre recherche (ctrl + F)" & Chr(13) & "ou" & Chr(13) & "sur Annuler si vous souhaitez quand même saisir ce numéro.", vbOKCancel + vbExclamation, "ATTENTION : doublon détecté !")
                Case vbOK
                    'procédure si click sur Ok
                    Target.Value = ""
                    Target.Select
                Case vbCancel
                    'procédure si click sur Annuler
'                    Cancel = True
                End Select
                Exit Sub
            End If
        End If
    Next Sh
End Sub
A+
 

funcky222

XLDnaute Junior
Re : Recherche de doublon sur classeur excel entier

Re,

je teste ce nouveau code ce soir.

En attendant et pour que ça soit peut-être plus facile pour toi, voici un exemple du fichier.

Dans l'onglet rouge, la recherche de doublon s'effectue sur la colonne A et H mais uniquement sur l'onglet rouge.
Le but est d'arriver à faire une recherche de doublon sur tous les onglets...

Bon, je sais que tu avais compris, mais au cas où.

Voici l'exemple : http://up.sur-la-toile.com/iKuG

Merci !
 

funcky222

XLDnaute Junior
Re : Recherche de doublon sur classeur excel entier

Re,
Complément :
C'est plus propre et lisible de mettre le progrmme dans un module qui sera appelé par les "Sub Worksheet_Change" des feuilles.
A+

Re,

je viens de tester, le code fonctionne à merveille sur mes premiers tests.

Seulement, lorsque je le mets dans un module que j'appelle ensuite comme tu l'indiques, il me dit que la variable Target n'est pas définie...
Tant pis pour la visibilité dans l'absolu, je mets le code sur toutes mes pages, je n'en ai pas beaucoup !

Merci pour tous tes efforts...

Je risque de revenir vers vous (toi !!) pour une autre restriction sur ce même fichier !

Merci encore.
 

Hippolite

XLDnaute Accro
Re : Recherche de doublon sur classeur excel entier

Re,
Dans la feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    TestCompteSiren Target
End Sub
Dans le module :
Code:
Function TestCompteSiren(ByVal Target As Excel.Range)
.
.
.
End Function
Une petite amélioration : tu peux remplacer tes
Code:
Cancel=true
par
Code:
TestCompteSiren = True
et la fonction renverra True quand on aura choisi Cancel.
a+
 

Discussions similaires

Réponses
8
Affichages
533

Statistiques des forums

Discussions
312 504
Messages
2 089 076
Membres
104 021
dernier inscrit
abdesslem