Filtre et plage de cellules

Fermé
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022 - 20 oct. 2015 à 08:17
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022 - 24 oct. 2015 à 10:17
Bonjour à tous,

S.O.S j'ai écrit ce code dans une boucle de 12 feuilles qui ne fonctionne pas comme j'aurais voulu, je demande de mettre les filtres sur ma ligne 17, avec le code suivant :

Range("A17:A17").Select
With Selection
.AutoFilter
End With

Sauf que , comme je lui demande d'appuyer sur le bouton (enfin j'imagine) une fois il met le filtre et une fois il l'enlève.
Et je ne vois pas comment lui demandait de le mettre et basta ???


J'ai trouvé ce code , mais c'est toujours le même problème.

If Not Worksheets(I).AutoFilterMode Then Worksheets(I).[A17].AutoFilter


Et ma 2eme question est la suivante :

si dans le code .Cells(Cel.Row, 3).Interior.ColorIndex = 4 , je veux déclarer une plage de cellules (ex A à C), on l'écrit comment ?


Merci pour votre aide.

A+

Pascal



A voir également:

15 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
20 oct. 2015 à 10:24
Bonjour Pascal

Pas bien compris ta première question. La fonction AutoFilter nécessite des arguments (Field et Criteria1 au moins) sinon elle supprime le filtre automatique...

Pour ta deuxième question, essaie :
.Range(.Cells(Cel.Row, 1), .Cells(Cel.Row, 3)).Interior.ColorIndex = 4 

ou
.Cells(Cel.Row,1).Resize(1, 3).Interior.ColorIndex = 4 


0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
20 oct. 2015 à 14:22
Bonjour ThauTheme,

Merci pour ton aide je vais essayer ton code.

Pour ma 1ere question, je cherche à mettre le filtre sur toutes mes feuilles en passant par le vba.
Mais je ne sais pas comment l'écrire dans ma boucle.

A+

Pascal
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
20 oct. 2015 à 14:50
Re,

Peut-être comme ça (Field et Criteria1 à compléter)

Dim O As Worksheet 'déclare la variable O (onglets)

For Each O In Sheets 'boucle sur tous les onglets O du classeur
    'si l'onglet O n'est pas filtré, utilise le filtre automatique en A17
    If O.FilterMode = False Then O.Range("A17").AutoFilter Field:=..., Criteria1:=...
Next O 'prochain onglet de la boucle

0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
20 oct. 2015 à 15:51
ha oui je crois comprendre pourquoi ma question n'est pas explicite.

Je cherche à mettre le filtre mais uniquement le menu déroulant (les petits carrés) pour pouvoir l'utiliser à la demande.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
20 oct. 2015 à 16:09
Re,

Dans ce cas...

Dim O As Worksheet 'déclare la variable O (onglets)

For Each O In Sheets 'boucle sur tous les onglets O du classeur
    'si l'onglet O n'est pas filtré, utilise le filtre automatique en A17
    If O.FilterMode = False Then O.Range("A17").AutoFilter
Next O 'prochain onglet de la boucle


Devrait fonctionner.
0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
20 oct. 2015 à 21:51
Bon pour la plage pas de problème ça marche, je t'en remercie.
Si je peux abuser comment je peux mettre les cellules en fond neutre, car je n'ai pas toujours la même sélection donc je dois enlever les cellules vertes avant de faire à nouveau le passage de la sélection.

J'ai écrit ce code mais ca ne fonctionne pas.

