Affichage automatique de liste en fonction d'un critère

Bonjour,

Je souhaiterais pouvoir programmer en VBA.

Deux onglets dans un même classeur.

Le premier contient des données ligne par ligne sur 4 colonnes :

n° Nom Prénom Date Montant

504035 DUPONT Jacques 04/04/2019 50000

504032 MARTIN René 01/01/2019 10000

1004032 DURAND Henri 01/05/2018 1000

12305604 PIERRE Laurent 04/05/2017 500

5405 LAURENT René 01/01/2019 14000

574054 BERTRAND Marie 01/05/2018 2000

857885 PAUL Alain 04/05/2017 5000

64042 MARTIN Paul 01/02/2016 10000

Je souhaite que dans le deuxième onglet soit affichées seulement les lignes qui remplissent un critère précis.

Par exemple si le nom = MARTIN ou tout autre critère choisi).

Exemple: si le critère est le NOM = MARTIN ma second onglet affichera :

504032 MARTIN René 01/01/2019 10000

64042 MARTIN Paul 01/02/2016 10000

Cela paraît simple sans VBA avec un filtre automatique mais avec VBA.

J'ai trouvé cette sub sur un forum, mais je en sais pas comment l'adapter.

Sub service1()

Dim Ws As Worksheet

Dim Thm As String, flag&

With Worksheets("Synthèse")

'Initialisation de la zone de résultats

Range("A10").CurrentRegion.ClearContents

' Thm = Cells(5, 2) 'valeur recherchée

If Thm <> "" Then

flag = 0

For Each Ws In ThisWorkbook.Worksheets

If Ws.Name <> .Name Then

For i = 5 To Ws.Range("A" & Rows.Count).End(xlUp).Row

If Ws.Range("A" & i) = Thm Then

NewLig = Application.Max(10, .Cells(.Rows.Count, 1).End(xlUp).Row + 1)

Ws.Range(Ws.Cells(i, 2), Ws.Cells(i, 7)).Copy .Range("A" & NewLig)

flag = 1

End If

Next i

'Recherche Ws, Thm

End If

Next Ws

End If

If flag = 0 Then MsgBox "Le service " & .Range("B5") & " n'est mentionné dans aucune feuille.", 16

End With

End Sub

Merci par avance pour la réponse.

LP

Bonjour,

Pour extraire des données d'une feuille à une autre, un filtre avancé serait peut-être plus adapté ...

Tu parles de 4 colonnes, mais

n° Nom Prénom Date Montant

... ça en ferait plutôt 5 ? À moins que nom et prénom figurent dans une seule ... mais alors, MARTIN dans ton exemple représenterait toutes le personnes dont le nom est celui-là et le prénom quelconque ?

Quand tu dis

si le nom = MARTIN ou tout autre critère choisi

... cet autre critère concernerait tout de même le Nom ?

En conséquence, un classeur exemple (avec des données qui ne soient pas confidentielles) serait le bienvenu.

Bonjour,

Et merci pour la réponse et d'avoir pris de votre temps.

J'ai créé le fichier pour plus de facilités.

Il n'y a aucun codé (à part pour le bouton en feuil2 qui ne sert à rien).

Je souhaiterais que les données affichées dans feuil2 soit les données de Feuil1 automatiquement filtrées par le critère situé en F2 (dans le cas présent, la ville).

Ce que je ne parviens à pas maîtriser, c'est comment afficher les données en FEuil2 en fonction du critère et surtout, de faire en sorte qu'en cas de modification en Feuil1, feuil2 soit modifiée automatiquement.

et où faut-il placer le code ? dans Feuil2 ?

Le fichier d'exemple est joint et les données sont fictives.

Merci par avance.

Cordialement,

Re-bonjour,

Pour n'importe quel usage, il vaut mieux éviter les lignes vides dans une liste de données. En Feuil1, supprimer celle entre les titres et le premier enregistrement.

Dans la fenêtre de code de la Feuil2, coller les lignes suivantes:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub 'si plus d'une cellule modifiée, on quitte la procédure
If Target.Address <> "$F$2" Then Exit Sub 'si la cellule modifiée n'est pas F2, idem
[A7].CurrentRegion.ClearContents 'effacer les anciens résultats
Sheets("Feuil1").[A3].CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
    criteriarange:=[F1:F2], copytorange:=[A7:F7] 'exécuter le filtre avancé
End Sub

C'est "basique", mais teste déjà cette procédure événementielle, pour t'assurer que le résultat est le bon ! Le code s'exécute au changement de valeur en cellule F2

Rechercher des sujets similaires à "affichage automatique liste fonction critere"