Convertir fichier Excel 2003 protégé en Excel 2007

MisterT

XLDnaute Occasionnel
Bonjour, :)

J'ai un fichier Excel 2003 contenant plusieurs Macros et chaque feuille est protégée ainsi que le projet VBA.

Est-ce qu'il y a un moyen de convertir ce fichier en version 2007 de façon simple sans avoir à ajouter un ActiveSheet.Unprotect ("mot de passe") au début de chaque Macro et un ActiveSheet.Protect ("mot de passe") à la fin de chaque Macro ?

C'est le seul moyen que j'ai trouvé jusqu'à présent et c'est plutôt long car il y a vraiment beaucoup de Macros et je serais étonné qu'il n'y ait pas un moyen plus simple...

Est-ce que quelqu'un accepterait de m'aider, si solution existe bien sûr ?

Merci,
MisterT :)
 

tototiti2008

XLDnaute Barbatruc
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Bonjour MisterT,

Je ne comprend pas bien le rapport entre feuilles protégées et conversion en 2007, peux-tu préciser ?
Pour protéger tes feuilles de manière à ce que le code VBA puisse modifier les feuilles mais pas les utilisateurs, tu peux les protéger (à l'ouverture du classeur par exemple) en utilisant le paramètre UserInterfaceOnly (va voir l'aide sur ma méthode Protect de l'objet Worksheet)
 

MisterT

XLDnaute Occasionnel
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Bonjour tototiti2008, :)

Merci pour ta réponse, c'est gentil !

Le rapport entre feuille protégée et et la conversion en 2007 est le suivant:

Lorsque j'ai converti mon fichier 2003 avec les feuilles qui sont toutes protégées (pour éviter de modifier des valeurs) vers la version 2007, je ne peux plus exécuter aucune Macro, il y apparait un message d'erreur.

Les Macros ne peuvent donc pas s'exécuter sur une feuille protégée avec la version 2007, du moins lorsque ça provient d'un fichier 2003. C'est curieux car tout fonctionne bien avec la version 2003 et les feuilles protégées.

Donc ce que j'ai commencé à faire pour que les Macros fonctionnent dans la version 2007, je mets un Unprotect au début de la Macro puis un Protect à la fin de celle-ci pour remettre la protection sur la feuille.

Pourquoi la conversion de 2003 à 2007 ne se fait pas tout simplement en conservant la protection des feuilles et en exécutant les Macros normalement ?

Pour la protection de toutes les feuilles de mon fichier, j'utilise ce code pour chaque feuille dans le Workbook:
Worksheets("Nom de la Feuille").Protect Password:="mot de passe", UserInterfaceOnly:=True

Je viens d'aller voir ton code (inclus ci-bas) qui est un peu plus élaboré que ce que j'utilise, crois-tu que cela règlerait le problème, je pourrai l'essayer que plus tard ?

Code:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto", UserInterfaceOnly:=True

Merci beaucoup de porter attention à ma requête...
MisterT :)
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Bonjour le fil, salut MisterT

Le problème peut provenir de l'utilisation de Worksheets au lieu de Sheets ;)

Le code fonctionne bien sur les 2 fichiers ci-joint

A+
 

Pièces jointes

  • MisterT_ExempleV2003.xls
    22.5 KB · Affichages: 84
  • MisterT_ExempleV2010.xlsm
    14.1 KB · Affichages: 65
  • MisterT_ExempleV2003.xls
    22.5 KB · Affichages: 119
  • MisterT_ExempleV2010.xlsm
    14.1 KB · Affichages: 85
  • MisterT_ExempleV2003.xls
    22.5 KB · Affichages: 116
  • MisterT_ExempleV2010.xlsm
    14.1 KB · Affichages: 74

MisterT

XLDnaute Occasionnel
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Bonjour tototiti2008 et BrunoM45,

Merci pour vos réponses, c'est très apprécié !!!

J'ai essayé le code de tototiti2008 dans la version 2003 et ça fonctionne comme le code que j'utilisais, mais une fois converti en 2007, le même problème demeure: erreur '1004' qui dit que cette commande (bouton - Macro) ne peut être exécutée sur une feuille protégée...).

Comme j'ai 22 feuilles dans le fichier, le code dans le Workbook contient 22 lignes comme suit:

Worksheets("Nom de la Feuille").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto", UserInterfaceOnly:=True

J'ai aussi essayé Sheets au lieu de Worksheets et rien n'a changé.

BrunoM45, je ne comprends pas totalement l'exemple fourni, pardonne moi... Est-ce que je devrais entrer le code suivant pour les 22 feuilles dans Workbook ?

Private Sub Workbook_Open()
Call Protection(Sheets("Toto"), False, "essai")
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = "essai"
Call Protection(Sheets("Toto"), True, "essai")
End Sub

Est-ce possible de me fournir un exemple pour quelques pages ?

Merci encore pour l'aide apporté !!!

MisterT :)
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Re,

Voici un exemple pour plusieurs feuilles ;)

Il suffit de faire une boucle sur chaque feuille du classeur
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)  Dim Sht As Worksheet
  ' Avant la fermeture du classeur, penser à protéger toutes les feuilles
  For Each Sht In ThisWorkbook.Sheets
    Call Protection(Sht, True, "essai")
  Next Sht
End Sub


