interdire modification format cellule

  • Initiateur de la discussion Initiateur de la discussion Stupidophil
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Stupidophil

XLDnaute Nouveau
Bonjour à tous,

est il possible, dans un classeur partagé et protégé, d'interdire de modifier le format de cellule.
Mais, en fait, je voudrais interdire la modification des bordures de cellule.
Tout le reste doit pouvoir être modifiable (texte, données, couleur, police)... mais j'aimerai assez que les gens qui utilisent ce fichier ne puissent plus changer les bordures des cellules.
Ils utilisent souvent le copier-coller, et forcemment, ça copie aussi les bordues... et ça flingue le visuel du classeur.

Si quelqu'un a une solution, je suis preneur! 🙂
D'avance, un grand merci!
 
Re : interdire modification format cellule

Bonjour Stupidophil ,

On peut mettre ces macros dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
EffaceBordures
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
EffaceBordures
End Sub

Sub EffaceBordures()
Dim i As Byte
For i = 1 To 8
Cells.Borders(i).LineStyle = xlNone
Next
End Sub

Mais bien noter que l'adjonction de bordures par le menu Format ne crée pas d'évènement : il faudra attendre une modification du contenu ou de la sélection des cellules.

A+
 
Re : interdire modification format cellule

Merci Job75 pour cette réponse...
mais j'ai pas super du bien m'expliquer. 😱
Ta macro efface les bordures...
Or, moi, je veux justement conserver les miennes, et empêcher les utilisateurs de les modifier ou de les effacer.
Pour corser le truc, toutes mes cellules n'ont pas les mêmes bordures (des bordures simples, des grasses et des sans bordures).
 
Re : interdire modification format cellule

Re,

Voici une solution, un peu laborieuse.

1) Créer une feuille nommée "Bordures", on la masquera à la fin.

2) Nommer toutes les cellules ayant des bordures : Cell1 Cell2 Cell3 etc...

3) Copier-Coller successivement ces cellules en A1 A2 A3 etc de la feuille "Bordures".

4) Entrer ces macros dans le code de la feuille de calcul :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
CopieBordures
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CopieBordures
End Sub

Sub CopieBordures()
Dim nom As Name, n As String, c As Range, c1 As Range, i As Byte, b As Object
For Each nom In ThisWorkbook.Names
  n = Replace(nom.Name, "Cell", "")
  If IsNumeric(n) Then
    Set c = Range(nom.Name)
    Set c1 = Sheets("Bordures").Cells(CInt(n), 1)
    For i = 1 To 8
      Set b = c1.Borders(i)
      With c.Borders(i)
        .LineStyle = b.LineStyle
        .Weight = b.Weight
        .ColorIndex = b.ColorIndex
      End With
    Next
  End If
Next
End Sub

A+
 
Re : interdire modification format cellule

Bonjour Stupidophile,

(...) mais j'ai une soixantaine de feuilles différentes, dans mon classeur, avec pour chaque feuille environ 70-80 cellules concernées par ce problème de bordures... 😱😱😱

Faut s'armer de courage Stupidophil, ça ne fait jamais que 4800 noms à créer 😀

