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
- Messages
- 2'415
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
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
- Messages
- 2'415
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
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.
- Messages
- 2'415
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
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
- Messages
- 2'415
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
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