VBA · intermédiaire
Empêcher la suppression de colonnes sans protéger la feuille
Protéger la structure d’un tableau partagé, sans mot de passe à conserver ni à transmettre.
- Workbook_SheetChange
- UsedRange.Columns.Count
- Application.Undo
Un TCD ne se met pas à jour tout seul. Il suffit d’oublier un clic pour présenter des chiffres périmés.
Vidéo publiée sur LinkedIn, chargée seulement si vous cliquez dessus. Au clic, LinkedIn peut déposer des traceurs sur votre appareil : en savoir plus.
L’explication
C’est l’erreur la plus fréquente et la plus coûteuse sur un tableau de bord Excel : la source a été complétée, le tableau croisé affiche encore les valeurs de la semaine dernière, et personne ne s’en aperçoit avant la réunion.
Un événement de feuille règle la question, et le choix de l’événement compte autant que le code. Placé sur la feuille qui porte le tableau croisé, l’événement de changement de sélection se déclenche dès qu’on vient regarder le tableau, c’est-à-dire exactement au moment où il doit être à jour, et pas à chaque frappe dans la table source.
La méthode employée mérite elle aussi l’attention. PivotCache.Refresh relit les données de la source, ce qui est indispensable pour voir apparaître les lignes ajoutées. RefreshTable, souvent proposée à sa place, se contente de redessiner le tableau à partir du cache existant : les nouvelles lignes n’apparaîtraient pas.
Pour tout actualiser d’un coup (tableaux croisés, requêtes Power Query et connexions externes), ThisWorkbook.RefreshAll fait le travail en une ligne, au prix d’un rafraîchissement complet.
À savoir Le nom du tableau croisé est écrit en dur dans le code : le renommer dans Excel casse la macro, sans message d’erreur explicite. Et comme toute macro, cela suppose un classeur .xlsm avec les macros autorisées.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Pour actualiser un TCD en particulier
PivotTables("TCD des Primes").PivotCache.Refresh
End Sub
Pour aller plus loin
VBA · intermédiaire
Protéger la structure d’un tableau partagé, sans mot de passe à conserver ni à transmettre.
VBA · intermédiaire
Empêcher qu’une saisie écrase une formule dans un fichier partagé, sans protection de feuille ni mot de passe à gérer.
VBA · débutant
Une ligne de VBA ouvre un nouveau message avec le classeur en pièce jointe, sans avoir à le fermer.
Prendre contact
Votre contexte suffit pour démarrer : nombre de personnes concernées, outils en place, échéance. Je réponds avec une proposition de programme et un devis.