Protection VBA Proctection Requêtes

Bonjour à tous,

Je tente de protéger par un mot de passe mon fichier, et j'aimerai lors de l’activation de la feuille que ce code me permette d'actualiser mes requêtes Power query et remette la protection du fichier :

Private Sub Worksheet_Activate()

ActiveWorkbook.Unprotect Password:=PWD

ActiveWorkbook.RefreshAll

ActiveWorkbook.Protect Password:=PWD, Structure:=True, Windows:=False

End Sub

J'ai créer un module qui définit le mot de passe comme ceci :

Option Explicit

Public Const PWD As String = "123"

Le code ne fonctionne pas, puisque les requêtes ne s'actualisent pas, et j'ai pourtant désactiver pour chacune d'entre l'actualisation en arrière plan?,

Qui aurait une idée ?,

Merci d'avance pour votre aide,

Cordialement,

Bonjour,

Ce n'est pas le Workbook qui est protégé avec MDP ce sont les Worksheet qu'il faut Unprotect

Activesheet.Unprotect Password:=PWD

Et à la fin vice versa c'est à nouveau la feuille qu'il faut reprotéger.

Bon enfin c'est l'ordre d'idée... Après il faudrait voir les classeur et les requêtes PQ pour voir exact ment comment c'est bitruqué, mais moi j'y comprend comme ça !

A+

Bonjour Galopin01,

J'ai tenté ce code avec l'aide de votre réponse, mais cela ne fonctionne pas, les requêtes ne s'actualise pas, il est indiqué téléchargement non effectué sous chacune d'elles :

Private Sub Worksheet_Activate()

ActiveSheet.Unprotect Password:=PWD

ActiveWorkbook.RefreshAll

ActiveSheet.Protect Password:=PWD

End Sub

Merci d'avance pour votre aide,

Cordialement,

Bonsoir,

Est-ce que la mise à jour des requêtes est autorisée par le biais de "Actualiser tout"?

image

Sinon, j'ai pris pour habitude de mettre à jour mes requêtes en les nommant une par une, style :

Sub maj()
Range("nomdutableau").ListObject.QueryTable.Refresh False
End Sub

Comme ça, no surprise...

Bonjour CousinHub,

Merci pour votre retour, je vais tester et reviens vers vous,

Cordialement,

Bonsoir à tous,

J'ai testé ce code ci dessous, mais il ne fonctionne pas, la requête renvoi comme résultat en jaune sous celle ci " téléchargement non effectué",

Private Sub Worksheet_Activate()

ActiveWorkbook.Unprotect Password:=PWD
ActiveSheet.Unprotect Password:=PWD

Range("REPART_XX").ListObject.QueryTable.Refresh False

ActiveWorkbook.Protect Password:=PWD
ActiveSheet.Protect Password:=PWD

End Sub

Je fais le test du code vba pas a pas détaillé avec l'aide des touches Alt+F8, et la miracle cela fonctionne les lignes sont bien chargées sur la feuille excel ?,

Qui aurait une idée?,

Merci d'avance pour votre aide,

Cordialement,

Bonsoir Massari59264, le Fil,

Les requêtes prennent du temps en fonction du nombre de lignes à actualiser.

Hors, VBA appliquant dans l'ordre les lignes de code il n'attends pas. Il lance la protection.

C'est pour cela que le pas à pas te permet de voir entièrement le téléchargement.

À placer une pause avant la ligne de protection.

Donc

Application.wait Now + timevalue("00:02:00")
'cette valeur de 2 minutes sera à augmentée si elle insuffisante compte tenu des données à actualiser. 

Bonsoir,

La protection de la feuille à l'issue de la requête n'entrave en rien le bon fonctionnement de PQ

Justement, parce qu'il y a la valeur "False" à l'option "Arrière-plan".

Si la requête ne pouvait être chargée en raison d'une protection, le message serait différent ;

image

Le problème semble provenir d'autre chose (à mon avis...)

Bonsoir X Cellus,

Merci tout d'abord pour votre retour, j'ai adapté le code comme ci dessous :

Private Sub Worksheet_Activate()

ActiveWorkbook.Unprotect Password:=PWD
ActiveSheet.Unprotect Password:=PWD

Range("REPART_XX").ListObject.QueryTable.Refresh False

Application.Wait Now + TimeValue("00:02:00")

ActiveWorkbook.Protect Password:=PWD
ActiveSheet.Protect Password:=PWD

End Sub

Mais malgré tout, la requête renvoi toujours comme résultat en jaune sous celle ci " téléchargement non effectué",

Elle s’actualise or code VBA très rapidement, je ne vois pas ce qui peut encore cloché ?,

Merci pour votre aide,

Cordialement,

Bonjour à tous,

Afin de mieux cerner d’où vient le problème, je vous joins un fichier exemple, avec les deux codes suivants :

Sur la feuille Rtat

Private Sub Worksheet_Activate()

ActiveWorkbook.Unprotect Password:=PWD
ActiveSheet.Unprotect Password:=PWD

Range("REPART").ListObject.QueryTable.Refresh False

Application.Wait Now + TimeValue("00:02:00")

ActiveWorkbook.Protect Password:=PWD
ActiveSheet.Protect Password:=PWD

End Sub

Module 1 :

Option Explicit

Public Const PWD As String = "123"

Merci d'avance pour votre aide,

Cordialement,

14test.xlsm (23.14 Ko)

Bonjour,

J'avais pas bien lu le code...

