Filtrage pour sélection d'informations

Bonjour à toutes et tous,

je dispose de 02 feuilles Excel :

1ère feuille : 1 ère avec les 211 numéros de nouveaux clients (aucune autre colonne)

2ième feuille : 1ère mes 55000 clients et de nombreuses colonnes suivantes de A à AZ contenant diverses informations les concernant

Question : je souhaite créer une troisième feuille, contenant toutes les colonnes de la feuille n°02, mais que pour mes nouveaux clients de la feuille n°01.

En d'autres termes, extraire de ma feuille n°02 et ne conserver que les lignes de mes nouveaux clients que je ne peux repérer que par leur numéro de client.

Avez-vous une solution?

Merci d'avance

Cordialement

Michel

Bonjour Michel

Sub ExtraireNouveauxClients()
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
    Dim dict As Object
    Dim i As Long, lastRow1 As Long, lastRow2 As Long, lastCol2 As Long
    Dim clientNum As String

    ' Définir les feuilles
    Set ws1 = ThisWorkbook.Sheets("Feuille1")
    Set ws2 = ThisWorkbook.Sheets("Feuille2")
    Set ws3 = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws3.Name = "NouveauxClients"

    ' Créer un dictionnaire pour stocker les numéros de clients de la feuille 1
    Set dict = CreateObject("Scripting.Dictionary")

    ' Obtenir le dernier numéro de ligne de la feuille 1
    lastRow1 = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row

    ' Remplir le dictionnaire avec les numéros de clients de la feuille 1
    For i = 1 To lastRow1
        clientNum = ws1.Cells(i, 1).Value
        If Not dict.exists(clientNum) Then
            dict.Add clientNum, Nothing
        End If
    Next i

    ' Obtenir le dernier numéro de ligne et de colonne de la feuille 2
    lastRow2 = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row
    lastCol2 = ws2.Cells(1, ws2.Columns.Count).End(xlToLeft).Column

    ' Copier les en-têtes de la feuille 2 à la feuille 3
    ws2.Range(ws2.Cells(1, 1), ws2.Cells(1, lastCol2)).Copy Destination:=ws3.Cells(1, 1)

    ' Parcourir les lignes de la feuille 2 et copier les lignes correspondantes à la feuille 3
    For i = 2 To lastRow2
        clientNum = ws2.Cells(i, 1).Value
        If dict.exists(clientNum) Then
            ws2.Range(ws2.Cells(i, 1), ws2.Cells(i, lastCol2)).Copy Destination:=ws3.Cells(ws3.Rows.Count, 1).End(xlUp).Offset(1, 0)
        End If
    Next i

    ' Nettoyer
    Set dict = Nothing
    Set ws1 = Nothing
    Set ws2 = Nothing
    Set ws3 = Nothing
End Sub

Bonjour à tous !

La piste Power Query (complément gratuit Microsoft à installer pour 2013. Nativement intégré à partir d'Excel 2016) devrait, aisément et rapidement, vous retourner le résultat escompté.

Au besoin, joignez un classeur représentatif.

Bonjour et1000lio,

merci pour cette réponse rapide.

Etant utilisateur basique Excel, je comprends que ces lignes de codes donnent une instruction à Excel mais, comment procéder, où saisir ces codes?

merci

Bonjour à tous !

Je vous remercie de ce retour...

Bonjour,

C'est une macro VBA. Je vous invite à regarder sur internet/ce site pour répondre à votre question :

Quand vous aurez fait cela, copiez le code donné et lancez le.

En dehors de cela la proposition de @JFL que vous avez ignoré est "plus adaptée" et surtout plus moderne pour répondre à votre problème.

Rechercher des sujets similaires à "filtrage selection informations"