Actualisation TCD

Bonjour à tous,

j'ai un petit souci avec un fichier sur lequel je travaille.

j'ai fait des TCD pour me permettre de ramener le nom de sous traitants dans une feuille du classeur afin de savoir si ces sous-traitants sont révisables ou pas (pour les prix).

Pourquoi 2 TCD ? parce que le titulaire peut avoir des sous traitants révisables ou non révisables. (peut-être qu'il y a plus simple ceci étant mais en plus je devrais faire pareil pour le cotraitant donc 2 TCD de plus)

En gros le circuit est le suivant :

1/ je saisi les infos dans l'onglet "DONNEES" :

B42 : le régime du sous traitant

C42 : son nom

E42 : la date à laquelle on a signé le contrat (et ça me permet de gérer les éventuels doublons de nom.....sauf si les entreprises ont le même nom et la même date mais ça n'est jamais arrivé !)

G42 : le montant du contrat.

2/quand j'ouvre la feuille "CPP TITULAIRE-ST" :

ça actualise les TCD et ça doit faire remonter les noms dans la feuille dans certaines zones

pour les sous-traitants révisables du titulaire B277 : B 286 (alimenté par TCD TIT)

pour les sous traitants non révisables du titulaire B341 : B350 (alimenté par TCD TIT 2)

Le souci c'est que la macro ramène bien les infos pour les TCD TIT2, donc si je change les régimes dans la feuille DONNEES ça actualise bien dans la feuille CPP-TITULAIRE ST mais pour les TCD TIT, ça ne ramène l'info qu'une fois et après quand je change ça ne fait pas l'actualisation dans la feuille alors que le TCD est bien actualisé.

le plus étrange c'est que si je vais dans la

19essai-forum.zip (0.97 Mo)

feuille CPP TITULAIRE ST pour effacer la zone B277:B286 et que je refais tourner la macro alors là tout remonte correctement.

J'ai essayé dans un fichier à part (ci-joint) et là tout marche bien (merci d'ailleurs à @Jean-Eric pour le code :)

Est ce que ça viendrait du fait que le fichier est protégé par un mot de passe (CRF) ou j'ai fait une erreur quelque part ?

Le fichier a été volontairement amputé d'une grande partie des feuilles qui le constitue et c'est pour ça que vous verrez des REF un peu partout mais je pense que c'est sans incidence sur le fonctionnement de la macro.

J'ai aussi un petit souci à l'ouverture avec un message qui m'indique un souci de majuscules pour le mot de passe et là j'avoue que je ne sais pas trop pourquoi (mdp = CRF)

désolé pour le pavé et merci d'avance pour votre aide :)

Je pense que j'ai trouvé un début de réponse.

le tableau de la feuille CPP TITULAIRE ST est filtré grâce à une plage que j'ai transformé en tableau (cellule O229:O477). Cela me permet de n'ouvrir que les lignes différentes de 0.

Je viens de m'apercevoir que si je converti ce tableau en plage normal j'arrive à faire fonctionner la macro correctement.
je pense avoir la solution, j'ai intercalé une instruction pour afficher toutes les lignes du filtre et ça fonctionne.

With Worksheets("TCD TIT")
    Sheets("TCD TIT").PivotTables("Tableau croisé dynamique3").PivotFields("filtre").ClearManualFilter
    Sheets("TCD TIT").PivotTables("Tableau croisé dynamique3").PivotFields("nomdate").ClearManualFilter
    On Error Resume Next
    Sheets("TCD TIT").PivotTables("Tableau croisé dynamique3").PivotFields("filtre").CurrentPage = "Titulaire revisable_"
    Sheets("TCD TIT").PivotTables("Tableau croisé dynamique3").PivotFields("nomdate").PivotItems("").Visible = False
    If Sheets("TCD TIT").Range("E1") = 1 Then
    ActiveSheet.ListObjects("Tableau1").AutoFilter.ShowAllData
    Sheets("CPP TITULAIRE-ST").Range("B277:B286").ClearContents
    Dim rngData As Range, N As Long
    Set rngData = Worksheets("TCD TIT").PivotTables(1).PivotFields("nomdate").DataRange
    N = rngData.Rows.Count
    Worksheets("CPP TITULAIRE-ST").Cells(277, 2).Resize(N).Value = rngData.Value
    End If
    End With

si vous avez plus simple je suis preneur !

merci :D

Bonjour,

J'ai aussi un petit souci à l'ouverture avec un message qui m'indique un souci de majuscules pour le mot de passe et là j'avoue que je ne sais pas trop pourquoi (mdp = CRF)

Oui puisque votre feuille Liste est masquée

Je n'ai pas trop compris tout votre souci mais vérifiez dans les options que le mode de calcul n'est en manuel.
Ensuite est-ce que vous ne deviez pas plutôt mette votre instruction Refreshall en fin de code aussi

Sinon votre code un peu plus lisible

Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll

'actualise les filtres automatiques pour ne montrer que les lignes dont le total est supérieur ˆ 0 c'est ˆ dire les lignes qui sont mouvementées'
With ActiveSheet
    .Protect Password:="CRF", AllowFiltering:=True, userinterfaceonly:=True
    .ListObjects("Tableau2").Range.AutoFilter Field:=1, Criteria1:=">0"
    .ListObjects("Tableau3").Range.AutoFilter Field:=4, Criteria1:="<>0"
    .ListObjects("Tableau4").Range.AutoFilter Field:=1, Criteria1:=">0"
    .ListObjects("Tableau5").Range.AutoFilter Field:=1, Criteria1:="<>0"
    .ListObjects("Tableau7").Range.AutoFilter Field:=1, Criteria1:=">0"
    .ListObjects("Tableau12").Range.AutoFilter Field:=1, Criteria1:=">0"
    .ListObjects("Tableau10").Range.AutoFilter Field:=1, Criteria1:=">0"
    .ListObjects("Tableau19").Range.AutoFilter Field:=1, Criteria1:="<>0"
End With

With Worksheets("TCD TIT").PivotTables("Tableau croisé dynamique3")
    .PivotFields("filtre").ClearManualFilter
    .PivotFields("nomdate").ClearManualFilter
    On Error Resume Next
    .PivotFields("filtre").CurrentPage = "Titulaire revisable_"
    .PivotFields("nomdate").PivotItems("").Visible = False

    If .Range("E1") = 1 Then
        Sheets("CPP TITULAIRE-ST").Range("B277:B286").ClearContents
        Dim rngData As Range, N As Long
        Set rngData = .PivotTables(1).PivotFields("nomdate").DataRange
        N = rngData.Rows.Count
        Worksheets("CPP TITULAIRE-ST").Cells(277, 2).Resize(N).Value = rngData.Value
    Else:
        Sheets("CPP TITULAIRE-ST").Range("B277:B286").ClearContents
    End If
End With

With Worksheets("TCD TIT 2").PivotTables("Tableau croisé dynamique1")
    .PivotFields("filtre").ClearManualFilter
    .PivotFields("nomdate").ClearManualFilter
    On Error Resume Next
    .PivotFields("filtre").CurrentPage = "Titulaire non revisable"
    .PivotFields("nomdate").PivotItems("").Visible = False
    If .Range("E1") = 1 Then
        Sheets("CPP TITULAIRE-ST").Range("B891:B911").ClearContents
        Dim rngData2 As Range, N2 As Long
        Set rngData2 = Worksheets("TCD TIT 2").PivotTables(1).PivotFields("nomdate").DataRange
        N2 = rngData.Rows.Count
        Worksheets("CPP TITULAIRE-ST").Cells(891, 2).Resize(N2).Value = rngData2.Value
    End If
End With

ActiveSheet.ListObjects("Tableau19").Range.AutoFilter Field:=1, Criteria1:="<>0"

End Sub

Vous gagneriez aussi à avoir une numérotation progressive dans les tableaux structurés (là on saute de 7 à 12, 10 à 19) ou avoir des noms plus représentatifs et mieux structurés

Si ok -->

Cordialement

Merci Dan pour votre retour et désolé pour ce temps de réponse.

le code fonctionne parfaitement, merci ! pour le nom des tableaux structurés, cela vient du fait que je n'ai pas changé le nom proposé par défaut lors de la création du tableau. Or, j'ai fait pas mal de correction au fur et à mesure de mon travail mais je n'avais pas pensé qu'il était également important d'avoir une numérotation cohérente. je vais reprendre ces points.

Pour ce qui est de la feuille cachée, je comprends votre remarque mais pourtant dans mon fichier "normal", j'ai toujours eux des feuilles cachées et pour autant je n'avais pas ce message d'erreur lié au mot de passe. J'ai contourné la difficulté en passant le mot de passe à chaque fois que j'ai besoin d'écrire dans une feuille protégée (et protection à nouveau quand j'ai fini) car j'ai lu (sur le forum je crois) et cru comprendre que parfois l'instruction

   For Each WS In ThisWorkbook.Worksheets
      WS.Protect "CRF", userinterfaceonly:=True
   Next WS

ne répondait pas parfaitement et pouvait donner lieu à des bugs.

Merci en tout cas pour votre retour et bon dimanche :)

Bonjour à tous

...cru comprendre que parfois l'instruction
   For Each WS In ThisWorkbook.Worksheets
      WS.Protect "CRF", userinterfaceonly:=True
   Next WS

ne répondait pas parfaitement et pouvait donner lieu à des bugs.

Correctement utilisé ne pose aucun problème

Rechercher des sujets similaires à "actualisation tcd"