Error 1004 - Feuille protégée

Bonjour à tous,

Je rencontre actuellement un problème sur l'un de mes modules VBA.

Je cherche à réinitialiser une feuille excel par le biais d'un bouton en utilisant le code suivant :

Sub Bouton3_Réinitialiser()

If MsgBox("Etes-vous certain de vouloir réinitialiser la base de donnée?", vbYesNo, "Demande de confirmation") = vbYes Then

ThisWorkbook.Unprotect

ActiveSheet.Range("A2,F1000").ClearContents

ActiveSheet.Range("A2,F1000").ClearFormats

ThisWorkbook.Protect

Else

End If

End Sub

Malheureusement j'ai systématiquement un message d'erreur (1004 : cellule sur feuille protégée, ôter protection pour modification).

J'ai essayé ce même bouton en désactivant la feuille concernée mais l'erreur apparaît toujours.

Je serais ravi si une âme charitable pouvait m'éclairer à ce sujet

bonjour et bienvenu

ne pas confondre la protection du classeur (thisworkbook) et la protection de la feuille (sheet) qui est autre chose :

toi il te faut deproteger la feuille :

sur la feuille active

ActiveSheet.Unprotect

en donnant le nom de la feuille a déproteger

Sheets("Feuille").Unprotect

fred

Bonjour Fred et merci pour ton accueil,

J'ai essayé ta solution mais le message d'erreur revient toujours.

J'ai d'autres modules et userform que j'utilise sur cette feuille mais ils ne sont activables que si d'autres boutons sont enclenchés par l'utilisateur.

Il y a peut être une interférence avec les autres modules?


Fred,

J'ai réessayé ta technique ... je m'étais trompé, elle marche ^^

Par contre les Range à "nettoyer" ne s'effacent pas.

Dans tous les cas merci beaucoup pour ta réponse rapide et utile.

QUe veux-tu dire part :

Par contre les Range à "nettoyer" ne s'effacent pas.

joint un fichier en supprimant les données sensibles qui peuvent etre présentes

tuto pour joindre un fichier : https://www.youtube.com/watch?v=EbNYLzTz5wM

fred

Fred,

Je te joins le classeur complet :

14oao.xlsm (83.24 Ko)

Je suis novice en VBA et le code risque d'être indigeste, voir illisible (patchwork de code récupéré ici et la sur le net et adapté librement à ma sauce).

Chaque problème corrigé en apporte dix autres et la version ci-dessus est de ce fait sérieusement bancale.

En deux mots : Bon courage ....

bon j'ai regardé rapidement ton code

sans savoir ce que tu cherche vraiment a faire difficile de t'aider ...

mais quelques remarques

toujours commencé un module par

option explicit 

ce qui t'oblige a déclaré les variables

mais voici ton code pour réinitialiser, modifier un peu mais avec des interrogations

Option Explicit

Sub Bouton3_Réinitialiser()
Dim chemin As String
Dim derniereLigne As Integer

derniereLigne = Range("A" & Rows.Count).End(xlUp).Row
If derniereLigne <> 1 Then 'si des données sont présentes

    If MsgBox("Etes-vous certain de vouloir réinitialiser la base de donnée?", vbYesNo, "Demande de confirmation") = vbYes Then
        With Sheets("OAF")
            .Unprotect
            .Range("A2:F" & derniereLigne).ClearFormats
            .Range("A2:F" & derniereLigne).ClearContents
            .Range("A2:F2").Interior.Color = RGB(0, 32, 96) 'pourquoi mettre une couleur sur la ligne 2 ???
            .Protect
        End With
        chemin = ThisWorkbook.path & "\BDD.xlsx"
        If Dir(chemin) <> "" Then Kill (chemin)
    End If
End If
End Sub

Bonjour Fred,

Merci pour ton aide, ton code m'a bien fait avancer.

Je rencontre maintenant des difficultés avec mes boutons.

Je souhaiterai déplacer le bouton "nouveau" (feuille OAF) d'une case vers le bas à chaque nouvelle ligne créée dans ma base de donnée.

J'ai tenté le code suivant :

With Sheets("OAF").Shapes("nouveau")

.Top = Cells(derniereLigne + 1, 6).Top

.Left = Cells(derniereLigne + 1, 6).Left

.Width = Cells(derniereLigne + 1, 6).Width

.Height = Cells(derniereLigne + 1, 6).Height

End With

Un message d'erreur m'indique que l'élément portant ce nom est introuvable.

J'ai essayé en modifiant le nom de l'objet (ex : "Nouveau"), mais l'erreur est toujours la ....

Que dois-je faire?

bonjour

voici une petite fonction que j'utilisais pour positionner un shape en argument il faut passer le nom du shape et la cellule par rapport a laquelle il faut le placer exemple "H2"

Sub execution_position(nom As String, cellule As String)
    With ActiveSheet.Shapes(nom)
        .Top = Range(cellule).Top 
        .Left = Range(cellule).Left 
    End With
End Sub

donc pour l'appel de cette fonction cela devrait ressemblé pour toi :

 execution_position "nouveau", "H"&derniereLigne+1 

'si c'est bien sur la colonne H

a priori tu n'as pas besoin de redéfinir a chaque fois la hauteur et la largeur du bouton

fred

Bonjour Fred,

Je ne repasse que maintenant mais je tenais à te remercier pour ton aide et ta rapidité d'intervention.

Tes conseils m'ont beaucoup fait avancer, a tel point que VBA n'a plus de secret pour moi. 8)

Albe

Rechercher des sujets similaires à "error 1004 feuille protegee"