si tu le places dans une feuille module si tu es dans un formulaire, tu
devras utiliser With Workheets("NomFeuille") pour définir la plage à 2
endroits et réserver Me pour désigner les objets du formulaire seulement
si tu le places dans une feuille module si tu es dans un formulaire, tu
devras utiliser With Workheets("NomFeuille") pour définir la plage à 2
endroits et réserver Me pour désigner les objets du formulaire seulement
si tu le places dans une feuille module si tu es dans un formulaire, tu
devras utiliser With Workheets("NomFeuille") pour définir la plage à 2
endroits et réserver Me pour désigner les objets du formulaire seulement
Merci beaucoup. J'ai essayer avec beaucoup plus de lignes dans la feuille et
cela charge vraiment plus vite.
Je commence à comprendre un peu. Un modèle concret aide vraiment beaucoup.
Par contre les procédure de filtre ne fonctionne plus alors qu'ils
fonctionnaient avec mon ancien code. Les deux codes ont la même fonction
pourtant. Je comprend pas pourquoi.
J'ai l'impression que c'est un problème avec les ChargementListe "debut" et
"fin"
Tu peux, si j'ose encore demander, me mettre sur la piste ? Merci beaucoup
Dim Rg As Range
Private Sub UserForm_Initialize()
Application.ScreenUpdating = True
Feuil4.Activate
With Feuil2
If .AutoFilterMode = True Then
.Range(.[A1], .[J65000].End(xlUp)).AutoFilter
Else
CmbNouvelle_Click
Trier
ChargementListe "debut"
End If
End With
CmbNouvelle_Click
End Sub
Private Sub ChargementListe(param)
Dim l As Integer
Dim Plage As String
l = Feuil2.Range("A65536").End(xlUp).Row
Plage = Feuil2.Range("A2:J" & l).Address
Set plage1 = Feuil2.[_filterdatabase].Offset(1)
On Error Resume Next
If param = "debut" Then
Set plage1 = Feuil2.Range("A2:A" & l)
Else
Set plage1 = plage1.Resize(plage1.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
End If
If Err.Number <> 0 Then
Err.Clear
If param = "fin" Then
MsgBox "Aucun enregistrement sélectionné"
CmbNouvelle_Click
Range("A1:J1").Select
Selection.AutoFilter
Range("A1").Select
Exit Sub
End If
End If
On Error GoTo 0
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
End Sub
Private Sub CmdFiltrer_Click()
UserForm_Initialize
With Feuil2
If AutoFilterMode = True Then
Selection.AutoFilter
Range([A1], [J65000].End(xlUp)).AutoFilter Field:=1
End If
End With
FiltreDate
FiltreCombos
End Sub
Private Sub FiltreDate()
Dim l As Integer
Dim Plage As Range
Dim DD As Single
Dim DF As Single
DD = CDate(TxtDateDebut)
DF = CDate(TxtDateFin)
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
Plage.AutoFilter Field:=1, Criteria1:=">=" & DD, Operator:=xlAnd,
Criteria2:="<=" & DF 'Date
ChargementListe "fin"
End Sub
Private Sub FiltreCombos()
Dim l As Integer
Dim Plage As Range
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
If Me.Combo1.Value <> "" Then
Plage.AutoFilter Field:=3, Criteria1:=Combo1 'Alias
End If
If Me.Combo2.Value <> "" Then
Plage.AutoFilter Field:, Criteria1:=Combo2 'Paiement
End If
If Me.Combo3.Value <> "" Then
Plage.AutoFilter Field:=9, Criteria1:=Combo3 'Carte
End If
If Me.Combo4.Value <> "" Then
Plage.AutoFilter Field:=4, Criteria1:=Combo4 'Type
End If
If Me.Combo5.Value <> "" Then
Plage.AutoFilter Field:=2, Criteria1:=Combo5 'Immatriculation
End If
ChargementListe "fin"
End Sub
Private Sub CmbNouvelle_Click()
With Feuil2
With .Range("_FilterDataBase")
.AutoFilter
End With
End With
ChargementListe "debut"
End Sub
Merci beaucoup. J'ai essayer avec beaucoup plus de lignes dans la feuille et
cela charge vraiment plus vite.
Je commence à comprendre un peu. Un modèle concret aide vraiment beaucoup.
Par contre les procédure de filtre ne fonctionne plus alors qu'ils
fonctionnaient avec mon ancien code. Les deux codes ont la même fonction
pourtant. Je comprend pas pourquoi.
J'ai l'impression que c'est un problème avec les ChargementListe "debut" et
"fin"
Tu peux, si j'ose encore demander, me mettre sur la piste ? Merci beaucoup
Dim Rg As Range
Private Sub UserForm_Initialize()
Application.ScreenUpdating = True
Feuil4.Activate
With Feuil2
If .AutoFilterMode = True Then
.Range(.[A1], .[J65000].End(xlUp)).AutoFilter
Else
CmbNouvelle_Click
Trier
ChargementListe "debut"
End If
End With
CmbNouvelle_Click
End Sub
Private Sub ChargementListe(param)
Dim l As Integer
Dim Plage As String
l = Feuil2.Range("A65536").End(xlUp).Row
Plage = Feuil2.Range("A2:J" & l).Address
Set plage1 = Feuil2.[_filterdatabase].Offset(1)
On Error Resume Next
If param = "debut" Then
Set plage1 = Feuil2.Range("A2:A" & l)
Else
Set plage1 = plage1.Resize(plage1.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
End If
If Err.Number <> 0 Then
Err.Clear
If param = "fin" Then
MsgBox "Aucun enregistrement sélectionné"
CmbNouvelle_Click
Range("A1:J1").Select
Selection.AutoFilter
Range("A1").Select
Exit Sub
End If
End If
On Error GoTo 0
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
End Sub
Private Sub CmdFiltrer_Click()
UserForm_Initialize
With Feuil2
If AutoFilterMode = True Then
Selection.AutoFilter
Range([A1], [J65000].End(xlUp)).AutoFilter Field:=1
End If
End With
FiltreDate
FiltreCombos
End Sub
Private Sub FiltreDate()
Dim l As Integer
Dim Plage As Range
Dim DD As Single
Dim DF As Single
DD = CDate(TxtDateDebut)
DF = CDate(TxtDateFin)
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
Plage.AutoFilter Field:=1, Criteria1:=">=" & DD, Operator:=xlAnd,
Criteria2:="<=" & DF 'Date
ChargementListe "fin"
End Sub
Private Sub FiltreCombos()
Dim l As Integer
Dim Plage As Range
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
If Me.Combo1.Value <> "" Then
Plage.AutoFilter Field:=3, Criteria1:=Combo1 'Alias
End If
If Me.Combo2.Value <> "" Then
Plage.AutoFilter Field:, Criteria1:=Combo2 'Paiement
End If
If Me.Combo3.Value <> "" Then
Plage.AutoFilter Field:=9, Criteria1:=Combo3 'Carte
End If
If Me.Combo4.Value <> "" Then
Plage.AutoFilter Field:=4, Criteria1:=Combo4 'Type
End If
If Me.Combo5.Value <> "" Then
Plage.AutoFilter Field:=2, Criteria1:=Combo5 'Immatriculation
End If
ChargementListe "fin"
End Sub
Private Sub CmbNouvelle_Click()
With Feuil2
With .Range("_FilterDataBase")
.AutoFilter
End With
End With
ChargementListe "debut"
End Sub
Merci beaucoup. J'ai essayer avec beaucoup plus de lignes dans la feuille et
cela charge vraiment plus vite.
Je commence à comprendre un peu. Un modèle concret aide vraiment beaucoup.
Par contre les procédure de filtre ne fonctionne plus alors qu'ils
fonctionnaient avec mon ancien code. Les deux codes ont la même fonction
pourtant. Je comprend pas pourquoi.
J'ai l'impression que c'est un problème avec les ChargementListe "debut" et
"fin"
Tu peux, si j'ose encore demander, me mettre sur la piste ? Merci beaucoup
Dim Rg As Range
Private Sub UserForm_Initialize()
Application.ScreenUpdating = True
Feuil4.Activate
With Feuil2
If .AutoFilterMode = True Then
.Range(.[A1], .[J65000].End(xlUp)).AutoFilter
Else
CmbNouvelle_Click
Trier
ChargementListe "debut"
End If
End With
CmbNouvelle_Click
End Sub
Private Sub ChargementListe(param)
Dim l As Integer
Dim Plage As String
l = Feuil2.Range("A65536").End(xlUp).Row
Plage = Feuil2.Range("A2:J" & l).Address
Set plage1 = Feuil2.[_filterdatabase].Offset(1)
On Error Resume Next
If param = "debut" Then
Set plage1 = Feuil2.Range("A2:A" & l)
Else
Set plage1 = plage1.Resize(plage1.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
End If
If Err.Number <> 0 Then
Err.Clear
If param = "fin" Then
MsgBox "Aucun enregistrement sélectionné"
CmbNouvelle_Click
Range("A1:J1").Select
Selection.AutoFilter
Range("A1").Select
Exit Sub
End If
End If
On Error GoTo 0
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
End Sub
Private Sub CmdFiltrer_Click()
UserForm_Initialize
With Feuil2
If AutoFilterMode = True Then
Selection.AutoFilter
Range([A1], [J65000].End(xlUp)).AutoFilter Field:=1
End If
End With
FiltreDate
FiltreCombos
End Sub
Private Sub FiltreDate()
Dim l As Integer
Dim Plage As Range
Dim DD As Single
Dim DF As Single
DD = CDate(TxtDateDebut)
DF = CDate(TxtDateFin)
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
Plage.AutoFilter Field:=1, Criteria1:=">=" & DD, Operator:=xlAnd,
Criteria2:="<=" & DF 'Date
ChargementListe "fin"
End Sub
Private Sub FiltreCombos()
Dim l As Integer
Dim Plage As Range
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
If Me.Combo1.Value <> "" Then
Plage.AutoFilter Field:=3, Criteria1:=Combo1 'Alias
End If
If Me.Combo2.Value <> "" Then
Plage.AutoFilter Field:, Criteria1:=Combo2 'Paiement
End If
If Me.Combo3.Value <> "" Then
Plage.AutoFilter Field:=9, Criteria1:=Combo3 'Carte
End If
If Me.Combo4.Value <> "" Then
Plage.AutoFilter Field:=4, Criteria1:=Combo4 'Type
End If
If Me.Combo5.Value <> "" Then
Plage.AutoFilter Field:=2, Criteria1:=Combo5 'Immatriculation
End If
ChargementListe "fin"
End Sub
Private Sub CmbNouvelle_Click()
With Feuil2
With .Range("_FilterDataBase")
.AutoFilter
End With
End With
ChargementListe "debut"
End Sub
Re Daniel !
Tu ouvre l'userForm "Historique", Selection dans un combo et clic sur
Filtrer.
'==== 1ère solution : Chargement long mais les filtres fonctionne
With Me.LstResultat
.Clear
For Each c In plage1
.AddItem c.Value
.List(.ListCount - 1, 1) = c.Offset(, 1)
.List(.ListCount - 1, 2) = c.Offset(, 2)
.List(.ListCount - 1, 3) = c.Offset(, 3)
.List(.ListCount - 1, 4) = c.Offset(, 4)
.List(.ListCount - 1, 5) = c.Offset(, 5)
.List(.ListCount - 1, 6) = c.Offset(, 6)
.List(.ListCount - 1, 7) = c.Offset(, 7)
.List(.ListCount - 1, 8) = c.Offset(, 8)
.List(.ListCount - 1, 9) = c.Offset(, 9)
Next
End With
'==== 2ème solution : Chargement plus rapide mais les filtres ne fonctionne
pas
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
Re Daniel !
Tu ouvre l'userForm "Historique", Selection dans un combo et clic sur
Filtrer.
'==== 1ère solution : Chargement long mais les filtres fonctionne
With Me.LstResultat
.Clear
For Each c In plage1
.AddItem c.Value
.List(.ListCount - 1, 1) = c.Offset(, 1)
.List(.ListCount - 1, 2) = c.Offset(, 2)
.List(.ListCount - 1, 3) = c.Offset(, 3)
.List(.ListCount - 1, 4) = c.Offset(, 4)
.List(.ListCount - 1, 5) = c.Offset(, 5)
.List(.ListCount - 1, 6) = c.Offset(, 6)
.List(.ListCount - 1, 7) = c.Offset(, 7)
.List(.ListCount - 1, 8) = c.Offset(, 8)
.List(.ListCount - 1, 9) = c.Offset(, 9)
Next
End With
'==== 2ème solution : Chargement plus rapide mais les filtres ne fonctionne
pas
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
Re Daniel !
Tu ouvre l'userForm "Historique", Selection dans un combo et clic sur
Filtrer.
'==== 1ère solution : Chargement long mais les filtres fonctionne
With Me.LstResultat
.Clear
For Each c In plage1
.AddItem c.Value
.List(.ListCount - 1, 1) = c.Offset(, 1)
.List(.ListCount - 1, 2) = c.Offset(, 2)
.List(.ListCount - 1, 3) = c.Offset(, 3)
.List(.ListCount - 1, 4) = c.Offset(, 4)
.List(.ListCount - 1, 5) = c.Offset(, 5)
.List(.ListCount - 1, 6) = c.Offset(, 6)
.List(.ListCount - 1, 7) = c.Offset(, 7)
.List(.ListCount - 1, 8) = c.Offset(, 8)
.List(.ListCount - 1, 9) = c.Offset(, 9)
Next
End With
'==== 2ème solution : Chargement plus rapide mais les filtres ne fonctionne
pas
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With