Rechercher la colonne et filtrer dessus
Bonjour,
J'ai un tableau Excel structuré, je recherche la colonne ou l'entête est prod 3A (ca cela marche) puis je veux filtrer sur cette colonne les valeurs non nul et la mon autofilter plante erreur 1004 "la méthode Autofilter de la classe Range à échoué."
Bon je suis autodidact en VBA et je me limite à recopier et adapter des bouts de code, mais la ... je seche
Je suis la dessus depuis 2 jours, j'ai chercher mais je n'ai pas trouvé de solution ou n'ai pas réussis à les faire fonctionner.
Voila mon code :
Dim feuille As String, tableau As String
Dim stRech As String, c As Range, Col As Integer
feuille = "ARTICLES"
tableau = "ARTICLES"
Sheets(feuille).Activate
' trouver la colone prod 3A
With Sheets(feuille)
stRech = "prod 3A"
If stRech <> "" Then
'On fait la recherche dans la ligne 1 de Feuil1
Set c = Sheets("Suivi").Rows(1).Find(stRech, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
Col = c.Column
Set c = Nothing
'MsgBox Col
End If
End If
End With
ActiveSheet.ListObjects("ARTICLES__2").Range.AutoFilter Field:=Col, Criteria1:="<>0"Bonjour à tester
Dim feuille As String, tableau As String
Dim stRech As String, c As Range, Col As Integer
feuille = "ARTICLES"
tableau = "ARTICLES"
Sheets(feuille).Activate
' Trouver la colonne "prod 3A"
With Sheets("Suivi")
stRech = "prod 3A"
If stRech <> "" Then
' On fait la recherche dans la ligne 1 de la feuille "Suivi"
Set c = .Rows(1).Find(stRech, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
Col = c.Column
Set c = Nothing
Else
MsgBox "La colonne 'prod 3A' n'a pas été trouvée."
Exit Sub
End If
End If
End With
' Vérifiez que Col a été défini avant d'appliquer le filtre
If Col > 0 Then
ActiveSheet.ListObjects("ARTICLES__2").Range.AutoFilter Field:=Col, Criteria1:="<>0"
Else
MsgBox "Aucune colonne valide trouvée pour le filtrage."
End IfMerci beaucoup, avec vos teste, je me suis rendu compte que col restait à 0 ?
Pour tout dire, mon code fonctionne, mais je prenais la première ligne de ma feuille, alors que la première ligne du tableau est en ligne 2.
J'ai simplement corrigé ma ligne :
Set c = Sheets("Suivi").Rows(2).Find(stRech, LookIn:=xlValues, LookAt:=xlWhole)
Il faut quand meme que j'améliore cela, pour que cela prenne en compte que le tableau, comme cela ce sera toujours la première ligne qui aura les entête de colonne.
1000x merci.
Bonjour à tous
Vous semblez utiliser un tableau structuré de nom ARTICLES sur la feuille de nom ARTICLES.
Dans ce cas, on peut utiliser le code suivant qui s'adapte automatiquement aux nombres de lignes du TS. Le tableau peut être n'importe où sur la feuille. Cliquer sur le bouton bleu.
Le code dans module1 :
Sub FiltrerNonNul()
Const NomFeuille = "ARTICLES", NomTS = "ARTICLES", NomColonne = "prod 3A"
Dim IndexChamp As Long
With Sheets(NomFeuille).ListObjects(NomTS) ' avec le tableau structuré NomTS
If .ListRows.Count = 0 Then Exit Sub ' si aucune ligne de données, on sort
.Range.AutoFilter: .Range.AutoFilter ' ôter un éventuel filtre actif
On Error GoTo ERRnoCOL ' si on ne trouve pas la colonne recherchée
IndexChamp = .ListColumns(NomColonne).Index ' index du champ à filtrer
.Range.AutoFilter Field:=IndexChamp, Criteria1:="<>0" ' filtrer
End With
Exit Sub ' sortie "normale" de la procédure
ERRnoCOL: ' information en cas d'erreur
MsgBox "'" & NomColonne & "' n'est pas un nom de colonne" & vbLf & _
"du tableau structuré de nom '" & NomTS & "'" & vbLf & _
"au sein de la feuille nommée '" & NomFeuille & "'.", vbCritical
End Subnota : Comme il est recommandé dans la charte du site, c'est tellement plus simple pour les répondants de travailler sur un petit classeur représentatif et anonymisé joint par le demandeur. Pensez-y la prochaine fois, merci
Merci, je test ça dès lundi.
Merci
Ce code fonctionne à merveille.
Je note pour le fichier exemple.
Merci beaucoup