Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Procedure avec combobox

12 réponses
Avatar
jean-luc Guitard
Bonjour,
Je ne comprends pas pourquoi il met une erreur à la ligne Sélection.AutoFilter
si je ne mets pas On Error Resume Next
cette procédure Private Sub Mois_Change() est dans une feuille
Mois est le nom d'une Combobox (Liste déroulante) placée sur la feuille
j'ai du oublier quelque chose!
Merci d'avance

Private Sub Mois_Change()
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
If i = 1 Then
Range("A2:J" & DerLigne).Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7, Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
End If
end sub

10 réponses

1 2
Avatar
DanielCo
Bonjour,
Je n'ai pas pu reproduire l'erreur.
Peux-tu mettre ton classeur (sans données confidentielles) sur
www.cjoint.com et poster ici le lien généré ?
Daniel


Bonjour,
Je ne comprends pas pourquoi il met une erreur à la ligne
Sélection.AutoFilter
si je ne mets pas On Error Resume Next
cette procédure Private Sub Mois_Change() est dans une feuille
Mois est le nom d'une Combobox (Liste déroulante) placée sur la feuille
j'ai du oublier quelque chose!
Merci d'avance

Private Sub Mois_Change()
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
If i = 1 Then
Range("A2:J" & DerLigne).Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
End If
end sub
Avatar
jean-luc Guitard
Bonjour Daniel
j'espère que c'est parti
la macro qui bloque est dans Sheet2(Sc analysis)
http://cjoint.com/?0ccokYarIEP
merci

"DanielCo" a écrit dans le message de groupe de discussion : iibjli$jsd$

Bonjour,
Je n'ai pas pu reproduire l'erreur.
Peux-tu mettre ton classeur (sans données confidentielles) sur
www.cjoint.com et poster ici le lien généré ?
Daniel


Bonjour,
Je ne comprends pas pourquoi il met une erreur à la ligne Sélection.AutoFilter
si je ne mets pas On Error Resume Next
cette procédure Private Sub Mois_Change() est dans une feuille
Mois est le nom d'une Combobox (Liste déroulante) placée sur la feuille
j'ai du oublier quelque chose!
Merci d'avance

Private Sub Mois_Change()
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
If i = 1 Then
Range("A2:J" & DerLigne).Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7, Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
End If
end sub
Avatar
DanielCo
Le problème vient du fait que la plage MaListe se trouve en partie
masquée lorsqu'on agit sur le filtre; ce faisant, elle provoque un
nouveau déclenchement de la macro Mois_Change. En la déplaçant sur
l'autre feuille, par exemple, on supprime l'anomalie.
Tu peux en outre optimiser ton code :

Private Sub Mois_Change()
Application.ScreenUpdating = False
ActiveSheet.Unprotect
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
Range("A2:J" & DerLigne).AutoFilter
End If
If i = 1 Then
Range("A2:J" & DerLigne).AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
ElseIf i = 2 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=3", _
Operator:=xlAnd, Criteria2:="<=6"
ActiveWindow.ScrollRow = 3
ElseIf i = 3 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=6", _
Operator:=xlAnd, Criteria2:="<=9"
ActiveWindow.ScrollRow = 3
ElseIf i = 4 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=9", _
Operator:=xlAnd, Criteria2:="<"
ActiveWindow.ScrollRow = 3
ElseIf i = 5 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
Operator:=xlAnd, Criteria2:="<"
ActiveWindow.ScrollRow = 3
ElseIf i = 6 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
Operator:=xlAnd, Criteria2:="<"
ActiveWindow.ScrollRow = 3
ElseIf i = 7 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
Operator:=xlAnd, Criteria2:="<!"
ActiveWindow.ScrollRow = 3
ElseIf i = 8 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">!", _
Operator:=xlAnd, Criteria2:="<$"
ActiveWindow.ScrollRow = 3
ElseIf i = 9 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">$", _
Operator:=xlAnd, Criteria2:="<'"
ActiveWindow.ScrollRow = 3
ElseIf i = 10 Then
Range("A2:j2").AutoFilter
ActiveWindow.ScrollRow = 3
End If
'Range("M2").Select
'ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12])"
Range("A1").Select
ActiveSheet.Protect
End Sub

Daniel


Bonjour Daniel
j'espère que c'est parti
la macro qui bloque est dans Sheet2(Sc analysis)
http://cjoint.com/?0ccokYarIEP
merci

"DanielCo" a écrit dans le message de groupe de discussion :
iibjli$jsd$

Bonjour,
Je n'ai pas pu reproduire l'erreur.
Peux-tu mettre ton classeur (sans données confidentielles) sur
www.cjoint.com et poster ici le lien généré ?
Daniel


