Bonjour,
Effectivement maintenant c'est clair
Je regarderai cela tout à l'heure sauf si d'ici là, un autre intervenant t'apporte la réponse.
Il me semble avoir déjà réalisé ce type de tableau avec une gestion de chantier.
Bonjour,
Dans cette version 4 du classeur, j'ai laissé la feuille nommée FiltrePeriode.
J'ai décomposé en trois feuilles l'ensemble des données parce-que c'est plus proche de ma façon de travailler.
J'utilise toujours également un minimum de VBA, privilégiant Excel dont j'utilise les cellules comme paramètres.
Je ne vois pas non plus l'utilité de créer du code VBA pour écrire dans les cellules d'Excel des formules que je peux écrire directement moi même dans ces cellules. De plus c'est bien plus simple pour la maintenance mais cela est un avis et un choix personnel.
J'ai utilisé les même couleurs que celles utilisées dans la première feuille (Bleu pour les Data, Orange pour les paramètres, vert pour les filtres)
La technique utilisée est également basée sur le filtre élaboré d'excel mais en utilisant l'exportation plutôt que le filtre sur place.
J'ai préféré le déclenchement par un bouton pour ne pas perturber l'utilisateur mais bien entendu on pourrait également utiliser en plus la procédure événementielle Worksheet_Change comme cela se fait dans la feuille FiltrePeriode
Une feuille contenant les données nommée db, une feuille paramètre nommée Param, une feuille de rapport/consultation nommée Filtre
Chaque plage porte un nom dbPerso, areaExport, areaCriteria
Les formules calculant le premier jour et le dernier jours sont placées dans les colonnes à droite de celles qui servent à l'exportation.
Les colonnes C et D de la feuille Filtre peuvent être masquées
La formule en colonne F
=SI(NBCAR(A5);MAX(C5;$I$3);"")
La formule en colonne G
=SI(NBCAR(A5);MIN(D5;FIN.MOIS($I$3;0));"")
Ces formules sont copiées sur cinq lignes.
Un message se trouvant en cellule F3 apparaît en rouge pour signaler qu'il faut copier les cellules sur plus de lignes si le nombre filtrés est plus grands que le nombre de lignes contenant les formules.
La formule en F3
=SI(BDNBVAL(dbPerso;1;areaCriteria)>NBVAL($F$4:$F$9);"Agrandir la zone de formules";"")
Code de la procédure événementielle qui se trouve dans l'objet de la feuille [Filtre]
1 2 3
| Private Sub cbFilter_Click()
mFilter.Export ' Appel de la procédure Export du module mFilter
End Sub |
Code des procédures présentent dans le module mFilter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Option Explicit
Public rngData As Range, rngExport As Range, rngCriteria As Range
Public flagInit As Boolean
Sub Init()
With ThisWorkbook
Set rngData = Range("dbPerso")
Set rngExport = Range("areaExport")
Set rngCriteria = Range("areaCriteria")
End With
flagInit = True
End Sub
Sub Export()
If Not flagInit Then Init
With rngData
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, CopyToRange:=rngExport
End With
End Sub |
Il faut encore finaliser ce classeur pour placer les titres colonnes F & G, nommer les cellules I3 & J3 pour la clarté de lecture des formules.
Nommer la plage de cellules où l'on place les formules etc...
Nommer la plage prévue pour l'exportation afin de nettoyer le format pour la prochaine sélection etc...
Mais je pense que ce classeur donne suffisamment d'idées pour développer ce que tu cherches à faire.
Les plages de données des feuilles Param et db étant converties en tableau il est possible d'ajouter des données. Ces plages sont ainsi dynamiques.
Malgré le soin apporté à la conception de ce classeur Démo et les tests réalisés, il est possible qu'il y ait malgré tout un petit bug qui subsisterait
Partager