Probléme de doublons dans une recherche

Bonjour,

J'ai une macro qui me permets de faire une recherche dans mes onglets avec comme référence un numéro de code.

Depuis, je ne sais pas quand car au début cela fonctionnait très bien, j'ai des données en double à partir de la ligne 7 sur ma feuille "recherche" et ce quelque soit le code de recherche utilisé. Les dates utilisées non aucune incidence sur le problème.

Je vous mets en pièce jointe deux imprime-écran d'un fichier "test" et la macro en question.

merci à vous et bonne journée

Sub Recherche()
    Application.ScreenUpdating = False
    Call Clear

    Dim i As Integer, j As Integer, k As Integer
    Dim lastRow As Integer
    Dim wsDest As Worksheet
    Dim wsSource As Worksheet

    Set wsDest = Feuil23 ' Feuille de destination

    k = 2 ' ligne de départ pour les résultats
    Dim searchValue As Variant
    searchValue = wsDest.Range("L2").Value

    ' Parcours des feuilles de 3 à 15
    For i = 3 To 15
        Set wsSource = ThisWorkbook.Sheets(i)
        lastRow = wsSource.Cells(wsSource.Rows.count, 7).End(xlUp).Row

        For j = 7 To lastRow
            If wsSource.Range("B" & j).Value = searchValue Then
                k = k + 1
                wsDest.Range("A" & k & ":I" & k).Value = wsSource.Range("A" & j & ":I" & j).Value
            End If
        Next j
    Next i

    Application.ScreenUpdating = True
End Sub
_____________________________________________________________________________________________________________
Sub Clear()
    Dim ws As Worksheet
    Dim lastRow As Long

    Set ws = Feuil23

    ' Trouver la dernière ligne utilisée dans la colonne C
    lastRow = ws.Cells(ws.Rows.count, 3).End(xlUp).Row

    ' Effacer les données de A3 à I[dernière ligne]
    If lastRow >= 3 Then
        ws.Range("A3:I" & lastRow).ClearContents
    End If
End Sub
donnees recherche

Bonjour,

Bah sans le fichier .... avec une vue on ne sait pas vous dire.
- Feuil 23 dans le fichier c'est quelle feuille dans votre vue ? Celle en dessous je suppose ?

A mon avis votre souci vient des infos identiques sur plusieurs feuilles ou alors vérifiez votre macro Clear supprime bien les données depuis la ligne 3

Rem : La sub Clear : n'attribuez pas des noms de fonctions excel à une macro. La fonction Clear est une instruction VBA. Remplacez Clear par un autre nom.

Cordialement

Bonjour à tous,

Ben à mon avis c'est simplement que vous avez des doublons entre les feuilles 3 à 15. Le code est très simple, il lit chaque feuille et copie les valeurs pour lesquelles le "searchValue" (6052 dans l'exemple si j'ai bien compris) correspond. Si disons les feuilles 4 et 15 ont toutes les 2 le meme record, il sera copié 2x.

Pour éviter cela, 2 solutions :

  • Ou bien (à mon avis c'est le plus important) vérifier pourquoi il y a des doublons sur vos feuilles 3 à 15.
  • Ou bien dans le VBA ajouter un check avant l'ajout dans wsDest pour vérifier que la ligne n'est pas déjà présente (mais dans ce cas on masque les doublons, il faut etre prudent et en avoir conscience).

Merci à DAN et à saboh12617,

je vous joint le fichier en PJ, ce sera plus clair pour vous!

Effectivement

image

Vous bouclez de Janvier à... "Recherche"

Changez la boucle de i = 3 To 15 vers i = 3 To 14

hé ben bravo, j'avais pourtant vérifié avec l'aide de mon "ami" ChatGPT qui m'avait dit que :

Ce code :

    Parcourt les feuilles 3 à 15

    Pour chaque feuille :

        Il la stocke dans wsSource

        Il trouve la dernière ligne remplie dans la colonne F

        Il stocke ce numéro dans lastRow

mais je n'avais pas prêté attention aux numéros des feuilles.

je te remercie et te souhaite une bonne fin de semaine!!!

Pas de soucis, bon weekend également

un autre contournement

 aMois = Evaluate("proper(text(1+(column(offset(a1,,,,12))-1)*31,""[$-fr-fr]mmmm""))")     'les 12 mois en français
     For i = 1 To Worksheets.count
          Set wsSource = ThisWorkbook.Worksheets(i)
          s = wsSource.Name
          If s Like "* ####" Then            'nom se termine par un espace et 4 chiffres
               If Application.IfError(Application.Match(Split(s)(0), aMois, 0), 0) > 0 Then     'première partie est un mois français
                    lastRow = wsSource.Cells(wsSource.Rows.count, 7).End(xlUp).Row

                    For j = 7 To lastRow
                         If wsSource.Range("B" & j).Value = searchValue Then
                              k = k + 1
                              wsDest.Range("A" & k & ":I" & k).Value = wsSource.Range("A" & j & ":I" & j).Value
                         End If
                    Next j
               End If
          End If
     Next i
Rechercher des sujets similaires à "probleme doublons recherche"