Heureusement Excel va les créer sans se fatiguer (j'espère) :

Code:
Sub CreerNoms()
Dim w As Worksheet, cel As Range, i As Byte, n As Long
Sheets("Bordures").Range("A:B").Clear
For Each w In Worksheets
  If w.Name <> "Bordures" Then
    For Each cel In w.UsedRange
      For i = 1 To 8
        If cel.Borders(i).LineStyle <> xlNone Then
          n = n + 1
          ThisWorkbook.Names.Add "Cell" & n, cel
          cel.Copy Sheets("Bordures").Range("A" & n)
          Sheets("Bordures").Range("B" & n) = w.Name & "!" & cel.Address
          Exit For
        End If
      Next
    Next
  End If
Next
End Sub

Vu le nombre de noms, il vaudrait peut-être mieux que les cellules se nomment zzz1 zzz2 zzz3 etc au lieu de Cell1 Cell2 Cell3, pour que les autres noms soient placés avant dans la boîte de dialogue Définir un nom.

Modifiez alors les 2 macros concernées.

A+
 
Re : interdire modification format cellule

Encore merci, Job75, de m'aider sur ce problème! C'est super sympa 🙂
Mais j'avais oublié un détail qui complique les choses... et qui me renvoie le message d'erreur suivant:
"erreur execution 1004 : impossible de modifier une cellule fusionnée."
🙁
Eh oui, dans ma mise en page, pour plus de lisibilité et d'ergonomie dans le classeur, j'ai du fusionner beaucoup de cellules...
 
Re : interdire modification format cellule

Re,

Pas testé mais essayez alors cette macro modifiée (en rouge) :

Code:
Sub CopieBordures()
Dim nom As Name, n As String, c As Range, c1 As Range, i As Byte, b As Object
For Each nom In ThisWorkbook.Names
  n = Replace(nom.Name, "Cell", "")
  If IsNumeric(n) Then
    Set c = Range(nom.Name)
    Set c1 = Sheets("Bordures").Cells(CInt(n), 1)
    For i = 1 To 8
      Set b = c1.Borders(i)
      With c.[COLOR="Red"]MergeArea.[/COLOR]Borders(i)
        .LineStyle = b.LineStyle
        .Weight = b.Weight
        .ColorIndex = b.ColorIndex
      End With
    Next
  End If
Next
End Sub

A+
 
Re : interdire modification format cellule

Re,

Ah j'oubliais encore.

Bien sûr avec 60 feuilles, pas question de mettre le code dans les 60.

Il suffit de mettre les macros évènementielles dans ThisWorkbook :

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
If Sh.Name <> "Bordures" Then CopieBordures
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
If Sh.Name <> "Bordures" Then CopieBordures
End Sub

Et mettez les 2 autres macros dans un Module.

A+
 
Re : interdire modification format cellule

Re,

Et puis modifiez également la macro CopieBordures :

Code:
Sub CopieBordures()
Dim nom As Name, n As String, c As Range, c1 As Range, i As Byte, b As Object
For Each nom In ThisWorkbook.Names
  n = Replace(nom.Name, "Cell", "")
  If IsNumeric(n) Then
    Set c = Range(nom.Name)
    [COLOR="Red"]If c.Parent.Name = ActiveSheet.Name Then[/COLOR]
      Set c1 = Sheets("Bordures").Cells(CInt(n), 1)
      For i = 1 To 8
        Set b = c1.Borders(i)
        With c.MergeArea.Borders(i)
          .LineStyle = b.LineStyle
          .Weight = b.Weight
          .ColorIndex = b.ColorIndex
        End With
      Next
    [COLOR="red"]End If[/COLOR]
  End If
Next
End Sub

De cette manière seules les cellules de la feuille active seront traitées à chaque fois.

Je ne sais pas pourquoi vous avez des problèmes, chez moi tout fonctionne bien.

A+
 
Re : interdire modification format cellule

pfffff... j'dois vraiment pô être doué! 🙁
ça ne fonctionne toujours pas...

j'ai essayé sur un classeur vierge.
J'ai copié, dans ThisWorkbook:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
If Sh.Name <> "Bordures" Then CopieBordures
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
If Sh.Name <> "Bordures" Then CopieBordures
End Sub
et dans Module1:
Code:
Sub CopieBordures()
'
' nomCellule Macro
' Macro enregistrée le 10/06/2010 par Phil
'
' Touche de raccourci du clavier: Ctrl+q
'
Dim nom As Name, n As String, c As Range, c1 As Range, i As Byte, b As Object
For Each nom In ThisWorkbook.Names
  n = Replace(nom.Name, "Cell", "")
  If IsNumeric(n) Then
    Set c = Range(nom.Name)
    If c.Parent.Name = ActiveSheet.Name Then
      Set c1 = Sheets("Bordures").Cells(CInt(n), 1)
      For i = 1 To 8
        Set b = c1.Borders(i)
        With c.MergeArea.Borders(i)
          .LineStyle = b.LineStyle
          .Weight = b.Weight
          .ColorIndex = b.ColorIndex
        End With
      Next
    End If
  End If
Next
End Sub
Et il ne se passe rien, les cellules ne sont pas renommées...
 
Re : interdire modification format cellule

Re,

Le problème n'est pas d'être doué ou pas mais de savoir suivre le fil...

Vous avez lu mon post #6 ???

La macro qui s'y trouve doit aussi être mise dans Module1 et c'est elle qui sera lancée par votre raccourci 🙄

C'est elle qui créera les noms !!

D'autre part, j'espère que vous avez bien créé la feuille "Bordures" ???

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

M
Réponses
0
Affichages
1 K
Michel
M
Retour