[VBA Userform] optimisation macro copie lignes sous critères
Bonjour à tous,
Je ne sais pas si ce sujet à déjà été abordée auparavant, mais je viens vers vous car je débute depuis peu en VBA et cela fait quelques jours maintenant que j'aimerais pouvoir faire évoluer le code ma macro pour la rendre utilisable facilement mais je ne sais pas trop comment m'y prendre.
L'idée principale serait en fait de pouvoir remplacer dans mon code existant les dates de début "dtdeb" et de fin "dtfin" d'intervalle définies et codées en dur, afin de pouvoir sélectionner de manière dynamique n'importe quel intervalle de temps dans ma macro. j'ai entendu parler d'un bouton excel permettant de sélectionner facilement un intervalle de dates (du style Microsoft Date And Time picker control...).
Malheureusement, je ne sais pas comment l'utiliser dans un formulaire VBA et surtout comment adapter et modifier mon code existant en conséquence.
Peut-être existe-il d'autres moyens plus simple également ???
D'avance merci pour vos retours,
Mathieu
Je vous fais part ci-dessous de mon code actuel :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| Option Explicit
Dim Tablo, Ln1, Ln2, Col, Col2
Dim dtdeb As Date
Dim dtfin As Date
Sub TabFe()
'Choix des colonnes du tableau à créer dans l'onglet TestTabFe.
Tablo = Array("B", "D", "F", "G", "H", "L", "M", "N")
Ln1 = 16
'La ligne n°16 correspond à la 1ère ligne de l'onglet Liste_FNC.
Ln2 = 2
'La ligne n°2 correspond à la 1ère ligne de l'onglet TestTabFe.
dtdeb = DateSerial(14, 01, 31)
dtfin = DateSerial(13, 12, 31)
While Cells(Ln1, 1).Value <> ""
If Range("B" & Ln1).Value = "KSB" And UCase(Range("AP" & Ln1).Value) = "OUI" And Range("N" & Ln1).Value <= dtdeb And Range("N" & Ln1).Value >= dtfin Then
Col2 = 0
For Each Col In Tablo
Sheets("TestTabFe").Cells(Ln2, Col2 + 1).Value = Range(Tablo(Col2) & Ln1).Value
Col2 = Col2 + 1
Next Col
Ln2 = Ln2 + 1
End If
Ln1 = Ln1 + 1
Wend
Sheets("TestTabFe").Activate
'Bordure Ligne.
Range("A1").CurrentRegion.Select
With Selection
.Borders.LineStyle = xlContinuous
End With
'Bordure Colonne.
With Range("A1:H" & Ln2 - 1)
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
End Sub |