VBA : Créer onglet Colonne filtrée - avec FOR EACH CRITERIA

zebanx

XLDnaute Accro
Bonsoir à tous,

J'ai un fichier brut qu'on me demande :
o de "déconsolider" suivant les données filtrées de la première colonne;
o à présenter sur un onglet en partant d'un onglet "exemple" (avec différents tableaux stats en dessous) et à présenter avec le nom de l'onglet et le nombre de lignes des valeurs filtrés

Je suis nul en VBA mais j'ai quand même essayé de codé, sans réussite..:eek:

Une boucle For Each criteria me parait pourtant bien adaptée, je vous remercie par avance pour votre aide et vos différentes propositions de boucle qui me permettront de progresser sur les boucles en VBA.

Merci et bonne soirée
thierry
 

Pièces jointes

  • filtre_creer onglet VBA.zip
    15 KB · Affichages: 42

Paritec

XLDnaute Barbatruc
Re : VBA : Créer onglet Colonne filtrée - avec FOR EACH CRITERIA

Re Zebank le forum
bon alors pas de retour mais j'ai rajouté le premier récap sur les zones
pour l'autre tu as l'exemple tu pourras le faire??
a +
Papou:eek:
 

Pièces jointes

  • Zebank V3.xls
    54 KB · Affichages: 57

Paf

XLDnaute Barbatruc
Re : VBA : Créer onglet Colonne filtrée - avec FOR EACH CRITERIA

Bonjour à tous

j'arrive trop tard, mais comme c'était fait .... (sans récapitulatif)

Code:
Sub zebanx()
Dim DerLig As Long, MonDico, Tableau, i As Integer, NomFichier As String
Dim WS1 As Worksheet, WS2 As Worksheet

Set MonDico = CreateObject("Scripting.Dictionary")
Set WS1 = Worksheets("brut")
If Not WS1.AutoFilterMode Then WS1.Range("A1:H1").AutoFilter

DerLig = WS1.Range("A" & Rows.Count).End(xlUp).Row
'récupération des noms de type sans doublon
  Tableau = WS1.Range("A2:A" & DerLig)
  For i = LBound(Tableau) To UBound(Tableau)
     If Tableau(i, 1) <> "" Then MonDico(Tableau(i, 1)) = ""
  Next i
  Erase Tableau
   Tableau = MonDico.keys
   
' pour chaque type
For i = LBound(Tableau) To UBound(Tableau)
    'si la feuille du type n'existe pas on la crée
    If ChercheFeuille(Tableau(i)) = False Then
         Sheets.Add after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Tableau(i)
    End If
    Set WS2 = Worksheets(Tableau(i))
    WS2.Cells.Delete 'effacement de la feuille de destination
    WS1.Range("A1:H" & DerLig).AutoFilter Field:=1, Criteria1:=Tableau(i) 'tri la feuille selon le type
    WS1.Range("A1:H" & DerLig).SpecialCells(xlCellTypeVisible).Copy WS2.Range("A1") 'copie sur la feuille du type
    If Not WS2.AutoFilterMode Then WS2.Range("A1:H1").AutoFilter
    Application.CutCopyMode = False
Next
    WS1.ShowAllData
End Sub

Function ChercheFeuille(NomFeuille)

For i = 1 To Worksheets.Count
    If Worksheets(i).Name = NomFeuille Then
        ChercheFeuille = True
        Exit Function
    End If
Next
ChercheFeuille = False
End Function

Certainement moins rapide que la version tableau de Paritec.

Bonne journée

Edit: correction mise en page
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
313 060
Messages
2 094 924
Membres
106 127
dernier inscrit
AS PRECY