VBA: Infos sur la formule Protect

GuillaumA

XLDnaute Occasionnel
Bonjour à tous,
J'utilise actuellement la formule suivante dans plusieurs de mes macros:
Code:
Sub ...()
Sheets("Feuil1).Unprotect
.....
.....
.....
Sheets("Feuil1").Protect
End Sub

Les conditions de mes Protections sont à la base:
- Sélectionner les cellules vérouillées
- Sélectionner les cellules dévérouillées
- Modifier les objets

Seulement voila, à chaque fois que la macro effectue sa déprotection et protection, seul les éléments de base:
- Sélectionner les cellules vérouillées
- Sélectionner les cellules dévérouillées
Survivent...

Exit le "Modifier les objets" qui rend incapable l'utilisateur de cliquer sur les boutons de formulaire. Dans mon cas, je ne peut utiliser les boutons de commandes (ces derniers marche malgré les protections) et je dois donc trouver un moyen pour que la macro remette le "Modifier les objets"

Ma question est donc: Existe t'il une variable intégrable sous la formule Sheets("Feuil1").Protect afin que mes conditions soient pris en compte ?


Merci de votre considération et bonne journée,

Guillaume
 

ERIC S

XLDnaute Barbatruc
Re : VBA: Infos sur la formule Protect

Bonjour

dans son immense bonté Excel a tout prévu, la syntaxe pour protect est :

expression.Protect(MotDePasse, ObjetsDessin, Contenu, Scénarios, InterfaceUtilisateurUniquement, AutoriserCellulesMiseEnForme, AutoriserColonnesMiseEnForme, AutoriserLignesMiseEnForme, AutoriserInsertionColonnes, AutoriserInsertionLignes, AutoriserInsertionLiensHypertexte, AutoriserSuppressionColonnes, AutoriserSuppressionLignes, AutoriserTri, AutoriserFiltrage, AutoriserUtilisationTableauxCroisésDynamiques)

fais un tour dans l'aide vba, ou sinon, utilise l'enregistreur de macro.
 

GuillaumA

XLDnaute Occasionnel
Re : VBA: Infos sur la formule Protect

Mmmm et bien... Je viens de tester vos deux méthodes sommes toute très logique et... Ça ne marche pas. Il ne souhaite pas se rappeler le fait que je veux que l'utilisateur ai la possibilité de modifier les objets. Comme s'il m'en voulais....

Ma macro complète est:
Code:
Sub SynthesisGathered()

Dim myRange As Range
Dim searchRange As Range
Dim cmd

Sheets("Synthesis").Unprotect
Range("D3:GU19").ClearContents

For i = 4 To 203
    Columns(i).Hidden = False
Next i

If Sheets("Home").Range("E16") = Sheets("Home").Range("B35") Then
    With Sheets("ExistingFiles"): Set searchRange = .Range("D2").Resize(.Range("D65536").End(xlUp).Row - 1, 1): End With
Else
    Set searchRange = Range("D2").Resize(1, Range("GU2").End(xlToLeft).Column - 4)
End If

Dim cpt As Long
cpt = -2
For Each cell In searchRange
        If cell <> "" Then
            cpt = cpt + 2
            doc = "'" & ActiveWorkbook.Path & "\[" & cell & ".xls]KFdb'!"
            Set myRange = Range("D2").Offset(0, cpt)
            
            For i = 1 To 17
                myRange.Offset(i, 0) = ExecuteExcel4Macro(doc & "R" & i & "C1")
                myRange.Offset(i, 1) = ExecuteExcel4Macro(doc & "R" & i & "C2")
            Next i
            
        End If
    Next cell

Dim l, t, w, h
For Each sh In Sheets("Synthesis").Shapes
    If Left(sh.Name, Len("BTT")) = "BTT" Then sh.Delete
Next sh

For i = 4 To 203
   Columns(i).Hidden = Cells(4, i) = ""
    
    If Cells(3, i) <> "" Then
        l = Cells(3, i).Left + 1
        t = Cells(3, i).Top
        h = Cells(3, i).Height
        w = Cells(3, i).Width + Cells(3, i + 1).Width - 2
        
        Set cmd = Sheets("Synthesis").Buttons.Add(l, t, w, h)
        cmd.Name = "BTT" & i
        cmd.OnAction = "'BoutonAction """ & i & """'"

        cmd.Characters.Text = Cells(3, i)
    End If
Next i
Sheets("Synthesis").Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
End Sub

Cette dernière va chercher les noms des feuilles présentes dans la feuille ExistingFiles afin de récupérer dans chacune d'entre elle les valeurs des colonnes C1 et C2 pour les lignes 1 à 17 et les implémentes dans myRange une ligne en dessous.

Je ne vois pas ou est l'erreur. Et si erreur il y a, cela ne peut seulement venir que de la formule Protect....

Guillaume
 

GuillaumA

XLDnaute Occasionnel
Re : VBA: Infos sur la formule Protect

Une autre solution serait peut être d'établir que les boutons créés ne doivent pas être vérouillés à leurs création à ce niveau du code:
Code:
Set cmd = Sheets("VL").Buttons.Add(l, t, w, h)
        cmd.Name = "BTTb" & i
        cmd.OnAction = "'BoutonAction3 """ & i & """'"

        cmd.Characters.Text = Cells(7, i)

L'option existe dans leurs propriétés, on doit certainement pouvoir le paramétrer comme "OFF" sous VBA non ?
cmd.Unlock ?
 

GuillaumA

XLDnaute Occasionnel
Re : VBA: Infos sur la formule Protect

Ce sont des boutons de formulaires et non de commande. Dans les deux cas, la macro marche, mais ne s'applique pas au fichier... C'est à n'y rien comprendre.
Tous les boutons se nommes BTT1, BTT2, BTT3, ...
A noter que sur la même feuilles, j'emploie 5 images en tant que bouton que j'ai paramétrés manuellement pour ne pas être vérouillées. En effet, c'est dernière restent toujours les mêmes, alors que les boutons de formulaires sont créés automatiquement par la macro et ne peuvent donc être paramétrés manuellement.


Amicalement,
Guillaume
 

tototiti2008

XLDnaute Barbatruc
Re : VBA: Infos sur la formule Protect

Re,

sans vouloir insister, ce code là me crée un bouton et protège la feuille, et le bouton est modifiable chez moi
peux-tu essayer dans un nouveau classeur pour voir ?

Code:
    Set cmd = ActiveSheet.Buttons.Add(71.25, 77.25, 72, 72)
    cmd.Characters.Text = "Bouton 1"
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
 

Discussions similaires

Réponses
2
Affichages
113

Statistiques des forums

Discussions
312 196
Messages
2 086 099
Membres
103 116
dernier inscrit
kutobi87