XL 2016 Problème de synchronisation de plusieurs TCD sur page protégée

scoubidou35

XLDnaute Occasionnel
Bonjour à tous,

J'ai cherché et essayé toute l'après midi à trouver comment synchroniser les TCD de l'onglet FICHES DE CULTURE.
J'ai mis une ligne dans la table sur l'onglet JOURNAL DES EVENEMENTS pour voir si la synchro se fait mais rien ne se passe et j'ai un message qui me dit que la synchro est impossible car feuille protégé alors que j'ai mis du code unprotect et protect partout et ca ne fonctionne toujours pas.
 

Pièces jointes

  • FICHES CULTURE protection2.xlsm
    268.5 KB · Affichages: 10

chris

XLDnaute Barbatruc
Bonjour

Je n'ai pas de message quad j'actualise tout

En revanche pour que les nouvelle observations soient intégrées automatiquement il faut modifier le paramètres paramètres du champ (je n'ai pas activé les macros)

A priori tous les TCD sont sur l'onglet FICHES DE CULTURE

C'est le seul à déprotéger

1625989236554.png
 

scoubidou35

XLDnaute Occasionnel
Bonjour

Je n'ai pas de message quad j'actualise tout

En revanche pour que les nouvelle observations soient intégrées automatiquement il faut modifier le paramètres paramètres du champ (je n'ai pas activé les macros)

A priori tous les TCD sont sur l'onglet FICHES DE CULTURE

C'est le seul à déprotéger

Regarde la pièce jointe 1110737
Bonjour chris,
J'ai apporté la petite rectification dans le fichier et je me suis aperçu que j'avais oublié de réactiver les codes protect "" dans chacune des feuilles du classeur et j'ai mis 2 lignes test dans "journal des évênements" et pas d'actualisation (malgré le message qui me dit le contraire)
 

Pièces jointes

  • FICHES CULTURE protection3.xlsm
    268.7 KB · Affichages: 5

scoubidou35

XLDnaute Occasionnel
Bonjour chris
Voici le fichier corrigé mais cela n'a rien changé. Si vous ajoutez des données dans les lignes des tableaux "journal des évenements", "traitement", fertilisation et amendement" et "suivi de récolte"
et que vous cliquez sur l'icone
1626006490848.png
vous obtenez le message de 'MAJ effectué' mais en fait rien et ensuite un message de microsoft pour me dire que l'actualisation n'est pas possible sur feuille protégée.
 

Pièces jointes

  • FICHES CULTURE protection4.xlsm
    267.2 KB · Affichages: 3

chris

XLDnaute Barbatruc
RE

Dans la mesure où tous les TCD sont dans la même feuille modifie tes 2 procédures ainsi
VB:
Option Base 1
Private Sub Workbook_SheetPivotTableUpdate(ByVal sh As Object, ByVal Target As PivotTable)
Dim Ninsert&, espace&, a(), i&, col%, j&, z&

Ninsert = 50 'à adapter
Application.ScreenUpdating = False

ReDim a(1 To sh.PivotTables.Count, 3)

'Condition ou Liste des onglets non concernés
If UBound(a, 1) = 1 Then Exit Sub 'il y a seulement un TCD dans la feuille
If sh.Name = "ACHATS" Then Exit Sub
If sh.Name = "ANALYSE BUDGET" Then Exit Sub

'Espacement TCD
With sh

    .Cells.EntireRow.Hidden = False
    For i = 1 To UBound(a, 1)
        a(i, 1) = .PivotTables(i).TableRange2.Row
        a(i, 2) = .PivotTables(i).TableRange2.Rows.Count
    Next
    Call tri(a(), 1, UBound(a, 1), 2, 1)
     
    'Insertion ou suppression de lignes---
    For i = 1 To UBound(a, 1) - 1
        espace = a(i + 1, 1) - (a(i, 1) + a(i, 2))
        If espace < Ninsert Then a(i, 3) = Ninsert - espace Else a(i, 3) = Ninsert - espace
    Next
    For i = UBound(a, 1) To 2 Step -1
        z = a(i - 1, 3)
            If z > 0 Then
            .Rows(a(i - 1, 1) + a(i - 1, 2)).Resize(z).Insert
            ElseIf z < 0 Then
            z = -z
            .Rows(a(i - 1, 1) + a(i - 1, 2)).Resize(z).EntireRow.Delete
        End If
       
        'Masquage
        .Rows(a(i - 1, 1) + a(i - 1, 2) & ":" & a(i, 1) + a(i - 1, 3) - 7).EntireRow.Hidden = True
    Next

    NB_TCD2 = NB_TCD2 + 1

    If NB_TCD2 = NB_TCD Then
   
        MsgBox "Actualisation terminée !", vbInformation, "INFORMATION GardenManager"
       
        .Protect "", DrawingObjects:=True, Contents:=True, Scenarios:= _
                True, UserInterfaceOnly:=True, AllowFormattingRows:=False, AllowInsertingColumns:=False, _
                AllowInsertingRows:=False, AllowInsertingHyperlinks:=True, _
                AllowDeletingColumns:=False, AllowDeletingRows:=False, AllowSorting:=True, _
                AllowFiltering:=True, AllowUsingPivotTables:=True
    End If

End With

End Sub
Code:
Public NB_TCD As Integer, NB_TCD2 As Integer
Sub Actualisation_ALL_TCD()

NB_TCD = ActiveSheet.PivotTables.Count
NB_TCD2 = 0

ActiveSheet.Unprotect
Application.ScreenUpdating = False
ActiveWorkbook.RefreshAll

End Sub
en remontant cette Sub en début de module
 

scoubidou35

XLDnaute Occasionnel
Merci beaucoup chris,
Je viens de copier les codes comme vous me l'avez indiqué et ça fonctionne je n'ai plus aucun de message d'alerte microsoft. Merci beaucoup,
Par contre pourriez vous m'expliqué le problème car j'ai regardé le code et j'ai donc vu que j'avais pas placé le code protect au bon endroit (pas le bon sub) et j'ai vu votre code avec les TCD2 = 0 etc.... mais je comprends pas et j'aimerai comprendre mon erreur. Merci encore pour le temps et le travail que vous me consacrez.
 

chris

XLDnaute Barbatruc
RE

Le refresh all prend du temps et du coup la protection arrive avant la fin de la sub événementielle ce qui bloque

Les 2 compteurs servent à vérifier que tous les TCD ont bien été traités avant de protéger la feuille

A noter que les codes de protection sur chaque feuille me paraissent peu utiles puisqu'ils se désactivent automatiquement
 

scoubidou35

XLDnaute Occasionnel
RE

Le refresh all prend du temps et du coup la protection arrive avant la fin de la sub événementielle ce qui bloque

Les 2 compteurs servent à vérifier que tous les TCD ont bien été traités avant de protéger la feuille

A noter que les codes de protection sur chaque feuille me paraissent peu utiles puisqu'ils se désactivent automatiquement
Merci beaucoup pour les explications et donc TCD2=0 c'est pour indiquer que le TCD2 est le TCD de départ par rapport aux segments c'est bien cela?
Sinon pour les codes de protections sur chaque feuille cela me permet de déprotéger juste le temps de l'exécution du code après la page se retrouve protégée contre les modifications des formules...non?
 

Discussions similaires