Recherche Doublon dans Colonne
Bonjour à tous !
Je sollicite votre aide pour comprendre et éventuellement corriger une ligne de code VB.
La macro récupère une liste de doublons dans une variable MsgErrDoublons que j'afficherai au bout de 5 cas de doublons rencontrés.
Je fais donc un DoWhile pour parcourir toute la colonne, mon souci est que j'ai une erreur à la DEUXIèME itération de la boucle ... je ne comprends pas .... !
Erreur provenant de cette ligne contenant :
Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookAt:=xlWhole, SearchDirection:=xlNext)dans
Private Sub CommandButton1_Click()
Range("A2").Select
MsgErrDoublons = "Les comptes suivants sont en doublon, merci de corriger : " & vbCrLf
compteur = 0
'déclaration des variables :
Dim Trouve As String, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String
Do While ActiveCell.Value <> Empty
Valeur_Cherchee = ActiveCell.Value
' Plage de recherche commence à la cellule d'en dessous jusqu'à la dernière cellule non vide de la colonne
Set PlageDeRecherche = Range(Selection.Offset(1, 0), Selection.Offset(1, 0).End(xlDown))
MsgBox PlageDeRecherche.Address(True, True, xlA1)
'méthode find, ici on cherche la valeur exacte
Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookAt:=xlWhole, SearchDirection:=xlNext)
MsgBox Trouve
' Incrémentation des msg d'erreurs jusqu'à 5 occurences
If Trouve <> Empty Then
If compteur < 5 Then
MsgErrDoublons = MsgErrDoublons & " - " & Trouve & vbCrLf
compteur = compteur + 1
Else
MsgErrDoublons = MsgErrDoublons & " - etc .."
Exit Do
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
' Fin de boucle, s'il y a au moins un cas de doublon, on informe l'utilisateur
If compteur > 0 Then
res = MsgBox(MsgErrDoublons, vbError, "Erreur")
'VerificationDoublonsCompte = True
'Else
' VerificationDoublonsCompte = False
End If
End SubL'erreur apparaît quand la fonction Find est appelée une deuxième fois (à la deuxième itération du DoWhile) avec un nouveau Range réévalué pour couvrir logiquement une plage moins importante à chaque itération.
Voici ci-joint la macro et un jeu de donnée dans lequel j'ai inséré deux doublons, identifiables par leur couleur.
En vous remerciant pour vos avis et conseils !
Bonjour vinzmeister,
Pour ma part, j'ai fait deux choses :
- mis : On Error Resume Next
- puis j'ai ajouté Trouve = ""
et ça fonctionne
le code en entier est :
Private Sub CommandButton1_Click()
Range("A2").Select
MsgErrDoublons = "Les comptes suivants sont en doublon, merci de corriger : " & vbCrLf
compteur = 0
'déclaration des variables :
Dim Trouve As String, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String
Do While ActiveCell.Value <> Empty
Trouve = ""
Valeur_Cherchee = ActiveCell.Value
' Plage de recherche commence à la cellule d'en dessous jusqu'à la dernière cellule non vide de la colonne
Set PlageDeRecherche = Range(Selection.Offset(1, 0), Selection.Offset(1, 0).End(xlDown))
MsgBox PlageDeRecherche.Address(True, True, xlA1)
'méthode find, ici on cherche la valeur exacte
On Error Resume Next
Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookAt:=xlWhole, SearchDirection:=xlNext)
'MsgBox Trouve
' Incrémentation des msg d'erreurs jusqu'à 5 occurences
If Trouve <> Empty Then
If compteur < 5 Then
MsgErrDoublons = MsgErrDoublons & " - " & Trouve & vbCrLf
compteur = compteur + 1
Else
MsgErrDoublons = MsgErrDoublons & " - etc .."
Exit Do
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
' Fin de boucle, s'il y a au moins un cas de doublon, on informe l'utilisateur
If compteur > 0 Then
res = MsgBox(MsgErrDoublons, vbError, "Erreur")
'VerificationDoublonsCompte = True
'Else
' VerificationDoublonsCompte = False
End If
End Sub
Ah, c'est donc ça !
Mais quand le Find ne trouve rien, ce n'est pas censé retourner une "Erreur" mais plutôt "Nothing ?
En tout cas, merci !