Autres Code VBA pour protéger le format d’une cellule, mais autoriser le coper/coller

tamatave33

XLDnaute Occasionnel
Bonjour le forum,

Dans une feuille Excel, qui est utilisée par plusieurs personnes, mais qui ne connaissent pas forcément la commande collage spécial tout sauf la bordure, je voudrais savoir s’il est possible d’avoir un code VBA qui protège uniquement le format de la cellule, notamment les bordures. Les cellules concernées par ce problème sont (EH186:EK205)

La feuille est protégée, mais si je protège ces cellules (EH186:EK205), je ne peux plus faire de copier/coller.

Merci pour votre aide
 
Solution
Bonjour Tatamave33, le forum

il ne faut pas te plaindre si le fonctionnement est celui que tu as demandé 🤪😅😂🤣
plusieurs solutions à ton problème:
1-tu ouvres le classeur sans activer les macros et tu pourras modifier ce que tu veux
2-tu actives un exit sub pour pouvoir faire ta modif
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Exit Sub
If Not Intersect(Target, Range("EH186:EK205")) Is Nothing Then
    Application.EnableEvents = False
    Range("EM186:EP205").Copy
    Range("EH186:EK205").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Target.Select
    Application.EnableEvents = True
End If
End Sub
tu le désactives ensuite pour retrouver...

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

une proposition avec une événementielle qui remet les bons formats après tout changement en EH186:EK205.
Les formats mémorisés sont stockés en EH186:EK205, colonnes masquées.

Bien cordialement, @+
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("EH186:EK205")) Is Nothing Then
    Application.EnableEvents = False
    Range("EM186:EP205").Copy
    Range("EH186:EK205").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Target.Select
    Application.EnableEvents = True
End If
End Sub
 

Pièces jointes

  • Exemple - Copie.xlsm
    106.1 KB · Affichages: 10

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
De rien, avec le fichier exemple, cela ne m'a pris que deux minutes, c'est pour cela que c'est important d'en fournir un si tu veux des réponses, cela simplifie la tache des contributeurs et leur évite de perdre du temps à construire eux même un fichier test pour au final faire un code qui ne correspondra pas forcément à ta demande, les données étant différentes. C'est toute la logique de ma signature et parfois, construire le fichier test prend plus de temps que de coder la solution.
Et le merci est aussi important, c'est souvent la seule récompense des contributeurs.

Je te souhaite une bonne journée, @+
 

tamatave33

XLDnaute Occasionnel
Bonjour Yeahou, le forum,
Je ne sais pas s'il faut ouvrir une nouvelle discussion, mais je reviens sur mon problème.
J'ai un soucis : lorsque je veux copier les propriétés d'une des cellules de la colonne EF, et les coller dans une des cellules du tableau EH186:EK205, je ne peux plus.
Les cellules du tableau EH186:EK205 ne changent pas.
Merci pour ton aide
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Tatamave33, le forum

il ne faut pas te plaindre si le fonctionnement est celui que tu as demandé 🤪😅😂🤣
plusieurs solutions à ton problème:
1-tu ouvres le classeur sans activer les macros et tu pourras modifier ce que tu veux
2-tu actives un exit sub pour pouvoir faire ta modif
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Exit Sub
If Not Intersect(Target, Range("EH186:EK205")) Is Nothing Then
    Application.EnableEvents = False
    Range("EM186:EP205").Copy
    Range("EH186:EK205").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Target.Select
    Application.EnableEvents = True
End If
End Sub
tu le désactives ensuite pour retrouver le fonctionnement
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
' Exit Sub
If Not Intersect(Target, Range("EH186:EK205")) Is Nothing Then
    Application.EnableEvents = False
    Range("EM186:EP205").Copy
    Range("EH186:EK205").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Target.Select
    Application.EnableEvents = True
End If
End Sub
3-tu autorises les modifications pour toi seul en codant au début de la macro change
If Environ("username") = "tamatave33" Then Exit Sub' la tu mets bien sur le nom renvoyé par Username
tu peux aussi utiliser cette fonction pour être plus précis sur le nom utilisateur
if Trouver_Utilisateur = " tes noms et prénoms tels que renvoyés par la fonction" Then Exit Sub
https://www.excel-downloads.com/threads/trouver_utilisateur.20056275/
sans cela, le sujet étant lié, il valait mieux rester dans le même fil.

Bien cordialement, @+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA