1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| Dim clD As Workbook
Dim indiCateur As Worksheet ' déclaration classeur
Dim synThese As Worksheet ' déclaration feuille
Dim dData As Worksheet ' identique
Dim i As Integer
Dim jData As Range ' déclaration plage de données
Dim Annee As Range ' identique
Dim Mois As Range ' identique
Sub traitement()
' affectation des objets excel
Set clD = Application.ActiveWorkbook
Set indiCateur = clD.Sheets("Indicateur")
Set synThese = clD.Sheets("synthese")
Set dData = clD.Sheets("dico")
' selection des ranges à copier
' affectation des colonnes sélectionner à l'objet jData
Set jData = indiCateur.Range("a1,b1,g1").EntireColumn
' (1) Effacer les cellules de la feuille synthèse avant de (2) copier les colonne selectionnées
synThese.Cells.Clear
synThese.AutoFilterMode = False
jData.Copy Destination:=synThese.Range("a1")
' copie des listes uniques pour les éléments du tableau de synthése
' ces éléments vont servir d'input pour la gestion des filtres
dData.Cells.Clear
With synThese
.Range("A1:A23").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=dData.Range("a1"), Unique:=True
.Range("B1:B23").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=dData.Range("b1"), Unique:=True
End With
' affectation des listes uniques à des plages de données
Set Annee = dData.Range("a1").EntireColumn ' pour les années
Set Mois = dData.Range("b1").EntireColumn ' pour les mois
Dim derA As Integer, derM As Integer ' derA pour la dernière année et derM pour le dernier Mois
Dim i As Integer, j As Integer
derA = dData.Range("a1").End(xlDown).Row ' le numéro de la dernière année donc le nombre d'années distincte
derM = dData.Range("b1").End(xlDown).Row ' le numéro du dernier mois donc le nombre de mois
Debug.Print " nombre de mois : " & derM & " et nombre d'années : " & derA
' définition des boucles pour faire les filtres
' les boucles seront imbriquées pour rechercher toutes les combinaisons d'année et de mois
synThese.Activate
For i = 2 To derA
If dData.Range("a" & i).Value = "" Then
Debug.Print " donnee vide"
Else
Debug.Print "Annee = " & dData.Range("a" & i).Value
synThese.AutoFilterMode = False
With Range("a1").CurrentRegion
.AutoFilter field:=1, Criteria1:=dData.Range("a" & i).Value
.Interior.Color = vbRed
' .Select
End With
For j = 2 To derM
Debug.Print " **** Mois = " & dData.Range("b" & j).Value
With Range("a1").CurrentRegion
.AutoFilter field:=1, Criteria1:=dData.Range("a" & i).Value
.AutoFilter field:=2, Criteria1:=dData.Range("b" & j).Value
.Interior.Color = vbYellow
.Select ' selection du filtre obtenu
End With
If synThese.Range("a1").End(xlDown) > 1 Then
For Each ligne In synThese.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows
MsgBox Range("B" & ligne.Row + 1).Value
Next ligne
End If
' vérification si le filtre final est vide
' si vide alors on ne fait rien
' si non vide alors on fait les opérations sur le filtre sélectionne
' Recherche à faire: Tester si selection filtre vide
' Opération sur filtre
Next j
End If
Next i
End Sub |
Partager