VBA-Filtre Avancé

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Masako74
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 15 janvier 2018
Version d'Excel : 2016FR

Message par Masako74 » 30 janvier 2018, 11:34

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
1 ECHEANCIER VBA.xlsm
(102.13 Kio) Téléchargé 10 fois
A
Andre13
Membre impliqué
Membre impliqué
Messages : 1'673
Appréciations reçues : 109
Inscrit le : 13 juillet 2017
Version d'Excel : 2007-2013

Message par Andre13 » 30 janvier 2018, 12:36

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é
M
Masako74
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 15 janvier 2018
Version d'Excel : 2016FR

Message par Masako74 » 30 janvier 2018, 13:33

Bonjour Andre13,

Merci quand même x)
M
Masako74
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 15 janvier 2018
Version d'Excel : 2016FR

Message par Masako74 » 31 janvier 2018, 09:13

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
1 ECHEANCIER VBAV1.xlsm
(102.74 Kio) Téléchargé 3 fois
A
Andre13
Membre impliqué
Membre impliqué
Messages : 1'673
Appréciations reçues : 109
Inscrit le : 13 juillet 2017
Version d'Excel : 2007-2013

Message par Andre13 » 31 janvier 2018, 10:05

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é
1 ECHEANCIER VBAV1_copie_test001.xlsm
(150.86 Kio) Téléchargé 9 fois
M
Masako74
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 15 janvier 2018
Version d'Excel : 2016FR

Message par Masako74 » 31 janvier 2018, 10:16

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.
A
Andre13
Membre impliqué
Membre impliqué
Messages : 1'673
Appréciations reçues : 109
Inscrit le : 13 juillet 2017
Version d'Excel : 2007-2013

Message par Andre13 » 31 janvier 2018, 11:35

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é
M
Masako74
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 15 janvier 2018
Version d'Excel : 2016FR

Message par Masako74 » 31 janvier 2018, 11:42

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
A
Andre13
Membre impliqué
Membre impliqué
Messages : 1'673
Appréciations reçues : 109
Inscrit le : 13 juillet 2017
Version d'Excel : 2007-2013

Message par Andre13 » 31 janvier 2018, 14:09

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é
1 ECHEANCIER VBAV1_copie_test003.xlsm
(176.94 Kio) Téléchargé 9 fois
M
Masako74
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 15 janvier 2018
Version d'Excel : 2016FR

Message par Masako74 » 31 janvier 2018, 16:06

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
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message