VBA - Filtrer Colonnes par son nom plutôt que son emplacement

Piloul

XLDnaute Nouveau
Bonjour,

Je reviens à nouveau faire appel à votre génie !

Je suis sur que c'est tout bête mais je n'arrive pas à adapter le code ci-dessous afin qu'au niveau "Field" ce ne soit pas le numéro de la colonne que je veuille filtrer mais plutôt son nom "Nom"

ActiveSheet.Range("$A$1:$DZ$1" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=5, Criteria1:="Nicolas"

j'ai tenté de faire ça mais non :p :

ActiveSheet.Range("$A$1:$DA" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:="Nom", Criteria1:="Nicolas"

Ma question est donc: comment faire pour filtrer "Nicolas" dans la colonne "Nom" suivant l'entête de la colonne et non son emplacement ? car la colonne "Nom" peut bouger suivant qui fait l'extraction... ça serait trop simple sinon :D

Mon but final étant de supprimer les critères sélectionnés puis de repartir sur une autre colonne pour faire un autre filtre et procéder à la même opération... et ça plusieurs fois. Je passerai grâce à cela d'un tableau de 8000 lignes à 300 lignes. Un bon programme d'amaigrissement ;)

Merci par avance pour votre aide

Nico
 

Paf

XLDnaute Barbatruc
Re : VBA - Filtrer Colonnes par son nom plutôt que son emplacement

Bonjour,

suivant le nom de l'entête de colonne, je ne sais pas .

Mais une solution est de définir une plage nommée (par exemple Plage_Nom) puis d'utiliser le code:

ActiveSheet.Range("$A$1:$DA" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=Range("Plage_Nom").Column, Criteria1:="Nicolas"


Si une colonne est ajoutée avant cette colonne, les références de la plage nommée sont décalées automatiquement.

A+
 

Piloul

XLDnaute Nouveau
Re : VBA - Filtrer Colonnes par son nom plutôt que son emplacement

Merci pour ton aide !
Je vais essayer de faire quelque chose avec ta solution :)

Ce qui me gêne c'est qu'il y a une grosse partie manuelle où il faut que je renomme les entêtes de colonne une à une, sachant que j'en ai une vingtaine à filtrer ça risque de prendre un peu de temps malheureusement :/

Avec VBA on doit être capable de pouvoir sélectionner une valeur précise non ? Sans repartir de ma proposition, est ce que vous auriez une solution différente ?

----------------------------------------------------
Je viens de trouver ceci qui marche parfaitement, mais avec un TCD :

With ActiveSheet.PivotTables("PivotTable9").PivotFields("Nom")
.PivotItems("Nicolas").Visible = True
End With

Mais je ne peux pas faire de TCD pour mon tableau et m'amuser à cocher les 150 colonnes de mon tableau, ça risque d'être un peu long :p

Si cela marche avec un TCD, il doit y avoir un moyen de le faire en dehors non ?

Merci

Nico
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : VBA - Filtrer Colonnes par son nom plutôt que son emplacement

re,

c'est parce qu'une cellule fait partie d'une 'structure' qu'on peut la retrouver comme vous précisez
soit dans un TCD
soit dans un tableau (au sens excel 2007)

un lien pour la gestion des tableaux Les tableaux dans Excel 2007
un pour la partie VBA Ce lien n'existe plus

Sinon une autre solution pourrait consister à utiliser find sur la ligne d'entête de colonne pour trouver la cellule contenant "noms" .

Il existe peut-être d'autres solutions ?

Bonne suite
 

Modeste geedee

XLDnaute Barbatruc
Re : VBA - Filtrer Colonnes par son nom plutôt que son emplacement

Bonsour®
nommer automatiquement les colonnes selon le nom de l'entete :
sélectionner les colonnes souhaitées...
Ctrl+Maj+F3
exemple :
Capture.JPG
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    83.3 KB · Affichages: 228
  • Capture.JPG
    Capture.JPG
    83.3 KB · Affichages: 199
Dernière édition:

Piloul

XLDnaute Nouveau
Re : VBA - Filtrer Colonnes par son nom plutôt que son emplacement

Merci beaucoup à vous deux ! je vais tester tout ce que vous me dites.
La piste "find" va être mon premier test !

Si je trouve la solution qui fera mon bonheur je vous tiens au courant :)

Bonne journée
 

Piloul

XLDnaute Nouveau
Re : VBA - Filtrer Colonnes par son nom plutôt que son emplacement

J'ai la solution !

Alors ce que j'ai fait grâce aux différentes pistes que vous m'avez donné :
- J'ai converti mon tableau en table (pour que ça fasse parti d'une structure comme le TCD --> merci PAF pour la piste)
- Et grace au lien Ce lien n'existe plus j'ai pu adapter ce que je voulais.

Ce qui donne donc :

Sub Filtre ()

'Filtre "Nicolas" sur la colonne "Nom" qui se trouve dans la "Table1"
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=Range("Nom").Column - 1, Criteria1:= _
"Nicolas", Operator:=xlAnd
'Supprime le résultat
Range("A2:A" & Range("A" & Rows.Count).End(xlDown).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete
'Enlève le filtre existant
Rows("1:1").Select
ActiveSheet.ShowAllData

End Sub

En espèrant que ça pourra servir à d'autres :)

Bonne journée à tous.

Nicolas
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
98
Réponses
16
Affichages
981

Statistiques des forums

Discussions
311 723
Messages
2 081 932
Membres
101 844
dernier inscrit
pktla