[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:

funcky222

XLDnaute Junior
Re : Recherche de doublon sur classeur excel entier

Salut,

je viens de faire le test en plaçant le tout dans un module, et tout fonctionne.

Pour la feuille voici ce que cela donne :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

'on appelle la function de recherché de doublon sur tout le classeur et non plus sur l'onglet seul.
TestCompte Target
 
End Sub

Pour le module, voici ce cela donne :
Code:
Function TestCompte(ByVal Target As Excel.Range)


  Dim Sh As Worksheet
    'Dim TestCompte As Long,
 Dim 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 que vous saisissez est déjà présent dans Sésame ! Ne faites pas de doublon !" & 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
                    TestCompte = True
               End Select
                Exit Function
            End If
        End If
    Next Sh

End Function

J'ai volontairement limité la recherche de doublon du SIREN sur la feuille et laissé la recherche de doublon du compte sur le classeur.
Pour que tout fonctionne tel quel, j'ai du 'supprimer' la ligne :

Code:
  Dim TestCompte As Long,
.

Avant de clôturer ma demande, puisque tout est ok maintenant et je t'en remercie grandement, je souhaite abuser encore un peu de tes connaissances / compétences...

J'ai essayé de bricoler un peu pour que lorsque je clique sur "OK" au lieu de me sélectionner la cellule dans laquelle je saisis le doublon, il me sélectionne la cellule dans laquelle il y a le doublon détecté original... Aurais-tu une piste ?

Merci et à bientôt !

;)
 
Dernière édition:

funcky222

XLDnaute Junior
Re : Recherche de doublon sur classeur excel entier

Re,

merci pour cette partie de code...

J'étais très loin du compte dans mes tatonnements !! :D

La recherche et la sélection de la celulle doublon originale se fait très bien mais uniquement si le doublon détecté est dans la même feuille et non dans un autre onglet... :confused:
 

Hippolite

XLDnaute Accro
Re : Recherche de doublon sur classeur excel entier

Re,
Je n'avais pas eu le temps de regarder ton code,

Post #16 : En changeant le nom de la fonction par "TestCompte", tu as créé un conflit avec la variable du même nom, d'où la nécessité de supprimer la dernière trace de la variable (c'est à dire sa déclaration).

Post #18 : je regarde

A+
 
Dernière édition:

Hippolite

XLDnaute Accro
Re : Recherche de doublon sur classeur excel entier

Re,
Mon post #17 était un peu rapide, il fallait traiter si la première occurence venait ou non de la feuille active
VB:
Function TestCompte(ByVal Target As Excel.Range)
    Dim Sh As Worksheet, Verrou As Boolean
    Dim Tv As Variant, ShPrem, Nsh
    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)
            
            'Piège la première occurrence
            If TestCompte > 0 And Verrou = False Then
                ShPrem = Sh.Name
                Verrou = True
                
            End If
            If TestCompte > 1 Then
                Select Case MsgBox("Le numéro de compte que vous saisissez est déjà présent dans Sésame ! Ne faites pas de doublon !" & 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
                    
                    'Traite si la prelière occurrence est la feuille active ou non
                    If Sh.Name <> ActiveSheet.Name Then ShPrem = Sh.Name
                    Sheets(ShPrem).Activate
                    
                    Range("A:A").Find(Target).Select
                    Target.Value = ""
                Case vbCancel
                    'procédure si click sur Annuler
                    TestCompte = True
                End Select
            Exit Function
            End If
        End If
    Next Sh
End Function
A+
 

funcky222

XLDnaute Junior
Re : Recherche de doublon sur classeur excel entier

'Soir,

je viens de tester en rentrant chez moi, cela fonctionne impeccablement sur tout le classeur avec le nouveau code et en le mettant proprement dans un module !

Merci infiniment pour ce boulot et à très bientôt pour de prochaines problématiques !!
:p
 

Discussions similaires

Réponses
8
Affichages
558

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 803
Messages
2 092 250
Membres
105 316
dernier inscrit
cyrille225