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
... ç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 ?n° Nom Prénom Date Montant
Quand tu dis
... cet autre critère concernerait tout de même le Nom ?si le nom = MARTIN ou tout autre critère choisi
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 SubC'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