Autres Filtre sur colonnes multiples

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

  • Test2.xls
    42.5 KB · Affichages: 9

Michel1942

XLDnaute Nouveau
@Marcel32, Michel,



si ça peut te consoler 😜, Michel t'a répondu plusieurs fois :

post #6 ; post #7 ; post #10 ; post #12 ; post #14.

mais effectivement, je n'ai pas vu de retour sur le code de ton post #17 ; c'est sans doute car tu n'as pas utilisé de inputbox ; or selon le post #18 de Michel, il y tient beaucoup vu qu'il y a cette ligne de code :
Set ref = Application.InputBox(prompt:="Sélectionner les colonnes", Type:=8)

il est d'accord pour essayer ma solution avec coche "x", mais apparemment, il n'est pas intéressé par ta version avec filtre, bien que le titre de ce sujet soit : « Filtre sur colonnes multiples » ; ça m'fait penser à dire pour Michel cette remarque importante : pour ma version avec coche "x" et pour ma version avec inputbox :

y'a pas besoin qu'tu sélectionnes les 2 colonnes à filtrer ➯ c'est plus sûr ; en effet, imagine qu'après avoir sélectionné les 2 colonnes tu appuies par mégarde sur la touche Suppression : tu effaces sans l'vouloir le contenu des 2 colonnes choisies ; bien sûr, tu peux faire Ctrl z pour annuler cette suppression, mais il faut que tu le fasses sans tarder, pour éviter qu'une autre opération rende irréversible la récupération des données supprimées (par exemple le lancement d'une macro ➯ commande "Annuler" en grisé et donc indisponible) ; il faut aussi, évidemment, que l'utilisateur sache qu'on peut faire Ctrl z ou Undo (commande Annuler, flèche arrondie vers la gauche) pour annuler une opération (si fait suffisamment tôt).


autre remarque importante pour Michel : merci de bien vouloir faire un retour sur le code VBA du post #17 de mon copain Marcel et sur celui de son post #22 , sinon Marcel sera inconsolable, et je ne vais pas savoir comment y remédier ! 😭

soan​
Désolé de ne pas répondre à tous les post mais j'ai attrapé le Covid avec la totale et je suis en mode veille. Enore merci à tous pour vos réponses,
 

TooFatBoy

XLDnaute Barbatruc
Et donc toujours pas de retour sur ma macro de #17, qu'on retrouve dans la pièce jointe de #24 pour te faciliter son test ?!?

Ni sur #22 qui répond pourtant exactement à ta question de #12 en te montrant une façon de récupérer les numéros des colonnes sélectionnées ?
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonsoir Michel, Marcel,

je te retourne le fichier de ton post #35 modifié ; utilisation identique ➯ fais comme d'habitude : fais Ctrl f puis ensuite, sélectionne avec la souris tes 2 colonnes. :) bien sûr, tu pourras aussi toujours faire Ctrl d pour démasquer tes lignes masquées. ;)



code VBA de Module3 (28 lignes) :

VB:
Option Explicit

Sub Filtre_2_colonnes()

  Dim ref As Range, chn$, ColAct1%, ColAct2%, DerLigne&, i& 'Déclaration des variables
 
  'Sélectionner les 2 colonnes avec la souris
  Set ref = Application.InputBox(prompt:="Choisir les 2 colonnes avec la souris", Type:=8)
  chn = ref.Address(0, 0) 'avec (0,0) : adresse plus simple car sans les $ ; ex : B:B,E:E
 
  If Len(chn) = 7 Then 'Vérifier si le nombre de caractères de la saisie est correct
    
    'Extraire les numéros des 2 colonnes
    ColAct1 = Columns(Split(chn, ",")(0)).Column
    ColAct2 = Columns(Split(chn, ",")(1)).Column
    
    DerLigne = Cells(Rows.Count, 1).End(xlUp).Row: Application.ScreenUpdating = 0
    
    'Garder les deux lignes d'entête
    For i = 3 To DerLigne
      'Si cellules vides dans les 2 colonnes choisies, masquer la ligne
      If IsEmpty(Cells(i, ColAct1)) And IsEmpty(Cells(i, ColAct2)) Then Rows(i).Hidden = True
    Next i
  End If
  Application.Goto [A1], True 'Retour au début

End Sub

code VBA de Module1 (8 lignes) :

VB:
Option Explicit

Sub Démasquer()
  Dim DerLigne&
  DerLigne = Cells(Rows.Count, 1).End(xlUp).Row
  Rows("1:" & DerLigne).Hidden = 0: [A1].Select
End Sub

soan
 

Pièces jointes

  • Test2_fin.xls
    75.5 KB · Affichages: 3

TooFatBoy

XLDnaute Barbatruc
Plus de 72 heures après l'envoie de sa macro en première ligne sur le front du forum, Marcel32 est toujours sans nouvelles d'elle !
Fonctionne-t-elle ?
Est-elle HS ?

Peut-être des nouvelles à venir dans les prochaines heures ???
Tout espoir n'est pas encore perdu.

En attendant, prions le dieu du café expresso.
Cafe.jpg
 

Discussions similaires