' Met les celulle en vert dans la colonne C si dans Colonne AK = "Notre Sélection" ThemeColor = xlThemeColorDark1
Dim Cel As Range
'Nom de feuille à adapter ' ActiveWorkbook.Worksheets("Feuil1")'
With Worksheets(I)
'Balayage de la colonne AK, jusqu'à la dernière cellule renseignée
For Each Cel In .Range("AK18:AK" & .Range("AK" & Rows.Count).End(xlUp).Row)
'Si la cellule contient "Notre Sélection"
If Cel.Value = "Notre Sélection" Then
'alors, remplir la cellule correspondante en colonne A/D en vert
.Cells(Cel.Row, 1).Resize(1, 4).Interior.ColorIndex = 4
' mais si il n'y a pas Notre Selection alors on met un fond neutre
.Cells(Cel.Row, 1).Resize(1, 4).Interior.ColorIndex = 4
Else
If Cel.Value = " " Then
.Cells(Cel.Row, 3).Interior.ColorIndex = xlNone
End If
Next Cel
End With



Mais pour le code du filtre je n'ai pas tout compris la déclaration de l'onglet 0.

Bonne Soirée.

Pascal
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
21 oct. 2015 à 16:54
Re,

Ton code corrigé :
Dim PL As Range
Dim PLV As Range

' Met les celulle en vert dans la colonne C si dans Colonne AK = "Notre Sélection" ThemeColor = xlThemeColorDark1
Dim Cel As Range
'Nom de feuille à adapter ' ActiveWorkbook.Worksheets("Feuil1")'
With Worksheets(I)
    'Balayage de la colonne AK, jusqu'à la dernière cellule renseignée
    For Each Cel In .Range("AK18:AK" & .Range("AK" & Rows.Count).End(xlUp).Row)
        'Si la cellule contient "Notre Sélection"
        If Cel.Value = "Notre Sélection" Then
            'alors, remplir la cellule correspondante en colonne A/D en vert
            .Cells(Cel.Row, 1).Resize(1, 4).Interior.ColorIndex = 4
        Else
            ' mais si il n'y a pas Notre Selection alors on met un fond neutre
            .Cells(Cel.Row, 3).Resize(1, 4).Interior.ColorIndex = xlNone
        End If
    Next Cel
End With


une autre méthode (non testée) :
Dim PL As Range
Dim PLV As Range

'Nom de feuille à adapter ' ActiveWorkbook.Worksheets("Feuil1")'
With Worksheets(I)
    Set PL = .Range("A18:D" & .Cells(Application.Rows.Count, 1).End(xlUp).Row)
    PL.Interior.ColorIndex = xlNone
    .Range("A17").AutoFilter Field:=37, Criteria1:="Notre Sélection"
    Set PLV = PL.SpecialCells(xlCellTypeVisible)
    PLV.Interior.ColorIndex = 4
    .Range("A17").AutoFilter
End With


J'ai déclaré l'onglet O pour boucler avec une variable mais rien ne t'empêche de la déclarer Sh et de boucler For Each Sh in Sheets...
0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
22 oct. 2015 à 18:10
Bonjour ThauTheme,

Désolé de le retour tardif, merci pour tes réponses, je vais mettre en pratique tes codes et je te reviens vers toi.

Encore mille mercis.

Bonne journée

Pascal
0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
22 oct. 2015 à 19:17
Bon je n'ai pas reussi à inserer le code autofilter dans la boucle.

Je mets la boucle avec laquelle je travaille :

Sub Rognerunrectangleavecuncoindiagonal3_Cliquer()

' Variables globales
Dim nbWS As Integer
Dim totalRows As Integer
Dim totalCols As Integer
Dim CheminFichier As String
Dim NomFichier As String


nbWS = ActiveWorkbook.Worksheets.Count

' Chez Pascal
CheminFichier = "W:\PALMACEA Commun\Tarifs et Dispo clients PALMACEA\Tarifs PALMACEA\Tarifs départ clients PALMACEA\ESPAGNE\"


For I = 1 To 1 ' nbWS - 1

NomFichier = ActiveWorkbook.Worksheets(I).Name

j'ai mis :

Dim O As Worksheets(I) 'déclare la variable O (onglets)

For Each O In Sheets 'boucle sur tous les onglets O du classeur
'si l'onglet O n'est pas filtré, utilise le filtre automatique en A17
If O.FilterMode = False Then O.Range("A17").AutoFilter
Next O 'prochain onglet de la boucle

