Rebonjour,
Je sais qu'on se fait avoir lorsqu'on a besoin de connaître le nombre de
ligne après un filtre automatique en VBA, et en fait, malgré plusieurs
méthodes, je suis pas du tout sûre d'avoir pris la bonne.
J'ai besoin :
- soit d'afficher la feuille filtrée à condition qu'elle ait au moins une
ligne qui correspond au filtre
- soit de supprimer les lignes filtrées sans afficher la feuille
Voilà mon code qui me sert à compter :
With feuille
.Unprotect
.Range("A4").AutoFilter Field:=3, Criteria1:=critere, Operator:=xlOr,
Criteria2:=critere2, visibleDropDown:úlse
End With
'compte le nb filtrés
Set rg = feuille.Range("D3:D" & Range("D" & Rows.Count).End(xlUp).Row)
nombre =
feuille.AutoFilter.Range.Columns(3).SpecialCells(xlCellTypeVisible).Cells.Count-1
sachant que mes entêtes de colonne sont en ligne 3.
Merci.
Circé
http://faqword.com
Rebonjour,
Je sais qu'on se fait avoir lorsqu'on a besoin de connaître le nombre de
ligne après un filtre automatique en VBA, et en fait, malgré plusieurs
méthodes, je suis pas du tout sûre d'avoir pris la bonne.
J'ai besoin :
- soit d'afficher la feuille filtrée à condition qu'elle ait au moins une
ligne qui correspond au filtre
- soit de supprimer les lignes filtrées sans afficher la feuille
Voilà mon code qui me sert à compter :
With feuille
.Unprotect
.Range("A4").AutoFilter Field:=3, Criteria1:=critere, Operator:=xlOr,
Criteria2:=critere2, visibleDropDown:úlse
End With
'compte le nb filtrés
Set rg = feuille.Range("D3:D" & Range("D" & Rows.Count).End(xlUp).Row)
nombre =
feuille.AutoFilter.Range.Columns(3).SpecialCells(xlCellTypeVisible).Cells.Count-1
sachant que mes entêtes de colonne sont en ligne 3.
Merci.
Circé
http://faqword.com
Rebonjour,
Je sais qu'on se fait avoir lorsqu'on a besoin de connaître le nombre de
ligne après un filtre automatique en VBA, et en fait, malgré plusieurs
méthodes, je suis pas du tout sûre d'avoir pris la bonne.
J'ai besoin :
- soit d'afficher la feuille filtrée à condition qu'elle ait au moins une
ligne qui correspond au filtre
- soit de supprimer les lignes filtrées sans afficher la feuille
Voilà mon code qui me sert à compter :
With feuille
.Unprotect
.Range("A4").AutoFilter Field:=3, Criteria1:=critere, Operator:=xlOr,
Criteria2:=critere2, visibleDropDown:úlse
End With
'compte le nb filtrés
Set rg = feuille.Range("D3:D" & Range("D" & Rows.Count).End(xlUp).Row)
nombre =
feuille.AutoFilter.Range.Columns(3).SpecialCells(xlCellTypeVisible).Cells.Count-1
sachant que mes entêtes de colonne sont en ligne 3.
Merci.
Circé
http://faqword.com
Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Un fichier exemple : http://cjoint.com/?eqpyucH5iR
"Circé" a écrit dans le message de groupe de discussion :
Je me suis un peu emberlificotée les pinceaux avec ce post !
Parce que pour le code de Daniel, il suffit effectivement d'ôter 1 et
c'est bon.
donc la phrase "le problème dans ce cas est que si on ne trouve rien,
le code affiche 1
pas bien compris... "
était pour ton code, MichDenis.
Je viens de réessayer avec tes corrections, mais ce n'est pas mieux...
Pour une ligne trouvée, je trouve -1...
Bon, comme tu dis, le principal est que mon souci soit réglé...
Par contre, j'aime bien ta façon de compter les colonnes et comme c'est
quelque chose que j'utilise beaucoup, je conserve bien au chaud dans
mes nombreuses archives.
Circé
http://faqword.com
michdenis a pensé très fort :Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Un fichier exemple : http://cjoint.com/?eqpyucH5iR
"Circé" <circe@aea.gr> a écrit dans le message de groupe de discussion :
mn.835c7da4a3c9782b.46999@aea.gr...
Je me suis un peu emberlificotée les pinceaux avec ce post !
Parce que pour le code de Daniel, il suffit effectivement d'ôter 1 et
c'est bon.
donc la phrase "le problème dans ce cas est que si on ne trouve rien,
le code affiche 1
pas bien compris... "
était pour ton code, MichDenis.
Je viens de réessayer avec tes corrections, mais ce n'est pas mieux...
Pour une ligne trouvée, je trouve -1...
Bon, comme tu dis, le principal est que mon souci soit réglé...
Par contre, j'aime bien ta façon de compter les colonnes et comme c'est
quelque chose que j'utilise beaucoup, je conserve bien au chaud dans
mes nombreuses archives.
Circé
http://faqword.com
michdenis a pensé très fort :
Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------
Un fichier exemple : http://cjoint.com/?eqpyucH5iR
"Circé" a écrit dans le message de groupe de discussion :
Je me suis un peu emberlificotée les pinceaux avec ce post !
Parce que pour le code de Daniel, il suffit effectivement d'ôter 1 et
c'est bon.
donc la phrase "le problème dans ce cas est que si on ne trouve rien,
le code affiche 1
pas bien compris... "
était pour ton code, MichDenis.
Je viens de réessayer avec tes corrections, mais ce n'est pas mieux...
Pour une ligne trouvée, je trouve -1...
Bon, comme tu dis, le principal est que mon souci soit réglé...
Par contre, j'aime bien ta façon de compter les colonnes et comme c'est
quelque chose que j'utilise beaucoup, je conserve bien au chaud dans
mes nombreuses archives.
Circé
http://faqword.com
michdenis a pensé très fort :Cette fois, j'ai bien pris le temps de tout regarder et finalement mon
code est le seul à donner un résultat correct ! :D
Évidemment, dans mon code, j'ai utilisé A4 au lieu de A3
comme ligne d'en-tête, pas surprenant qu'on arrive pas au
même résultat.
'Ligne de code responsable !
With .Range("A4", .Cells(DerLig, DerCol))
Et j'ai ajouté la référence à la feuille "feuille", selon le module
où tu copies le code dans cette ligne de code :
NbEng = Application.Subtotal(3, feuille.Range(.Columns(Champ).Address)) - 1
L'important, c'est que tu as trouvé ce que tu cherchais.
;-)
Pour les archives, le code :
Sub test()
Dim DerLig As Long, DerCol As Integer, NbEng As Long
Dim Critere As Variant, Critere2 As Variant, Champ As Integer
'************Variables à définir*****************
'No du Field où le filtre s'appliquera
Champ = 1
'La valeur des 2 critères
Critere = 3: Critere2 = 5
'**************************************************
With feuille
.Unprotect
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
With .Range("A3", .Cells(DerLig, DerCol))
.AutoFilter Field:=Champ, Criteria1:=Critere, _
Operator:=xlOr, _
Criteria2:=Critere2, visibleDropDown:úlse
NbEng = Application.Subtotal(3,
feuille.Range(.Columns(Champ).Address)) - 1 End With
End With
MsgBox NbEng & " enregistrements de trouver."
End Sub
'---------------------------------------