VBA-Filtre Avancé

Bonjour,

Me revoilà avec encore un petit problème. Je travaille toujours sur la création d'un échéancier qui bascule sur un tableau de relance.

J'ai donc une Macro qui me permet de filtrer dans mes feuilles échéancier les personnes où régler=Non et aussi de les trier selon le numéro de client.

Le problème de ma Macro est le suivant : Les colonnes "Acompte" et "Commentaires" où l'utilisateur peut inscrire des données se modifie quand on lance la Macro en faisant remonter les cellules.

Je vous joins à cela mon Fichier, il suffit de faire CTRL+R pour lancer la Macro qui permet de basculer sur la Relance.

Les données du tableau sont purement fictive et servent d'exemple.

Voici aussi un descriptifs des différentes feuilles de l'échéancier afin de mieux le comprendre :

- Tout d'abords mes feuilles échéancier ( Ici elles vont jusqu'au mois de mai, mais dans le dossier finale elles iront jusqu'au mois de décembre. ) Elles fonctionnent avec la base de données des Factures et des Clients, et donc s'automatisent selon le numéro des Factures. Et l'utilisateur inscrit si oui ou non il a réglée à l'aide de la liste déroulante dont j'ai inscrit mes données dans ma feuille "Annexe"

Pour les échéanciers j'ai créé 2 Macros, la première permet de Filtrer l'échéancier si Réglée=Non et la deuxième permet de faire un retour après le filtre.

- Ensuite, ma feuille de Relance. Celle ci me permet donc de regrouper tout les "réglée=Non" sur une même feuille afin de suivre la relance du Client. Afin de suivre au mieux la relance il y a les colonnes de "H à L" que j'ai automatisé afin de rechercher dans ma base de données le numéro de téléphone et l'email, mais aussi le reste à payer selon que le client est verser un acompte ou non et aussi les commentaires que l'utilisateur peut rajouter.

Et j'avais aussi inscrit un En-tête pour ma feuille de relance mais la Macro refuse de fonctionner avec celui-ci, je vous ai donc rajouter une feuille que j'ai nommer "RelanceEntête" où vous pouvez voir mon tableau initial avec l'entête.

Merci d'avance pour votre aide

Sub FILTREAVANCE3()

Dim critere As Range, w As Worksheet, titres As Range
Set critere = Sheets("Annexe").[A1:A2]
Application.ScreenUpdating = False
With Feuil6.[A:G]  'feuille Relance
    .Rows(2).Resize(.Rows.Count - 1).ClearContents 'RAZ
    Range("A2").Select

    For Each w In Worksheets
        If w.Name Like "0*" Then

            Set titres = .Cells(.Rows.Count, 1).End(xlUp)(2).Resize(, .Columns.Count)
            .Rows(1).Copy titres
            w.Range("A7").CurrentRegion.AdvancedFilter xlFilterCopy, critere, titres
            titres.EntireRow.Activate
            titres.EntireRow.Delete xlUp
            Do While ActiveCell.Value <> ""
                Range("A" & (ActiveCell.Row + 1)).Select
            Loop
            With ActiveCell
                 .EntireRow.Insert xlShiftDown 'Insert une ligne au dessus
                 .EntireRow.Copy ' Copie la ligne active
                 With .Offset(-1).EntireRow 'Passe les formats et formules à la ligne insérée
                    .PasteSpecial xlPasteFormats
                    .PasteSpecial xlPasteFormulas
                    End With
                Application.CutCopyMode = False
            End With
        End If
    Next
End With

'
' Triage Macro
' Triage selon num client- relance
'

'
    Cells.Select
    ActiveWorkbook.Worksheets("Relance").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Relance").Sort.SortFields.Add Key:=Range("A2:A119" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Relance").Sort
        .SetRange Range("A1:L119")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A2").Select
End Sub
221-echeancier-vba.xlsm (102.13 Ko)

Bonjour

j'ai remarqué que