Private Sub Workbook_Open()
  Dim Sht As Worksheet
  For Each Sht In ThisWorkbook.Sheets
    Call Protection(Sht, False, "essai")
    Sht.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = "essai - " & Sht.Name
    Call Protection(Sht, True, "essai")
  Next Sht
End Sub

La Sub pour la protection
VB:
Sub Protection(Sht As Worksheet, Flag As Boolean, Mdp As String)
  If Flag Then
    Sht.Protect Password:=Mdp, UserInterfaceOnly:=True
  Else
    Sht.Unprotect Password:=Mdp
  End If
End Sub


A+
 

Pièces jointes

  • MisterT_ExempleV2003.xls
    28.5 KB · Affichages: 72
  • MisterT_ExempleV2010.xlsm
    17.6 KB · Affichages: 112
  • MisterT_ExempleV2003.xls
    28.5 KB · Affichages: 71
  • MisterT_ExempleV2010.xlsm
    17.6 KB · Affichages: 82
  • MisterT_ExempleV2003.xls
    28.5 KB · Affichages: 61
  • MisterT_ExempleV2010.xlsm
    17.6 KB · Affichages: 108

tototiti2008

XLDnaute Barbatruc
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Bonjour MisterT, Bonjour Bruno :),

La méthode de Bruno fonctionne très bien, mais j'ai du mal à comprendre d'où vient ton soucis
J'ai créé un classeur vide en XL2003 avec le code suivant dans un module

Code:
Sub Prot()
Dim Sh As Worksheet
    For Each Sh In ThisWorkbook.Worksheets
        Sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto", Userinterfaceonly:=True
    Next Sh
End Sub

Sub test()
    Range("A1") = "titi"
End Sub

et celui-ci dans thisworkbook

Code:
Private Sub Workbook_Open()
    Prot
End Sub

En XL2003, j'enregistre et je ferme puis je rouvre, tout fonctionne bien
En Xl2007 en mode de compatibilité, tout fonctionne bien
En convertissant au format 2007 xlsm, en rouvrant le classeur, tout fonctionne bien....
Bizarre que ce ne soit pas le cas chez toi...
 

MisterT

XLDnaute Occasionnel
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Bonjour BrunoM45 et tototiti2008, :)

Merci une fois de plus pour vos messages de grande aide ! Vos exemples fonctionnent très bien dans les fichiers fournis ainsi que dans ma version XL2003…

Pour ce qui est de ma fameuse version XL2007, j’ai tenté d’investiguer davantage au meilleur de mes connaissances.

Le message « Vous ne pouvez pas exécuter cette commande sur une feuille protégée. Pour pouvoir l’exécuter, vous devez tout d’abord ôter la protection de la feuille… » apparaît lorsque je clique sur un BOUTON faisant fermer un UserForm qui va déposer différentes valeurs dans différentes feuilles.

Sur le message d'erreur, je clique donc « Débogage », ce qui mène au code suivant avec l’erreur sur la ligne (.ColorIndex = Couleur):

Sub ModifieFormatTexteBouton(NomBouton As String, Couleur As Variant)
ActiveSheet.Shapes(NomBouton).Select
With Selection.Font
If Couleur = 1 Then
.FontStyle = "Gras"
Else
.FontStyle = "Gras italique"
End If
.ColorIndex = Couleur
End With
End Sub

Je rappelle que tout fonctionne avec XL2003.

Pour aller plus loin dans le Débogage, j’enlève la ligne (.ColorIndex = Couleur) et le message d’erreur suivant apparait : « La méthode ‘MinimumScale’ de l’objet ‘Axis’ a échoué ». Je clique « Débogage » et cela mène au code suivant avec l’erreur sur la 4e ligne (.Axes(xlValue).MinimumScale = Sheets("Feuille Calcul").Range("J37").Value) :

Private Sub Worksheet_Activate()
Sheets("Feuille Calcul").ChartObjects(1).Activate
With ActiveChart
.Axes(xlValue).MinimumScale = Sheets("Feuille Calcul").Range("J37").Value
.Axes(xlValue).MaximumScale = Sheets("Feuille Calcul").Range("K37").Value
.Axes(xlCategory).MinimumScale = 0
.Axes(xlCategory).MaximumScale = Sheets("Feuille Calcul").Range("K5").Value + 1
.Axes(xlCategory).MajorUnit = 1
End With
[A1].Activate
End Sub

De ce que je comprends, le problème n’aurait pas à voir avec les feuilles protégées, ce qui m’apparaissait être le cas avec le message d’erreur, alors désolé !!!

Est-ce que certains codes XL2003 ne pourraient plus êtres compatibles avec XL2007 ?

Merci encore et à bientôt,
MisterT :)
 
Dernière édition:

MisterT

XLDnaute Occasionnel
Re : Convertir fichier Excel 2003 protégé en Excel 2007

Bonjour à vous ! :)

Est-ce que vous avez une idée de la raison pour laquelle il y a des messages d'erreur (voir mon message précédent) dans le fichier converti en version XL2007 ?

Ces codes fonctionnent correctement avec XL2003 mais une fois converti en XL2007, il y a ces erreurs. Lorsque je DÉVERROUILLE les feuilles associées à ces codes, tout est OK.

Est-ce que quelqu'un accepte de m'aider sur ce point ?

Merci et bonne journée !
MisterT :)
 

Discussions similaires

Réponses
8
Affichages
185
Réponses
13
Affichages
386

Statistiques des forums

Discussions
312 370
Messages
2 087 679
Membres
103 636
dernier inscrit
SeidoLx