Amélioration code vba

Garion27 Messages postés 9 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 4 mars 2009 - 25 févr. 2009 à 10:44
Garion27 Messages postés 9 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 4 mars 2009 - 26 févr. 2009 à 22:38
Bonjour à tous,

J'utilise une macro qui permet de vérrouiller les données automatiquement dès que l'on renregistre. Elle fonctionne très bien mais lorsque il y a une fusion dans le documents, il y a une erreur :  
Erreur d'éxécution ' ': Impossible de définir la propiété Locked de la classe Range.

La macro est la suivante :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

For Each c In Sheets("Feuil1").Range("A1:J1000")
If c <> "" Then
ActiveSheet.Unprotect Password:=""
c.Locked = True
ActiveSheet.Protect Password:="", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
ActiveSheet.EnableSelection = xlNoRestrictions
End If
Next c

End Sub

Est-ce quelqu'un à une solution à mon problême ?

Merci d'avance de votre aide. Garion27

5 réponses

Garion27 Messages postés 9 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 4 mars 2009
25 févr. 2009 à 10:57
PS: L'erreur est la 1004.
0
Garion27 Messages postés 9 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 4 mars 2009
25 févr. 2009 à 16:38
Je suis touours bloqué et j'ai chercher sur d'autre sujet et apparamment c'est bien la fusion qui fait tout buguer. Je ne sais pas comment faire pour régler ce problême : peut-être nommé la cellule fusionné pour qu'elle soit pris en compte dans la macro thisworkbook. Mais bon je viens de débuté dans le vba et je ne maitrise pas trop cette progammation.

Merci de votre aide

Garion.
0
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
25 févr. 2009 à 18:55
Bonjour Garion27
Je ne vois qu'une façon de palier au problème, c'est de gérer les erreurs, comme suite :

On Error Resume Next
c.Locked = True
If Err.Number <> 0 Then
    Err.Clear
End If

Est ce suffisant?
Sachant que si les cellules fusionnées ne sont pas protégées, elles peuvent être modifiées, même si la feuille l'est.

Salut
0
r1r2 Messages postés 22 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 31 mars 2010
26 févr. 2009 à 10:22
Bonjour,

L'erreur vient peut-etre de la presence de cellules fusionnees.

Voici un exemple de code qui a des chances de fonctionner si c'est bien la cause de ton probleme :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

ActiveSheet.Unprotect Password:=""
For Each c In Sheets("Feuil1").Range("A1:J1000")
If c <> "" Then
If c.MergeCells Then
c.MergeArea.Locked = True
Else
c.Locked = True
End If
End If
Next
ActiveSheet.Protect Password:="", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
ActiveSheet.EnableSelection = xlNoRestrictions
End Sub

Au passage, est-ce la feuille active ou "Feuil1" que tu veux traiter? Si c'est un autre onglet qui est actif que "Feuil1" lors de la sauvegarde, tu risques d'avoir des problemes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Garion27 Messages postés 9 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 4 mars 2009
26 févr. 2009 à 22:38
Merci beaucoup r1r2, sa fonctionne très bien. Pour répondre à ta question, pour l'instant c'est la Feuil1 uniquement qui est gérer par la macro Mais j'avoue que je sais pas comment la mettre pour toutes les feuilles. Sinon est-ce que tu sais si dans la partie ou ont autorise les modifications des cellules vérrouillé, si c'est possible de rajouter la possibilité de fusionner les cellules d'à coter si elle est ou sont vide.

Merci encore pour ton aide.

Garion27
0
Rejoignez-nous