Prise en compte uniqt des cellules visibles sur intervalle

Bonjour le forum,

Je veux faire des graphiques à partie d'un tableau filtré.

Il s'agit d'un tableau avec des dates.

Je choisi une date de départ et une date de fin, ensuite le graph (via un tableau récapitulatif) se fait en prenant en compte uniquement l'intervalle de dates.

Jusque là, ça fonctionne.

Mon problème, c'est que lorsque je filtre mon tableau "accidents", par exemple, je ne veux que les jours du mois de décembre et ne pas tenir compte des autres mois, les cellules cachées sont encore prises en compte.

Comment faire pour prendre en compte l'intervalle de temps et uniquement les cellules visibles ?

Merci d'avance.

19classeur1.zip (28.76 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

22classeur1-v1.zip (43.42 Ko)

Merci gmt, pour cette réponse.

Ton fichier fonctionne, mais comme je ne sais pas à quoi correspond "AccFiltrés"

Je ne sais pas comment adapté la formule

jaco a écrit :

comme je ne sais pas à quoi correspond "AccFiltrés" Je ne sais pas comment adapté la formule

AccFiltrés est le nom d’une feuille cachée sur laquelle sont inscrites le données des accidents filtrés dans la feuille ‘tableau de bord’’.

Dès que tu actives la feuille ‘’tableau de bord’’, une macro événementielle se lance.

Elle copie, une à une toutes les lignes non masquées du tableau de la feuille ‘’Accidents’’ dans cette feuille. En fait, pour que la macro arrive plus vite à faire ce travail, je suis passé par une variable tableau.

Les formules que tu as sur ta feuille ‘’tableau de bord’’ se réfèrent désormais à cette nouvelle feuille qui n’a pas de lignes masquées : j’ai fait un remplacement global dans ces formules.

Et en rédigeant cette réponse, je me suis aperçu qu’il en manquait. Donc prends bien la nouvelle version ci-jointe.

Pour afficher la feuille masquée sous Version en .xls

‘’Format – Feuille – Afficher’’

Sous version .xlsm :

‘’Accueil - Format – Visibilité – Masquer & afficher – Afficher la feuille‘’

Pour la masquer, sous version en .xls :

‘’Format – Feuille – Masquer’’

Et pour la masquer sous .xlsm

Clic droit sur son onglet et ‘’Masquer’’

OK ?

Bye !

18classeur1-v2.zip (42.94 Ko)

Bonjour,

tu as 2007, tu peux faire un TCD avec des segments si tu enregistres en .xlsx.

eric

11classeur1.xlsx (31.39 Ko)

Merci gmb pour cette nouvelle réponse,

J'ai copié ta macro (j'ai juste modifié le nom des feuilles), il n'y a pas de message d'erreur, mais cela ne fonctionne pas, lorsque je lance la macro.

J'ai créé une feuille vide ("AccFiltrés"), en pensant que la macro allait remplir la feuille --> rien

J'ai copier/coller la feuille accident, en pensant qu'à défaut de créer la feuille, la macro allait la modifier --> rien

Donc je ne sais pas comment initialiser le système.

J'ai remarqué que dans ton fichier, à chaque fois que je fais un filtre sur la feuille "accidents", il fallait lancer la macro pour que le filtre sur la feuille "AccFiltré" se fasse, c'est bien ça?

Cela ne se fait pas de façon automatique?

Merci

jaco a écrit :

J'ai copié ta macro (j'ai juste modifié le nom des feuilles),

C'est juste ce qu'il ne faut pas faire !

Si tu changes le nom des feuilles, il te faut le changer aussi dans les 2 premières instructions de la macro :

Private Sub Worksheet_Activate()
    Set fa = Sheets("Accidents")
    Set faf = Sheets("AccFiltrés")
...

J'ai remarqué que dans ton fichier, à chaque fois que je fais un filtre sur la feuille "accidents", il fallait lancer la macro pour que le filtre sur la feuille "AccFiltré" se fasse, c'est bien ça?

Non, ce n'est pas ça.

Quand tu filtres sur la feuille accident, il ne se passe rien d'autre que ce que tu vois : les lignes qui ne remplissent pas les critères que tu as mis se masquent.

La macro ne se lance que quand tu vas activer la feuille ''tableau de bord''.

Et elle ne filtre rien sur la feuille "AccFiltrés". Elle se contente d'y coller les lignes nom masquées qu'il y a sur la feuille ''Accidents''

Mais elle est tellement rapide que tu ne t'en aperçois pas !

En conclusion, si tu veux que je te l'installe sur un autre fichier, envoie moi celui-ci.

OK ?

Bye !

Merci gmb pour cette réponse,

J'ai délaissé ce sujet pendant quelques jours, mais je suis de retour.

Mon fichier étant professionnelle, je ne pas pas le diffuser à l'extérieur de mon entreprise

Du coup, je vais être obligé d'apprendre à pécher, plutôt que d'avoir directement le poisson

Mes feuilles ont le même nom que les tiennes, "Accidents", et "AccFiltrés".

Par compte, dans ma feuille "Tableau de bord", j'ai déjà une macro, et j'ai collé la tienne en dessous.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Data As Range
    If ....
        Set Data = ....
    ElseIf ...
        Set Data =....
    End If

End Sub

Option Explicit

Dim fa As Worksheet, faf As Worksheet, tabloR(), i&, j&, k&

Private Sub Worksheet_Activate() "<--------------------------Surligné en jaune quand je lance la macro"

    Set fa = Sheets("Accidents")
    Set faf = Sheets("AccFiltrés")

    faf.Range("A1").CurrentRegion.Offset(1, 0).Clear

    k = 0
    For i = 2 To fa.Range("A65536").End(xlUp).Row
        If fa.Rows(i & ":" & i).EntireRow.Hidden = False Then
            ReDim Preserve tabloR(6, k + 1) "<---------------message d erreur" '"Variable non définie"'
            For j = 1 To 6
                If j = 2 Then
                    tabloR(j - 1, k) = fa.Cells(i, j).Value * 1
                Else
                    tabloR(j - 1, k) = fa.Cells(i, j).Value
                End If
            Next j
            k = k + 1
        End If

    Next i
    faf.Range("A1").CurrentRegion.Offset(1, 0).Clear
    faf.Range("A2").Resize(UBound(tabloR, 2), 6) = Application.Transpose(tabloR)
End Sub

Le message d'erreur m'indique "variable non définie", pourtant, je pense qu'elle est bien définie dans la ligne

Dim fa As Worksheet, faf As Worksheet, tabloR(), i&, j&, k&

Serait-ce parce qu'il y a 2 macros que cela ne fonctionne pas?

Faut-il les mixer, et ne pas les mettre l'une après l'autre ?

Merci pour l'aide

Bonjour

Et la macro ne te mets pas en surligné la variable "non définie" ?

Peut-être est-ce celle d'une autre macro de la feuille qui se déclenche par une instruction de la macro Activate et qui provoque le Bug.

Essaie d'ajoute ces deux instructions, en fin de macro

    ...
   Next i
    Application.EnableEvents = False
    faf.Range("A1").CurrentRegion.Offset(1, 0).Clear
    faf.Range("A2").Resize(UBound(tabloR, 2), 6) = Application.Transpose(tabloR)
    Application.EnableEvents = True
End Sub

Désolé, mais sans ton fichier, je ne peux pas t'aider davantage !

Bye !

Bonjour,

et ma proposition ?

eric

En fait Eriiic, j'ai déjà des tableau qui tracent les graph.

Vu mon petit niveau, pour moi, il est plus simple de rajouter une feuille intermédiaire, comme ça, je ne modifie que le tableau de bord et non les graphs, et en plus, je ne maîtrise pas trop les TCD.

J'ai presque réussi à faire fonctionner la macro de gmb, mais lorsque je veux que plus de colonnes soient prises en compte, ça bugg.

Au delà de 7 colonnes, j'ai le message

L'indice n'appartient pas à la sélection

Ci-dessous mon code. J'ai modifié la gestion du nombre de colonnes en rajoutant la variable "NbCol"

Option Explicit

Dim fa As Worksheet, faf As Worksheet, tabloR(), i&, j&, k&, NbCol&

Private Sub Worksheet_Activate()

    Set fa = Sheets("Accidents")
    Set faf = Sheets("AccFiltrés")

    faf.Range("A1").CurrentRegion.Offset(1, 0).Clear

    NbCol = 7

    k = 0
    For i = 2 To fa.Range("A65536").End(xlUp).Row
        If fa.Rows(i & ":" & i).EntireRow.Hidden = False Then
            ReDim Preserve tabloR(NbCol, k + 1)
            For j = 1 To NbCol
                If j = 2 Then
                    tabloR(j - 1, k) = fa.Cells(i, j).Value * 1
                Else
                    tabloR(j - 1, k) = fa.Cells(i, j).Value
                End If
            Next j
            k = k + 1
        End If

   Next i
    Application.EnableEvents = False
    faf.Range("A1").CurrentRegion.Offset(1, 0).Clear
    faf.Range("A2").Resize(UBound(tabloR, 2), NbCol) = Application.Transpose(tabloR)
    Application.EnableEvents = True
End Sub

Je suppose que le nombre de colonne est dans un paramètre, mais je ne sais pas lequel, je ne peux donc pas l'adapter.

Si je veux que la macro se lance à chaque changement dans la feuille, suis-je obligé de mettre quelque chose entre les "()" de la fonction suivante ?

Private Sub Worksheet_Change( )

Merci d'avance

Bonjour,

Ah, il faut solliciter pour avoir un retour...

Tu ferais mieux d'apprendre déjà les fonctionnalité de base d'excel plutôt que de faire du vba que tu ne maitrises guère plus pour compenser.

C'est vrai que c'est plus confortable de demander une macro quand on ne sait pas faire

Depuis le temps que tu y es tu maitriserais les TCD un peu plus.

eric

Bonjour,

Une proposition à étudier.

J'espère que ta version Excel ne posera pas de soucis.

Cdlt.

Comme j'ai beaucoup de tableaux intermédiaires qui filtrent en fonction de divers paramètres puis trient par ordre croissants puis suppriment les valeurs à 0 et beaucoup de graphiques associés, si je fais des TCD, je dois refaire tous les tableaux (en recherchant une solution de tri et de suppression des valeurs à 0) et reparamètrer tous les graphiques.

C'est pour ça que j'ai voulu rester sur une solution avec macro qui s'adapte rapidement à mon fichier.

Après recherche, j'ai remarqué que la colonne qui buggait comporter plus de 255 caractéres.

J'ai remplacer les lignes

For j = 1 To nc
                If j = 2 Then
                    tabloR(j - 1, k) = fa.Cells(i, j).Value * 1
                Else
                    tabloR(j - 1, k) = fa.Cells(i, j).Value
                End If

par les lignes

For j = 1 To nc
                If j = 2 Then
                    tabloR(j - 1, k) = Left(fa.Cells(i, j).Value * 1, 255)
                Else
                    tabloR(j - 1, k) = Left(fa.Cells(i, j).Value, 255)
                 End If

En rajoutant

Left(fonction, 255)

Il n'y a que les 255 premiers caractères qui sont lus, mais comme il s'agit de commentaires, cela ne gêne pas dans l'exécution des graphs.

Encore merci à tous pour votre aide

Rechercher des sujets similaires à "prise compte uniqt visibles intervalle"