Je n'ai pas tout compris le code ?

Merci pour ton aide.

Bonne soirée

Pascal
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
22 oct. 2015 à 23:33
Re,

Difficile de comprendre un bout de code, je préfère avoir l'intégralité pour mieux le cerner...

Si tu mélanges les deux boucles ça va pas marcher. Essaie comme ça :

Sub Rognerunrectangleavecuncoindiagonal3_Cliquer()

' Variables globales
Dim nbWS As Integer
Dim totalRows As Integer
Dim totalCols As Integer
Dim CheminFichier As String
Dim NomFichier As String

nbWS = ActiveWorkbook.Worksheets.Count
' Chez Pascal
CheminFichier = "W:\PALMACEA Commun\Tarifs et Dispo clients PALMACEA\Tarifs PALMACEA\Tarifs départ clients PALMACEA\ESPAGNE\"
For I = 1 To nbWS - 1
    NomFichier = ActiveWorkbook.Worksheets(I).Name
    'si l'onglet O n'est pas filtré, utilise le filtre automatique en A17
    If Sheets(I).FilterMode = False Then Sheets(I).Range("A17").AutoFilter
Next I 'prochain onglet de la boucle
End Sub

0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
23 oct. 2015 à 09:25
Bonjour THAUTHEME

Bon la je sèche, impossible de le mettre dans la boucle, voila le dernier code que j'ai écrit, après x essais :

' Dim O As Worksheet 'déclare la variable O (onglets)
With Worksheets(I)
For Each Sheets(I) In Worksheets(I) 'boucle sur tous les onglets O du classeur
'si l'onglet O n'est pas filtré, utilise le filtre automatique en A17
If Sheets(I).FilterMode = False Then Sheets(I).Range("A17").AutoFilter
End If
Next I 'prochain onglet de la boucl
end with

Merci pour ta patience.

Bonne journée

Pascal
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 oct. 2015 à 16:41
Re,

Pourquoi tu compliques ?!...
Soit tu utilises la liste des onglets du classeur avec une variable de type objet Worksheet que tu nomes à ta convenance (j'utilise O par exemple) et tu boucles For Each O in Sheets, soit tu utilises le nombre des onglets du classeur avec une variable de type Integer que tu nommes a ta convenance (I par exemple) et tu boucles For I = 1 to Sheets.Count. Toi, tu mélanges les deux ce n'est pas possible. Voici les deux possibilités qui fonctionnent :

Dim O as Worksheet
For Each O in Sheets
     If O.FilterMode = False Then O.Range("A17").AutoFilter
Next O


Dim I as Integer
For I = 1 To Sheets.Count
     If Sheets(I).FilterMode = False Then Sheets(I).Range("A17").AutoFilter
Next I


0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
23 oct. 2015 à 19:48
je n'arrive pas à comprendre les codes.

j'ai essayé les 2 celui la plante au niveau de O.Range("A17").AutoFilter

Dim O As Worksheet
For Each O In Sheets
If O.FilterMode = False Then O.Range("A17").AutoFilter
Next O

et le 2eme il ne passe pas du tout.

Désolé je suis plus que novice.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 oct. 2015 à 09:42
Bonjour,

On va pas y passer 20 ans ! Place ton fichier chez un hébergeur quelconque, explique ce que tu désires précisément et on trouvera peut-être une solution à ton problème...
0
pascalou83400 Messages postés 273 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 24 janvier 2022
24 oct. 2015 à 10:17
Bonjour ThauTheme,

Je te remercie pour ton aide, je sais je ne suis pas très doué en vba.
J'avance à petit pas, et tu fais parti des gens qui m'ont fait avancer avec une grande patience.

Pour ma part si tu as besoin de conseil en jardinage, la c'est mon domaine et ça sera avec grand plaisir.

Encore merci.

Bonne Week end.

Pascal
0