Pourquoi protéger le classeur AVANT l'onglet?

Inverse, pour voir....

Bonsoir Cousinhub,

J'ai testé l'inversion en protégeant en premier la feuille puis le classeur mais cela ne fonctionne pas, il me mets toujours en jaune " téléchargement non effectué", je joins le fichier avec le code modifié,

Merci d'avance pour votre aide,

Cordialement,

14test.xlsm (22.62 Ko)

Re-,

Je confirme que chez moi (xl 2021) cela fonctionne.

J'ai même enlevé le Wait (qui ne sert à rien)

Par contre, je me pose une question...

Pourquoi protéger le classeur?

Une protection de classeur ne se fait pas à ce moment. Elle se fait à l'ouverture par la demande d'un mot de passe pour modification (lecture seule sans mot de passe). Seuls les onglets peuvent être protégés via VBA (mais ce n'est que mon humble avis)

Bonsoir CousinHub,

Ce serait donc lié à ma version Excel 2016 ?,

Non je ne souhaite pas communiquer le mot de passe, et donc à l'ouverture le classeur serait protéger ainsi que l'onglet,

Pour actualiser la requête, je dois en VBA ôter les protections, actualise la requête et re-protéger l'onglet et le classeur,

Si je fait le code VBA pas à pas la requête se charge, si je fais manuellement les étapes la requête se charge également, mais si je le fais par une procédure évènementielle, il me met en jaune sous la requête "téléchargement non effectué"

Merci pour ton aide, mais sans ma version Excel je ne pense pas que tu puisse déterminer la source de mon problème,

Cordialement,

Re-,

Je ne pense pas que la version soit en cause (je n'aurais d'ailleurs pas dû en faire référence...)

Ta vision de la protection du classeur me laisse perplexe...

Pourquoi veux-tu le protéger? (car l'ouverture se fait sans, donc pas par confidentialité)

Et pour ce qui est "je ne veux pas donner le mdp....", tu n'en as pas besoin. Tu ne le détermines que pour la modification. Et tu laisses la possibilité à tout un chacun de pouvoir le lire, mais il ne pourra pas le modifier, car l'enregistrement lui sera refusé...

Donc, essaie déjà en ne laissant que la ligne déprotect de l'onglet, le refresh, puis le protect

Private Sub Worksheet_Activate()
Me.Unprotect Password:=PWD
Range("REPART").ListObject.QueryTable.Refresh False
Me.Protect Password:=PWD
End Sub

Juste pour voir (mais pense à enlever d'abord la protection(?) du classeur

Re-,

mais sans ma version Excel je ne pense pas que tu puisse déterminer la source de mon problème,

Et en complément, je travaille régulièrement pour un organisme qui opère sous cette version.

Je ferai un test vendredi, et te dirai (mais j'ai une légère idée du résultat)

Re Cousinhub,

Alors effectivement dans le fichier fourni, il manquait dans ThisWorkbook ce code qui permet de bloquer l'accés au classeur à l'ouverture :

Private Sub Workbook_Open()
ActiveWorkbook.Protect _
            Password:="123", _
            Structure:=True, _
            Windows:=False
End Sub

D'où ensuite la déprotection lors de la procédure évènementielle,

J'ai déjà testé sans la dé-protection et la re-protection du classeur ce qui me donnait :

Private Sub Worksheet_Activate()

ActiveSheet.Unprotect Password:=PWD

Range("REPART").ListObject.QueryTable.Refresh False

ActiveSheet.Protect Password:=PWD

End Sub

Mais même avec votre code, j'ai toujours le même souci (j'ai bien pensé à déprotéger le classeur) avec télargement npn effectué,

Merci si vous pouvez tester le fichier joint sur Excel 2016 pour voir d'ou pourrait venir ce problème, je tourne en rond lol, j'ai fais des recherches mais je ne trouve rien sur le net,

C'est étrange car si je rajoute des éléments dans la base tableau1, la requête les rajoute lors de l'actualisation mais me mets ce message d'alerte en jaune !

Merci d'avance,

Cordialement,

18test.xlsm (22.86 Ko)

Re-,

Alors, l'info principale, c'est que la requête est à jour....

Mais ne le dit pas.

Effectivement, à mon "travail", j'ai également régulièrement cette "information"...

Et je ne m'en soucie plus, étant donné que les données sont bien à jour

Donc, tout cela me semble un faux problème (comme il existe de fausses alertes virales)

Pour moi, pas de problème de données, juste une information erronée.

Ah, et je reviens sur cette histoire de protection.

A priori, tu ne veux pas empêcher l'ouverture, juste de le modifier.

Donc, ma solution est la plus simple :

Fichier/Enregistrer sous, puis "Options générales"

image

Et dans la boîte de dialogue :

image

Ne rien mettre "pour la lecture"

mettre ton mdp pour la modification

Tu auras le même résultat, sans VBA

Edit : et l'avantage, c'est que si tu veux ouvrir TON fichier, comme tu es le seul à avoir le mdp, il est à toi dès l'ouverture. Tu peux le modifier, enregistrer, fermer...
C'est ce que je fais dans les fichiers que je mets à disposition sur le réseau de l'organisme. Tout le monde peut l'utiliser, maltraiter, défigurer, ils n'y pourront rien...

Bonsoir CousinHub,

Merci pour cette astuce que je ne connaissais pas, je peux clore le sujet grâce à ton aide,

Encore merci pour tout,

Cordialement,

Rechercher des sujets similaires à "protection vba proctection requetes"