Ma macro marche mais pas via un bouton quand la feuille est protégée

Bonjour,

J'ai crée une macro que j'ai affecté à une forme (=un bouton) pour enregistrer chaque cellules non verrouillées d'une plage de cellules situé sur ma Feuil1, dans un tableau situé sur une autre feuille (en gros) et les nouveaux enregistrements s'incrémentent.

Le problème est que je tiens à protéger les feuilles et que ma macro marche tout le temps SAUF quand on clique sur le bouton et que les deux feuilles sont protégées. Car oui, elle marche : pas à pas et quand on l'Exécute et le bouton lui marche quand rien n'est protégé ou quand au moins une des deux feuilles n'est pas protégé.

Excel ne m'indique jamais aucune erreur et je n'ai trouvé aucune réponse sur Internet, alors la réponse est peut être évidente mais il me faut la connaître et la comprendre. J'ai essayé de trouver le problème à ma sauce, est je pense fortement que c'est au niveau de ma boucle, l'utilisation de ma variable "C" DANS la boucle.

Si on pouvait m'aider s'il vous plait, merci d'avance :)

Voici mon code et mon fichier :

14fichier.xlsm (20.08 Ko)
Sub Enregistrer()
Dim C As Range, X As Integer
Dim NomFeuille As String
Dim Ligne As Integer
NomFeuille = ActiveSheet.Name
Set f = Sheets(NomFeuille)
Set bd = Sheets("Bd_" & NomFeuille)

    'déprotéger feuille
    bd.Unprotect
    f.Unprotect

        X = 1
        'la ligne est égal à la fin du tableau, pour incrémenter les données
        Ligne = bd.Range("b1").CurrentRegion.Rows.Count + 1
        For Each C In Range("E1:F3")
        'PROBLEME
        If C.Locked = False Then
        bd.Cells(Ligne, X) = C
        'PROBLEME
        X = X + 1
        End If
        Next

    'protéger feuille
    bd.Protect
    f.Protect

End Sub

Hello,

Sub Enregistrer()
Dim C As Range, X As Integer
Dim NomFeuille As String
Dim Ligne As Integer
NomFeuille = ActiveSheet.Name
Set f = Sheets(NomFeuille)
Set bd = Sheets("Bd_" & NomFeuille)

    'déprotéger feuille
    bd.Unprotect
    f.Unprotect
f.activate
        X = 1
        'la ligne est égal à la fin du tableau, pour incrémenter les données
        Ligne = bd.Range("b1").CurrentRegion.Rows.Count + 1
        For Each C In Range("E1:F3")
        'PROBLEME
        If C.Locked = False Then
        bd.Cells(Ligne, X) = C
        'PROBLEME
        X = X + 1
        End If
        Next

    'protéger feuille
    bd.Protect
    f.Protect

End Sub

Merci beaucoup Rag !! C'est genre ... "simple" mais j'aurais jamais trouvé MERCI !! <3

Suffisait un (mafeuille).activate, c'est génial.

Bonjour,

NomFeuille = ActiveSheet.Name
Set f = Sheets(NomFeuille)

pourquoi ce chemin tortueux ?
Set f = ActiveSheet
suffit.

Il faut éviter les .Activate et .Select consommateurs de ressources.
Tu peux te servir de ta variable :
For Each C In f.Range("E1:F3")

Quelque chose m'échappe quand même. Vu que f est ActiveSheet, son .Activate ne change rien ?!?
Je dois rater qq chose...
eric

Hello eric,

Oui je me suis posé la même question... l'explication doit venir du fait de protéger/déprotéger une feuille car quand on lance le code sans .Activate, le programme active la feuille bd en fin de programme alors qu' aucun .activate n'est indiqué ... (je n'étais bien entendu pas dessus avant l'exécution du code)

Du coup j'ai charger le fichier pour voir cette curiosité.
En fait rien de tout cela chez moi (2019)
Feuil1 reste active...
eric

Rechercher des sujets similaires à "macro marche pas via bouton quand feuille protegee"