Filtre élaboré en VBA

Résolu
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 !
Configuration: Windows 2000 Internet Explorer 6.0

4 réponses

  1. Contributeur
    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
    1. 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
      1. 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
        1. Contributeur
          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
          1. 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