Bonjour,
Je ne comprends pas pourquoi il met une erreur à la ligne
Sélection.AutoFilter
si je ne mets pas On Error Resume Next
cette procédure Private Sub Mois_Change() est dans une feuille
Mois est le nom d'une Combobox (Liste déroulante) placée sur la feuille
j'ai du oublier quelque chose!
Merci d'avance

Private Sub Mois_Change()
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
If i = 1 Then
Range("A2:J" & DerLigne).Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
End If
end sub
Avatar
jean-luc Guitard
Merci mille fois, je n'avais pas vu le Problème
Effectivement ta macro est plus simple et mieux structurée que la mienne
j'ai juste placé " ActiveWindow.ScrollRow = 3 " à la fin du programme ce qui évite
les répétitions
bonne journée


"DanielCo" a écrit dans le message de groupe de discussion : iiboo0$9v$

Le problème vient du fait que la plage MaListe se trouve en partie
masquée lorsqu'on agit sur le filtre; ce faisant, elle provoque un
nouveau déclenchement de la macro Mois_Change. En la déplaçant sur
l'autre feuille, par exemple, on supprime l'anomalie.
Tu peux en outre optimiser ton code :

Private Sub Mois_Change()
Application.ScreenUpdating = False
ActiveSheet.Unprotect
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
Range("A2:J" & DerLigne).AutoFilter
End If
If i = 1 Then
Range("A2:J" & DerLigne).AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
ElseIf i = 2 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=3", _
Operator:=xlAnd, Criteria2:="<=6"
ActiveWindow.ScrollRow = 3
ElseIf i = 3 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=6", _
Operator:=xlAnd, Criteria2:="<=9"
ActiveWindow.ScrollRow = 3
ElseIf i = 4 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=9", _
Operator:=xlAnd, Criteria2:="<"
ActiveWindow.ScrollRow = 3
ElseIf i = 5 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
Operator:=xlAnd, Criteria2:="<"
ActiveWindow.ScrollRow = 3
ElseIf i = 6 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
Operator:=xlAnd, Criteria2:="<"
ActiveWindow.ScrollRow = 3
ElseIf i = 7 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
Operator:=xlAnd, Criteria2:="<!"
ActiveWindow.ScrollRow = 3
ElseIf i = 8 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">!", _
Operator:=xlAnd, Criteria2:="<$"
ActiveWindow.ScrollRow = 3
ElseIf i = 9 Then
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">$", _
Operator:=xlAnd, Criteria2:="<'"
ActiveWindow.ScrollRow = 3
ElseIf i = 10 Then
Range("A2:j2").AutoFilter
ActiveWindow.ScrollRow = 3
End If
'Range("M2").Select
'ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12])"
Range("A1").Select
ActiveSheet.Protect
End Sub

Daniel


Bonjour Daniel
j'espère que c'est parti
la macro qui bloque est dans Sheet2(Sc analysis)
http://cjoint.com/?0ccokYarIEP
merci

"DanielCo" a écrit dans le message de groupe de discussion : iibjli$jsd$

Bonjour,
Je n'ai pas pu reproduire l'erreur.
Peux-tu mettre ton classeur (sans données confidentielles) sur
www.cjoint.com et poster ici le lien généré ?
Daniel


Bonjour,
Je ne comprends pas pourquoi il met une erreur à la ligne Sélection.AutoFilter
si je ne mets pas On Error Resume Next
cette procédure Private Sub Mois_Change() est dans une feuille
Mois est le nom d'une Combobox (Liste déroulante) placée sur la feuille
j'ai du oublier quelque chose!
Merci d'avance

Private Sub Mois_Change()
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
If i = 1 Then
Range("A2:J" & DerLigne).Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7, Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
End If
end sub
Avatar
michdenis
Bonjour,

Pour la section du filtre, ceci devrait être suffisant :

Dim Crit1 As Integer, Crit2 As Integer
With ActiveSheet
.Unprotect
i = Mois.ListIndex + 1
If i = 0 Then Exit Sub
Crit1 = (i - 1) * 3
Crit2 = i * 3
.Range("$A$2:$J$572").AutoFilter Field:=7, Criteria1:=">=" & _
Crit1, Operator:=xlAnd, Criteria2:="<=" & Crit2
End With
ActiveWindow.ScrollRow = 3


Quand je vois ceci : "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12])"
Ça me donne une poussée d'urticaire ;-))
n'y aurait-il pas moyen d'exprimer cela par une vraie plage
de cellules en utilisant un langage compréhensible par tous
RANGE()


