Filtre élaboré en VBA

Résolu
Juju -  
 Juju -
Bonjour,
J'ai une colonne de données je cherche à écrire le code en VBA pour que dans ma colonne F il trie les données de manière a rendre visible uniquement les lignes dont la valeur de la collonne F est supérieur à 5...

Du gateau pour certain ... moins pour d'autre merci de vos conseils avisés !
A voir également:

4 réponses

gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 728
 
bonjour

Si j'ai bien décodé ta question :
    Range("F1").AutoFilter Field:=6, Criteria1:=">5"


Tu emploie à tord "trier" alors que tu veux "filtrer" : lorsque l'on trie on modifie l'ordre des données mais lorsque l'on filtre on les sélectionne.
0
Juju
 
merci beaucoup pour ton petit coup de pouce... cela fonctionne !!

et pour le vocabulaire qui en effet semble être inexacte....

Cependant ce que tu m'as mis incrémente un trieur a toutes mes colonnes ... je veux que les personnes qui se servent du fichiers ne voient que les données > à 5 après éxécutions de ma macro... je me rend compte que la seule possibilité de faire cela est de créer une macro qui copie les lignes correspondant dont la case en F est supp a 5...dans un autre fichier comme ce que j'ai essayé de faire dans un premier temps ici...
ma maccro est la suivante mais elle plante....

:(

Sub Test_copie_valeures()

' COPIE DES LIGNES DESIREES DANS LES FEUILLES DE CALCUL DEDIEES

Dim Rw As Range
Dim Ligne As Long

' Sélectionne l'ensemble des données (utile pour qu'Excel ne "réfléchisse" pas sur les 65000 lignes)

Windows("XT.xls").Activate
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select

' Boucle qui va passer sur chaque ligne de la sélection afin de déterminer si des lignes contiennent le flag voulu
' sélection puis copie dans un autre tableur(copie de XT vers XR) en conservant la même forme des données

(Ca devient très bancale a partie de là je crois....la colonne que je cherche a trier est la colonne F soit la 6e dans XT je cherche a copier toutes les lignes de XT feuilles de Janvier dans XR)

For Each Rw In Selection.Rows

Ligne = Rw.Row

If Rw.Cells(Ligne, 6).Value > "5" Then

plantage en dessous..........................................................

Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Windows("XR.xls").Activate
Sheet
ActiveSheet.Paste

Rw.Copy Worksheets("Janvier").Cells(Ligne, 1).EntireRow
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End If

Next Rw

' Pop-up d'avertissement de fin de macro.

MsgBox "Bla bla bla.", vbOKOnly, "Macro terminée"

End Sub

bon voilà le topo intégrale peux tu m'aider ?
0
Bidouilleu_R Messages postés 1209 Statut Membre 295
 
Bonjour,

je post pour te faire avancé et gbinforme te corrigera ....
précise bien les où se trouvent les données (source et but) ex : source de A1 à F18 à copier vers...


'ci-dessous.... ton code
F soit la 6e dans XT je cherche a copier toutes les lignes de XT feuilles de Janvier dans XR)

For Each Rw In Selection.Rows

Ligne = Rw.Row

If Rw.Cells(Ligne, 6).Value > "5" Then

'plantage en dessous..........................................................
rw.select ' cette ligne copiera la ligne de ta sélection .

' attention il y aura un clignotement entre les classeurs

'Range(Selection, Selection.End(xlToRight)).Select ' cela copie toute la sélection.
Selection.Copy
Windows("XR.xls").Activate
'Sheet
ActiveSheet.Paste

'Rw.Copy Worksheets("Janvier").Cells(Ligne, 1).EntireRow
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End If

Next Rw
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 728
 
bonjour

je veux que les personnes qui se servent du fichiers ne voient que les données > à 5 après éxécutions de ma macro...

Si j'ai compris ce que tu veux, cette macro devrait le faire

Public Sub Test_copie_valeurs()
Const nom = "sélection"
    Windows("XT.xls").Activate
    Sheets.Add.Name = nom
    Sheets("F2").Activate
    Range("A1").AutoFilter Field:=6, Criteria1:=">5"
    Cells.SpecialCells(xlCellTypeVisible).Copy _
        Destination:=Sheets(nom).Cells(1, 1)
    Range("A1").AutoFilter
    Application.DisplayAlerts = False
    Sheets(nom).Copy
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\WR.xls"
    Windows("XT.xls").Activate
    Sheets(nom).Delete
    Application.DisplayAlerts = True
    ActiveWorkbook.Close True
End Sub

Tu ouvres "XT.xls" où tu as ta macro, tu lances ta macro,
- elle sélectionne tes données sur une autre feuille que j'ai appelé "sélection"
( mais tu mets le nom que tu veux en tête )
- elle sauvegarde ta sélection dans "WR.xls" ( comme tu voulais faire )
- "XT.xls" se ferme et il te reste à l'écran ta sélection.
0
Juju
 
après quelques heures de boulot et un coup de main de ponpon...

Option Explicit

Sub FiltrerCopierVersClasseurCopy()

Dim objsource As Workbook, objcible As Workbook
Dim shmois As String
Dim li, msg, nbli, rep, style, titre, w

' *** Le classeur source et la feuille concernée
Set objsource = ActiveWorkbook
shmois = ActiveSheet.Name
' *** Valider le classeur cible ... est-il déjà ouvert
If Workbooks.Count = 1 Then GoTo NonOuvert
For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
msg = "Classeur ouvert : " & w.Name & Chr(13) & "S'il sagit du classeur de copie, clic sur Valider . Autrement clic Non."
style = vbYesNo
titre = "Valider classeur qui recoit les copies"
rep = MsgBox(msg, style, titre)
If rep = vbYes Then ' L'utilisateur a choisi Oui.
Set objcible = Workbooks(w.Name)
objsource.Activate
GoTo Suite
End If
End If
Next w
NonOuvert:
MsgBox ("Le classeur de copie n'est pas ouvert.")
Set objcible = Workbooks.Open(Application.GetOpenFilename)
Windows(objsource.Name).Activate
Suite:
' *** Recherche des valeurs supérieur à 5 dans la colonne "F" si oui copier ligne vers classeur de copy
Worksheets(shmois).Select
With Sheets(shmois)
nbli = 0
For li = 3 To Range("A65536").End(xlUp).Row
If Cells(li, 6).Value > 5 Then
Range(Cells(li, 1), Cells(li, 12)).Copy Destination:=objcible.Sheets(shmois).Range("A" & objcible.Sheets(shmois).Range("A65536").End(xlUp).Row + 1)
nbli = nbli + 1
End If
Next li
End With
MsgBox ("Les " & nbli & " lignes de données sont copiées dans " & objcible.Name & ", feuille : " & shmois & "")
End Sub

voilà ma macro si elle peut servir à d'autre !

Merci de votre aide les gars cela m'a permis d'avancer et de voir mon projet sous un autre angle !

;) bonne continuation et a bientôt.... !!

merci encore !
0