Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

BaK

[Résolu]Visual Basic pour Excel

Messages recommandés

Hello!

 

Voilà un truc tout bête qui me prend la tête depuis un moment! :P

 

Sous Office 97 en Utilisateur simple:

 

1) J'ai une feuille Excel protégée (Outils/Protection/Protéger la feuille).

2) Sur cette feuille un bouton qui colorie une plage de cellules

 

Logiquement, le bouton ne fais rien tant que la feuille est protégée. Il faut donc la déprotéger, colorier et la reprotéger.

 

Private Sub CommandButton1_Click()
'Unprotect Sheet1
   Worksheets("Feuil1").Unprotect Password:="test"

   'Calculate the range A1:A5 on Sheet1
   Range("F5:J18").Select
   With Selection.Interior
	  .ColorIndex = 33
	  .Pattern = xlSolid
   End With

'Protect Sheet1
   Worksheets("Feuil1").Protect Password:="test"

End Sub

 

Or tout ce que j'obtient c'est un message d'erreur me disant:

Erreur d'exécution '1004'

La méthode Unprotect de la classe Worksheet a échoué.

 

Et le débugger s'arrête à la première ligne.

 

Voilà ce que dit Microsoft pour cette erreur 1004:

En règle générale, ces erreurs sont dues à l'échec de l'initialisation de VBA en raison d'autorisations insuffisantes ou de composants VBA non inscrits dans le Registre ; ces deux problèmes sont courants lorsqu'un utilisateur exécute du code à partir d'un compte sans profil utilisateur (problème 1) et que le jeton d'utilisateur ne contient pas l'identificateur de sécurité (SID) interactif (problème 2).

 

HELP! :P

Modifié par BaK

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est quoi le nom de ta feuille?

 

par defaut a l'ouverture d'un classeur tu as

Feuil1(feuil1)

Feuil2(feuil2)

Feuil3(feuil3)

 

attention au amalgammes entre le nom et le N° de feuille.

l'erreur que tu as ressemble a une erreur de nommage de feuille.

 

en clair : tu appelles une fonction de "dévérouillage" (unprotect) sur une feuille inexistante.

 

cela se produit aussi si le classeur actif n'est pas le bon, puisques tu ne précise pas le classeur appelé.

 

A+

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Scuny, merci pour ta réponse!

 

Ma feuille se nomme bien Feuil1, identique au nom donné dans le code.

Et je n'ai qu'un classeur d'ouvert.

 

Je pige pas...

 

Aurais-tu un autre code à me proposer?

Partager ce message


Lien à poster
Partager sur d’autres sites

as tu les droits sur ce classeurs?

est tu en admin / user ou guest (compte e loggin windows)

 

j'explique:

 

- si ton classeur est un classeur partagé seul le 1er utilisateur actif pourra utiliser unprotect le deuxieme (droit de lecture seul) ne peut pas. de plus il me semble que tu ne peux pas utiliser cette methode si un autre user est en lecture seul (cas du jeton) que tu ais les droits ou non.

 

- si tu essaie une méthode unprotect depuis un compte guest (invité) de windows cette méthode ne marchera pas, car elle fait appel au registre en écriture (interdit pour les comptes guest)

 

donc est tu dans un de ces cas ?

 

A+

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai les droits sur le classeur, qui n'est pas partagé, ni utilisé par quelqu'un d'autre.

 

Par contre je suis loggé en Utilisateur simple. :P

Le problème doit venir de là, écriture dans le registre interdite! :P

 

Merci pour ton aide, je vais voir s'il y a un moyen pour contourner le problème!

 

++

Partager ce message


Lien à poster
Partager sur d’autres sites

excuse moi!

 

je crois bien que je deviens stupide.

je relis le debut de ton post, et la lumière revient! :P

 

 

il y'a une propriété de protect qui est "userinterfaceonly".

 

il faut pour que ce soit efficace que tu fasse la protection de ton classeur avec cette méthode en vba.

 

ce qui aura pour conséquence que la feuille est protégé depuis l'interface excel mais qu'une macro vba pourra faire des modifs sur la feuille protégée.

 

 

voila la syntaxe.

 

Feuil1.Protect password:="coucou", userinterfaceonly:=True

 

voili voilou.

 

A+

Modifié par scuny

Partager ce message


Lien à poster
Partager sur d’autres sites

YES!!!

 

Merci Scuny! :P

 

Private Sub Workbook_Open()
Feuil1.Protect password:="", userinterfaceonly:=True
End Sub

 

Et ça marche!!!

 

/me trop content! :P

 

++

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×