MichD
--------------------------------------------
"jean-luc Guitard" a écrit dans le message de groupe de discussion : 4d49284a$0$32471$

Bonjour,
Je ne comprends pas pourquoi il met une erreur à la ligne Sélection.AutoFilter
si je ne mets pas On Error Resume Next
cette procédure Private Sub Mois_Change() est dans une feuille
Mois est le nom d'une Combobox (Liste déroulante) placée sur la feuille
j'ai du oublier quelque chose!
Merci d'avance

Private Sub Mois_Change()
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
If i = 1 Then
Range("A2:J" & DerLigne).Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7, Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
End If
end sub
Avatar
Mgr T. Plubanni
choueeeeeeeeeeette...
si on a un problème de boutons, on saura à qui s'adresser alors...
T. P.

"michdenis" a écrit dans le message de news: iibson$9un$
Quand je vois ceci : "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12])"
Ça me donne une poussée d'urticaire ;-))
Avatar
michdenis
Surtout toi, tu en as plein des boutons dans tes barres d'outils !
;-)



MichD
--------------------------------------------
"Mgr T. Plubanni" a écrit dans le message de groupe de discussion : 4d497cad$0$5419$

choueeeeeeeeeeette...
si on a un problème de boutons, on saura à qui s'adresser alors...
T. P.

"michdenis" a écrit dans le message de news: iibson$9un$
Quand je vois ceci : "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12])"
Ça me donne une poussée d'urticaire ;-))
Avatar
jean-luc Guitard
Bonjour michDenis,
cette macro marche du feux de dieu
juste un petit problème j'ai rajouté 3 lignes si i il faut tout afficher (donc supprimer le filtre)
ca fonctionne mais ce n'est pas bien rédigé
excuse moi pour la poussée d'urticaire , je vais essayer de m'améliorer y a du travail !
merci


DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
With ActiveSheet
i = Mois.ListIndex + 1
If i = 0 Then Exit Sub
Crit1 = (i - 1) * 3
Crit2 = i * 3
.Range("$A$2:$J$" & DerLigne).AutoFilter Field:=7, Criteria1:=">=" & _
Crit1, Operator:=xlAnd, Criteria2:="<=" & Crit2
End With
If i = 10 Then
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
End If

"michdenis" a écrit dans le message de groupe de discussion : iibson$9un$

Bonjour,

Pour la section du filtre, ceci devrait être suffisant :

Dim Crit1 As Integer, Crit2 As Integer
With ActiveSheet
.Unprotect
i = Mois.ListIndex + 1
If i = 0 Then Exit Sub
Crit1 = (i - 1) * 3
Crit2 = i * 3
.Range("$A$2:$J$572").AutoFilter Field:=7, Criteria1:=">=" & _
Crit1, Operator:=xlAnd, Criteria2:="<=" & Crit2
End With
ActiveWindow.ScrollRow = 3


Quand je vois ceci : "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12])"
Ça me donne une poussée d'urticaire ;-))
n'y aurait-il pas moyen d'exprimer cela par une vraie plage
de cellules en utilisant un langage compréhensible par tous
RANGE()


MichD
--------------------------------------------
"jean-luc Guitard" a écrit dans le message de groupe de discussion : 4d49284a$0$32471$

Bonjour,
Je ne comprends pas pourquoi il met une erreur à la ligne Sélection.AutoFilter
si je ne mets pas On Error Resume Next
cette procédure Private Sub Mois_Change() est dans une feuille
Mois est le nom d'une Combobox (Liste déroulante) placée sur la feuille
j'ai du oublier quelque chose!
Merci d'avance

Private Sub Mois_Change()
'On Error Resume Next
i = Mois.ListIndex + 1
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
If i = 1 Then
Range("A2:J" & DerLigne).Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7, Criteria1:=">=0", _
Operator:=xlAnd, Criteria2:="<=3"
ActiveWindow.ScrollRow = 3
End If
end sub
Avatar
michdenis
A ) Tu dois ajouter "On Error Resume Next"
au cas où il n'y a aucun enregistrement de masqué,
ShowAllData va générer une erreur.

B ) Tu peux continuer si tu désires : "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12])"
mais je trouve cela imbuvable et très difficile à lire !
L'enregistreur macro souvent génère de telles chaînes de caractère
faute d'avoir le choix.

'-----------------------------------------
Dim DerLigne As Long
On Error Resume Next
DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
With ActiveSheet
i = Mois.ListIndex + 1
If i = 0 Then Exit Sub
If i = 10 then
.FilterMode Then .ShowAllData
Exit sub
End If
Crit1 = (i - 1) * 3
Crit2 = i * 3
.Range("$A$2:$J$" & DerLigne).AutoFilter Field:=7, Criteria1:=">=" & _
Crit1, Operator:=xlAnd, Criteria2:="<=" & Crit2
End With
ActiveWindow.ScrollRow = 3
'-----------------------------------------