With Feuil6.[A:G] 'feuille Relance

les colonnes A jusqu'à G peut être en mettant jusqu'à L

@Tester dans la macro Sub FILTREAVANCE3()

With Feuil6.[A:L]  'feuille Relance

EDIT : cela ne fonctionne pas également arfff

crdlt,

André

Bonjour Andre13,

Merci quand même x)

Finalement j'ai un nouveau codage, plus simple , sans filtre avancé. Mais le problème est toujours là, il serait du à la Macro de triage.

Sub ReglerNon()
    Dim a(), i As Long, L As Long, cel As Range
    ' ReglerNon Macro
    ' Trie l'échéancier selon que régler = Non
    Feuil10.Range("A8:F200").ClearContents 'feuil10 codename de feuille RelaceEntête
    For Each w In Worksheets
        If IsNumeric(Left(w.Name, 2)) Then
            L = w.Range("A65000").End(xlUp).Row
            If L > 7 Then
                For Each cel In w.Range("G8:G" & L)
                    If cel = "Non" Then
                        i = i + 1: ReDim Preserve a(1 To 6, 1 To i)    '1 to 6 colonnes, 1 to i lignes,on ne sait ajouter que des colonnes dans un tableau
                        a(1, i) = cel.Offset(, -2)    'n°client
                        a(2, i) = cel.Offset(, -1)    'raison
                        a(3, i) = cel.Offset(, -6)    'Fact
                        a(4, i) = cel.Offset(, -5)    'date facture
                        a(5, i) = cel.Offset(, -4)    'date échéance
                        a(6, i) = cel.Offset(, -3)    'montant
                    End If
                Next
            End If
        End If
    Next
    a = Application.Transpose(a)    'a colonnes,lignes devient a lignes,colonnes
    Feuil10.Range("A8").Resize(UBound(a, 1), UBound(a, 2)) = a
    Tri
End Sub

Sub Tri()
    ActiveWorkbook.Worksheets("RelanceEntête").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("RelanceEntête").Sort.SortFields.Add Key:=Range( _
                                                                        "A8:A125"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                                                                   xlSortNormal
    With ActiveWorkbook.Worksheets("RelanceEntête").Sort
        .SetRange Range("A7:L125")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Bonjour toutes et tous

regarde si c'est cela ci-joint, après aucune idée, il faudra voit quand même les valeurs des références soit identiques sur chaque onglets, car là c'est un méli mélo.

crdlt,

André

Salut Andre13

Je n'arrive pas très bien à comprendre ce que tu as fais... pourrait tu m'expliquer ?

Je voudrais savoir ce qui a été modifier, cela m'a l'air de fonctionner

EDIT : Finalement Non, il y a toujours ce problème de décalage des qu'on lance le triage selon le numéro de client... Zut. Merci quand même.

Re,

Tes dates d'échéances et de factures ne correspondent pas le tri s'effectuerai bien, je pense qu'il faut regarder dans l'onglet 01-janv et aussi

pour l'onglet 04-avril tu mets date d'échéance 10 janv2017 (10/01/2017) et date de facturation 01 décembre 2017(01/12/2017)

crdlt,

André

Re,

Oui en effet j'ai vu ça et même en le corrigeant, si on utilise la relance et le tri à plusieurs reprise les données finissent toujours par changer de place.

Cordialement

Re,

bon, j'ai réalisé ci-joint mais, je pense que cela ne doit pas être bon j'ai du mal avec les dates non réelles

de plus, les en têtes des colonnes sont trop différentes (sauf pour celles des onglets mensuels)

il doit y avoir beaucoup beaucoup plus simple

crdlt,

André

Re Andre13 ,

Merci de ton aide, c'est vrai que c'est compliqué tout ça... Mais je finirais bien par trouvé, si sa avait d'être le cas je t'en ferais part

Cordialement, Masako

Rechercher des sujets similaires à "vba filtre avance"