Filtre et plage de cellules

pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention   -  
pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention   -
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

15 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  2. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  4. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  7. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  8. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  9. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  10. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  11. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  12. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  13. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  14. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  15. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  16. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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