MichD
--------------------------------------------
Avatar
Frederic LE GUEN
On Feb 2, 3:59 pm, "jean-luc Guitard" wrote:
Merci mille fois, je n'avais pas vu le Problème
Effectivement ta macro est plus simple et mieux structurée que la mienn e
j'ai juste placé " ActiveWindow.ScrollRow = 3 " à la fin du program me ce qui évite
les répétitions
bonne journée

"DanielCo"  a écrit dans le message de groupe de discussion : iiboo0$

Le problème vient du fait que la plage MaListe se trouve en partie
masquée lorsqu'on agit sur le filtre; ce faisant, elle provoque un
nouveau déclenchement de la macro Mois_Change. En la déplaçant sur
l'autre feuille, par exemple, on supprime l'anomalie.
Tu peux en outre optimiser ton code :

Private Sub Mois_Change()
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect
    'On Error Resume Next
    i = Mois.ListIndex + 1
    DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
    Range("A2:J" & DerLigne).AutoFilter
    End If
    If i = 1 Then
        Range("A2:J" & DerLigne).AutoFilter
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=0", _
        Operator:=xlAnd, Criteria2:="<=3"
        ActiveWindow.ScrollRow = 3
    ElseIf i = 2 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=3", _
        Operator:=xlAnd, Criteria2:="<=6"
        ActiveWindow.ScrollRow = 3
    ElseIf i = 3 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=6", _
        Operator:=xlAnd, Criteria2:="<=9"
         ActiveWindow.ScrollRow = 3
    ElseIf i = 4 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">=9", _
        Operator:=xlAnd, Criteria2:="<"
         ActiveWindow.ScrollRow = 3
    ElseIf i = 5 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
        Operator:=xlAnd, Criteria2:="<"
         ActiveWindow.ScrollRow = 3
    ElseIf i = 6 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
        Operator:=xlAnd, Criteria2:="<"
         ActiveWindow.ScrollRow = 3
   ElseIf i = 7 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">", _
        Operator:=xlAnd, Criteria2:="<!"
         ActiveWindow.ScrollRow = 3
   ElseIf i = 8 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">!", _
        Operator:=xlAnd, Criteria2:="<$"
         ActiveWindow.ScrollRow = 3
   ElseIf i = 9 Then
        ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7,
Criteria1:=">$", _
        Operator:=xlAnd, Criteria2:="<'"
         ActiveWindow.ScrollRow = 3
   ElseIf i = 10 Then
        Range("A2:j2").AutoFilter
     ActiveWindow.ScrollRow = 3
   End If
    'Range("M2").Select
    'ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,R[1]C[-12]:R[998]C[-12 ])"
    Range("A1").Select
    ActiveSheet.Protect
End Sub

Daniel

> Bonjour Daniel
> j'espère que c'est parti
> la macro qui bloque est dans Sheet2(Sc analysis)
>http://cjoint.com/?0ccokYarIEP
> merci

> "DanielCo"  a écrit dans le message de groupe de discussion : iibjl i$

> Bonjour,
> Je n'ai pas pu reproduire l'erreur.
> Peux-tu mettre ton classeur (sans données confidentielles) sur
>www.cjoint.comet poster ici le lien généré ?
> Daniel

>> Bonjour,
>> Je ne comprends pas pourquoi  il met une erreur à la ligne  Sé lection.AutoFilter
>> si je ne mets pas On Error Resume Next
>> cette procédure Private Sub Mois_Change()  est dans une feuille
>> Mois est le nom d'une Combobox (Liste déroulante) placée sur la fe uille
>> j'ai du oublier quelque chose!
>> Merci d'avance

>> Private Sub Mois_Change()
>>        'On Error Resume Next
>>        i = Mois.ListIndex + 1
>>        DerLigne = Sheets(2).Range("B65536").End(xlUp).Row
>>         If i = 1 Then
>>         Range("A2:J" & DerLigne).Select
>>         Selection.AutoFilter
>>         ActiveSheet.Range("$A$2:$J$572").AutoFilter Field:=7 , Criteria1:=">=0", _
>>         Operator:=xlAnd, Criteria2:="<=3"
>>         ActiveWindow.ScrollRow = 3
>>     End If
>> end sub



Errk ! :-O
Pkoi tant de If / Else / End If ? Tu ne pouvais pas faire un Select
Case ?
1 2