Autres Filtre sur colonnes multiples

  • Initiateur de la discussion Initiateur de la discussion Michel1942
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Michel1942

XLDnaute Nouveau
Bonjour à tous,



J’ai le problème suivant en VBA sous excel 2003.


Je voudrais filtre sur place un tableau sur deux colonnes non contigües si les cellules sont vides dans les deux colonnes simultanément.
Les colonnes ne sont pas fixes et doivent être sélectionnées avant de lancer la macro.
Le bouton de lancement existe déjà dans ma barre d’outils.
Je joint un exemple de fichier où filtrer les colonnes B et E mais pas forcément.

Je sais faire le filtre sur une colonne.

Merci d’avance pour vos propositions.
 

Pièces jointes

Bonjour Michel,

fais Ctrl f ➯ travail effectué ! 😊

je te laisse vérifier que les lignes masquées
sont bien les lignes adéquates. 😉



code VBA (20 lignes) :

VB:
Option Explicit

Sub FiltrerBE()
  If ActiveSheet.Name <> "Feuil1" Then Exit Sub
  Dim dlg&: dlg = Cells(Rows.Count, 1).End(3).Row: If dlg < 3 Then Exit Sub
  Dim plg As Range, lig&
  For lig = 3 To dlg
    If IsEmpty(Cells(lig, 2)) And IsEmpty(Cells(lig, 5)) Then
      If plg Is Nothing Then
        Set plg = Rows(lig)
      Else
        Set plg = Union(plg, Rows(lig))
      End If
    End If
  Next lig
  If plg Is Nothing Then Exit Sub
  Application.ScreenUpdating = 0
  plg.EntireRow.Hidden = -1
End Sub

soan
 

Pièces jointes

Bonjour Michel,

fais Ctrl f ➯ travail effectué ! 😊

je te laisse vérifier que les lignes masquées
sont bien les lignes adéquates. 😉



code VBA (20 lignes) :

VB:
Option Explicit

Sub FiltrerBE()
  If ActiveSheet.Name <> "Feuil1" Then Exit Sub
  Dim dlg&: dlg = Cells(Rows.Count, 1).End(3).Row: If dlg < 3 Then Exit Sub
  Dim plg As Range, lig&
  For lig = 3 To dlg
    If IsEmpty(Cells(lig, 2)) And IsEmpty(Cells(lig, 5)) Then
      If plg Is Nothing Then
        Set plg = Rows(lig)
      Else
        Set plg = Union(plg, Rows(lig))
      End If
    End If
  Next lig
  If plg Is Nothing Then Exit Sub
  Application.ScreenUpdating = 0
  plg.EntireRow.Hidden = -1
End Sub

soan
 
Merci Soan pour cette réponse rapide mais les colonnes ne sont pas prédéfinies. Dans mon exemple c'est B et E mais çà peut être n'importe quelle "doublette. Je sais sélectionner la colonne active mais pas deux ensembles. Ton code fonctionne bien sur des colonnes fixes
Merci pour ta réponse
 
Merci Soan pour cette réponse rapide mais les colonnes ne sont pas prédéfinies. Dans mon exemple c'est B et E mais çà peut être n'importe quelle "doublette. Je sais sélectionner la colonne active mais pas deux ensembles. Ton code fonctionne bien sur des colonnes fixes
Merci pour ta réponse
Je vais essayer de passer par des inputbox pour définir ColonneActive1 et ColonneActive2. Cà va être un peu dommage mais je vais me lancer.
Merci
 
Ben oui... Après tout, pourquoi faire simple quand on peu faire beaucoup plus compliqué ??? 😁
Pis ça répond pô à ma question... 🙁

Connais-tu notre ami Lionel ? 🤔
(son pseudo est @Usine à gaz )
Ma question était : comment récupérer 2 colonnes sélectionnées simultanément en VBA. Cà rentre dans plus grand que mon exemple. Le reste je me débrouille pour faire.
 
Bonsoir Michel, Marcel,

fais Ctrl f ; ça ne fait rien du tout ! 🙁 c'est normal, car ta cellule active est en colonne A, et la 1ère colonne choisie ne peut pas être la colonne A ; pour choisir la 1ère colonne, sélectionne n'importe quelle autre cellule d'une autre colonne ; par exemple, va en B2 ➯ la 1ère colonne est la colonne B.

il ne peut pas y avoir 2 cellules actives en même temps ; cette version suppose que la 2ème colonne est toujours 3 colonnes à droite de la 1ère colonne choisie ; donc : 2ème colonne = colonne B + 3 = colonne E.

après avoir été en B2, fais Ctrl f ➯ même résultat que celui de mon fichier précédent ; seulement cette fois, tu peux choisir comme 1ère colonne une autre colonne que B, par exemple la colonne D ; la 2ème colonne sera alors, automatiquement, la colonne G. (car 3 colonnes à droite de la colonne D)


cette version marche que si ta 2ème colonne est toujours 3 colonnes à droite de la 1ère ; est-ce que c'est le cas en pratique ? regarde déjà ça, et donne-moi ton avis.

je vais proposer une autre version, où tu pourras choisir aussi la 2ème colonne, sans utiliser de inputbox.
(mais ça va prendre du temps)



code VBA (22 lignes) :

VB:
Option Explicit

Sub FiltrerBE()
  If ActiveSheet.Name <> "Feuil1" Then Exit Sub
  Dim dlg&: dlg = Cells(Rows.Count, 1).End(3).Row: If dlg < 3 Then Exit Sub
  Dim plg As Range, col1%, col2%, lig&
  col1 = ActiveCell.Column: If col1 = 1 Then Exit Sub
  col2 = col1 + 3
  For lig = 3 To dlg
    If IsEmpty(Cells(lig, col1)) And IsEmpty(Cells(lig, col2)) Then
      If plg Is Nothing Then
        Set plg = Rows(lig)
      Else
        Set plg = Union(plg, Rows(lig))
      End If
    End If
  Next lig
  If plg Is Nothing Then Exit Sub
  Application.ScreenUpdating = 0
  plg.EntireRow.Hidden = -1
End Sub

soan
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
666
Retour