Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de groupe de
discussion :
#eqUex53JHA.4960@TK2MSFTNGP04.phx.gbl...
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : uAmnni53JHA.3544@TK2MSFTNGP04.phx.gbl...
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de groupe de
discussion :
#eqUex53JHA.4960@TK2MSFTNGP04.phx.gbl...
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : uAmnni53JHA.3544@TK2MSFTNGP04.phx.gbl...
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12] fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" a écrit dans le message de
groupe de
discussion : #
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" a écrit dans le message de news:Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12] fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : #NqcrH63JHA.1420@TK2MSFTNGP04.phx.gbl...
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
uTzMt453JHA.5276@TK2MSFTNGP04.phx.gbl...
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de groupe de
discussion :
#eqUex53JHA.4960@TK2MSFTNGP04.phx.gbl...
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : uAmnni53JHA.3544@TK2MSFTNGP04.phx.gbl...
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12] fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" a écrit dans le message de
groupe de
discussion : #
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" a écrit dans le message de news:Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12] fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" a écrit dans le message de
groupe de
discussion : #
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" a écrit dans le message de news:Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12] fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : #NqcrH63JHA.1420@TK2MSFTNGP04.phx.gbl...
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
uTzMt453JHA.5276@TK2MSFTNGP04.phx.gbl...
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de groupe de
discussion :
#eqUex53JHA.4960@TK2MSFTNGP04.phx.gbl...
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : uAmnni53JHA.3544@TK2MSFTNGP04.phx.gbl...
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12] fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" a écrit dans le message de
groupe de
discussion : #
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" a écrit dans le message de news:Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ce dont je t'ai fait ajouté permet d'utiliser des références
à des plages de cellules sans faire mentionner à la feuille
car par défaut, ces cellules [C12] et [D12] recherche
l'information sur la feuille active.
Sans utiliser la ligne ".activate", il se peut très bien qu'une
autre feuille soit active au lancement de la macro et là
ce n'est pas une surprise si le code plante !
Cela n'a rien à voir avec le ralentissement général de ton PC.
Peut-être un Virus, Ver, SpyWare ?
"rthompson" a écrit dans le message de
groupe de
discussion :
C'est marrant
Tant que je n'avais pas fermé le fichier cela fonctionnat
Mais maintenant que je l'ai fermé et réouvert
En effet il plante
Donc j'ai ajouter et cela fonctionne à nouveau
Même après fermeture et réouverture
A mon avis Excel garde certain truc en mémoire tant que le fichier reste
ouvert
Enfin
Maintenant j'ai un autre souci
Et je crois que c'est un gros
Mon PC vient de ralentir de façon considérable (pas uniquement en Excel,
mais tous mes programmes)
Même après un reboot
A première vue pas de virus
Je cherche
A bientôt
Rex
"MichDenis" a écrit dans le message de news:En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12]
fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" a écrit dans le message de
groupe de
discussion : #
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" a écrit dans le message de news:Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message
de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ce dont je t'ai fait ajouté permet d'utiliser des références
à des plages de cellules sans faire mentionner à la feuille
car par défaut, ces cellules [C12] et [D12] recherche
l'information sur la feuille active.
Sans utiliser la ligne ".activate", il se peut très bien qu'une
autre feuille soit active au lancement de la macro et là
ce n'est pas une surprise si le code plante !
Cela n'a rien à voir avec le ralentissement général de ton PC.
Peut-être un Virus, Ver, SpyWare ?
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : e9xxkf63JHA.2656@TK2MSFTNGP05.phx.gbl...
C'est marrant
Tant que je n'avais pas fermé le fichier cela fonctionnat
Mais maintenant que je l'ai fermé et réouvert
En effet il plante
Donc j'ai ajouter et cela fonctionne à nouveau
Même après fermeture et réouverture
A mon avis Excel garde certain truc en mémoire tant que le fichier reste
ouvert
Enfin
Maintenant j'ai un autre souci
Et je crois que c'est un gros
Mon PC vient de ralentir de façon considérable (pas uniquement en Excel,
mais tous mes programmes)
Même après un reboot
A première vue pas de virus
Je cherche
A bientôt
Rex
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
eH6FSP63JHA.5816@TK2MSFTNGP02.phx.gbl...
En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12]
fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message de
groupe de
discussion : #NqcrH63JHA.1420@TK2MSFTNGP04.phx.gbl...
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
uTzMt453JHA.5276@TK2MSFTNGP04.phx.gbl...
Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de groupe de
discussion :
#eqUex53JHA.4960@TK2MSFTNGP04.phx.gbl...
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" <roubliemoithompson@softscreen.be> a écrit dans le message
de
groupe de
discussion : uAmnni53JHA.3544@TK2MSFTNGP04.phx.gbl...
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ce dont je t'ai fait ajouté permet d'utiliser des références
à des plages de cellules sans faire mentionner à la feuille
car par défaut, ces cellules [C12] et [D12] recherche
l'information sur la feuille active.
Sans utiliser la ligne ".activate", il se peut très bien qu'une
autre feuille soit active au lancement de la macro et là
ce n'est pas une surprise si le code plante !
Cela n'a rien à voir avec le ralentissement général de ton PC.
Peut-être un Virus, Ver, SpyWare ?
"rthompson" a écrit dans le message de
groupe de
discussion :
C'est marrant
Tant que je n'avais pas fermé le fichier cela fonctionnat
Mais maintenant que je l'ai fermé et réouvert
En effet il plante
Donc j'ai ajouter et cela fonctionne à nouveau
Même après fermeture et réouverture
A mon avis Excel garde certain truc en mémoire tant que le fichier reste
ouvert
Enfin
Maintenant j'ai un autre souci
Et je crois que c'est un gros
Mon PC vient de ralentir de façon considérable (pas uniquement en Excel,
mais tous mes programmes)
Même après un reboot
A première vue pas de virus
Je cherche
A bientôt
Rex
"MichDenis" a écrit dans le message de news:En jetant un oeil rapide à la procédure,
Tu devras ajouter le .ACTVATE afin de t'assurer que [C12] et [D12]
fassent
référence aux cellules de la feuille "Sales" sinon tu risques d'avoir de
drôle de résultat
pour ton filtre.
L'autre alternative est de mettre devant ces 2 cellules le nom de la
feuille comme ceci :
Sheets("Sales").[C12] et Sheets("Sales").[C12]
With Sheets("Sales")
.Activate 'AJOUTER
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
"rthompson" a écrit dans le message de
groupe de
discussion : #
Bonjour MichDenis
Merci pour ce complément d'information
Et merci pour le code
Je ne suis pas fanatique des autofiltre
Mais, ceci étant dis, cela fonctionne impecablement bien
A bientôt
Rex
"MichDenis" a écrit dans le message de news:Dans la procédure, après que tu auras testé, il manque
au moins une ligne de code au début : On error resume next
car la méthode SpecialCells provoque une erreur si aucune
ligne n'était visible après le filtre (pas d'enregistrements trouvés)
"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour RThompson,
Le code est correct.
Cependant, je t'ai fait une version utilisant le filtre automatique
dans la première section. Ce devrait être plus rapide !
Je n'ai rien testé... je n'ai pas cet environnement (fichier)
Tu pourrais avoir à faire quelques ajustements !
'--------------------------------------------
Sub Periode_Visible()
Application.ScreenUpdating = False
With Sheets("Sales")
With .Range("Sales_invoice_date")
.EntireRow.Hidden = False
.AutoFilter Field:=1, Criteria1:="<" & [C12] * 1, _
Operator:=xlOr, Criteria2:=">" & [D12] * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
.AutoFilter
End With
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
'--------------------------------------------
"rthompson" a écrit dans le message
de
groupe de
discussion :
Bonjour à toutes et tous
Pas de soucis (cette fois-ci)
Juste une petite demande de simplification de code
Je suis certain qu'il y a moyen de simplifier le code ci-dessous
La raison étant que je vais reproduire cette macro pour une quarantaine
de
filtres différents
Un grand merci à vous et à bientôt
Rex
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub Periode_Visible()
Application.ScreenUpdating = False
Sheets("Sales").Select
Range("Sales_invoice_date").EntireRow.Hidden = False
For Each c In Range("Sales_invoice_date")
If c < [C12] Or c > [D12] Then c.EntireRow.Hidden = True
Next
With Worksheets("Consultation")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.Clear
With Worksheets("Sales")
With .Range("A20:A" & .Range("A65536").End(xlUp).Row)
.EntireRow.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Consultation").Range("A20")
End With
End With
End With
End With
Sheets("Consultation").Select
Range("D7").Select
Application.ScreenUpdating = True
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx