XL 2019 Code VBA

MarieLN

XLDnaute Nouveau
Bonjour,
Je souhaiterais masquer des lignes en fonction d'une cellule d'un TCD à chaque changement de donnée : le résultat de l'étiquette de ligne du TCD "Directeur-trice" se trouve en A6, issu d'un TCD nommé "Tableau croisé dynamique3" dans une feuille "TCD_Profession". J'ai essayé de l'adapter à un ancien code, mais je n'ai pas le résultat attendu.
Voyez-vous d'où peut provenir l'erreur dans le code ci-dessous ?
Merci beaucoup,


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
Application.ScreenUpdating = False
If Not Application.IntersectActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Directeur-trice") Is Nothing Then
Range("A8:A110").EntireRow.Hidden = False
Range("B8:B110") = "x"
For Each Cel In Range("A8:A110")
If Cel.Value <> "" And Cel.Value = 0 Then
Cel.Offset(0, 1) = ""
End If
Next
Range("b8:b110").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
Range("B8:B110") = ""
End If
End Sub
[/CODE]
 

chris

XLDnaute Barbatruc
Bonjour

Dans la mesure où Worksheet_Change correspond à la saisie d'une valeur dans une ou n cellules, un TCD ne permettant pas de saisie en dehors éventuellement des étiquettes, je comprends mal ta demande...

Merci de joindre un fichier exemple...
 

MarieLN

XLDnaute Nouveau
Je souhaite par la suite insérer un second tableau (bd) sous le graphique de la "fiche". Je n'arrive pas à connecter avec un seul segment avec les différents tableaux d'où mon idée de passer par les formules pour masquer les lignes. Je joins un modèle plus avancé.... Il existe sans doute une autre solution, j'ai abandonné celle de power car le fichier rame trop à l'ouverture.
Merci
 

Pièces jointes

  • Modèle suivi activité2.xlsm
    102.1 KB · Affichages: 2

MarieLN

XLDnaute Nouveau
J'ai réalisé un modèle de fiche dans lequel figure les données d'un tableau de données sélectionnées à l'aide d'un segment. Ce segment est également connecté à un graphique. J'utilise les formules index, agregat... dans ma fiche car le TCD ne donne pas autant de souplesse dans la présentation. Avec l'ajout de données dans un 2eme tableau issues d'une autre base de données, je souhaiterais que les lignes = 0 soient masquées par un code VBA lorsque je clique sur un nom du segment, comme le fonctionnement d'un TCD avec un segment. Ce code fonctionnait bien lorsque j'utilisais une listebox mais je n'arrive pas à l'adapter au segment. Si je n'utilise pas plusieurs TCD plutôt que les formules, c'est que je ne sais pas connectés plusieurs TCD de bases de données différentes et la présentation est plus limitée (nombre et largeur de colonne différents entre les deux tableaux).
Est-ce que je suis un peu plus claire dans mes détails ? 🤔😁
 

chris

XLDnaute Barbatruc
RE

A noter que tu peux faire un ou n TCD et le ou les exploiter dans un autre tableau de forme libre avec avec LIREDONNEESTABCROISDYNAMIQUE

Supprimer le code dans le module de la feuille Fiche

Dans le module du classeur (j'ai renommé le TCD comme la feuille qui le porte)

VB:
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
    If Sh.Name <> "TCD_Profession" And Target.Name <> "TCD_Profession" Then Exit Sub
    With Worksheets("Fiche")
   
        .Range("A8:A110").EntireRow.Hidden = False
        .Range("B8:B110") = "x"
        For Each Cel In .Range("A8:A110")
            If Cel.Value <> "" And Cel.Value = 0 Then
                Cel.Offset(0, 1) = ""
            End If
        Next
       .Range("b8:b110").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
       .Range("B8:B110") = ""

    End With
End Sub
 

MarieLN

XLDnaute Nouveau
Merci beaucoup pour le temps passé sur ma demande. J'ai testé le code mais les lignes à 0 ne se filtrent pas. J'avais pensé à reporter les données du TCD sur un tableau libre mais je ne souhaite pas que les lignes vides ou à 0 apparaissent à chaque changement de nom.... quelle galère !!!!!
 

MarieLN

XLDnaute Nouveau
L'ancien code faisait référence à une cellule qui changeait grâce à une liste déroulante, mais cette même cellule fait référence à une formule et c'est pour cette raison que le filtre ne fonctionne plus.
Très bonne idée pour le filtre auto sur la colonne A mais est-ce qu'il peut être utilisé automatiquement avec le segment ? Merci pour tout
 

chris

XLDnaute Barbatruc
RE

Non, il faut le coder : ta colonne A est remplie par formule je crois ou constante pour les lignes à toujours afficher et tu remplaces tout ce qui est inutile dans le code après
VB:
With Worksheets("Fiche")
par une réactualisation du filtre qui doit donc toujours être actif

Là il y a plein de formules en erreur donc difficile de voir...

A minima
Code:
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
    If Sh.Name <> "TCD_Profession" And Target.Name <> "TCD_Profession" Then Exit Sub
    With Worksheets("Fiche")
        .AutoFilter.ApplyFilter
    End With
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 923
Membres
101 840
dernier inscrit
SamynoT