[VBA]Comment emêcher le copier coller dans certaines colonnes d'excel ?

Signaler
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012
-
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012
-
Je voudrais empêcher le copier coller dans quelques colonnes d'excel tout en permettant l'utilisateur de pouvoir écrire dans ces colonnes !!
Est ce possible ?
Avez vous une idée?
Je n'ai malheureusement pas beaucoup de connaissances en VBA …
Merci !!

36 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

pour commencer tu n'es pas dans le bon thème ! Pour le VBA il existe un thème dédié :

Accueil > Forum > Visual Basic 6 > Langages dérivés > VBA

Bon comme le sujet m’intéresse je t'ai mâché le boulot

Ce qui suit interdit toute les méthodes de copier/coller/couper/collage spécial,
depuis l'interface excel.

Code à coller dans le code de "Thisworkbook"

Option Explicit
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    'limitation sur le menu contextuel qui apparait lors du click-droit sur la feuille active
    'la limitation aura lieu sur la colonne "A"
    If Not Intersect(Target, Columns("A")) Is Nothing Then
        Activer_Bouton_CopierColler "Cell", , False
    Else
        Activer_Bouton_CopierColler "Cell"
    End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Not Intersect(Target, Columns("A")) Is Nothing Then
        Activer_Bouton_CopierColler "Standard", , False 'barre d'outil standard
        Activer_Bouton_CopierColler "edition", True, False 'menu édition
        Activer_CombiTouches_CopierColler False 'les combinaisons de touches
    Else
        Activer_Bouton_CopierColler "Standard"
        Activer_Bouton_CopierColler "edition", True
        Activer_CombiTouches_CopierColler
    End If
End Sub


Dans un module tu colles la suite :

Option Explicit
Sub Activer_Bouton_CopierColler(ByVal MaCmdBar As String, Optional ByVal Menu As Boolean False, Optional ByVal Activer As Boolean True)
    Dim bts As Object 'dimensionné en object pour la compatibilité xl2003 et XL2007 et plus
    If Menu = False Then 'est-ce un menu ?
        'ce n'est pas un menu
        Set cmdbar = CommandBars(MaCmdBar).Controls
    Else
        'c'est un menu
        Set cmdbar = CommandBars("Worksheet Menu Bar").Controls(MaCmdBar).Controls
    End If
    For Each bts In cmdbar 'pour chaque bouton de la commandebar spécifiée
        Select Case bts.ID 'on regarde son id
        Case 19, 21, 22, 755, 6002 'si c'est un des boutons recherchés
            'l'état actuel est-il different de l'état demmandé ? si il n'est pas different on arrete tout
            If (bts.Enabled True And Activer True) Or (bts.Enabled = False And Activer = False) Then Exit Sub
            bts.Enabled = Not bts.Enabled 'on change son état
        End Select
    Next
End Sub
Sub Activer_CombiTouches_CopierColler(Optional ByVal Activer As Boolean = True)
    'active ou désactive les combinaisons de touches Ctrl+C, Ctrl+v, Ctrl+x
    If Activer = False Then
        'ici on desactive :
        Application.OnKey "^c", "" 'Ctrl+C
        Application.OnKey "^v", "" 'Ctrl+V
        Application.OnKey "^x", "" 'Ctrl+X
    Else
        'ici on active :
        Application.OnKey "^c"
        Application.OnKey "^v"
        Application.OnKey "^x"
    End If


Il reste à adapter ce code à ton besoin. les quelque commentaires dans le code devrait suffire à t'aider

A+
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
oups ! une déclaration de variable oubliée

Sub Activer_Bouton_CopierColler(ByVal MaCmdBar As String, Optional ByVal Menu As Boolean False, Optional ByVal Activer As Boolean True)
    Dim bts As Object 'dimensionné en object pour la compatibilité xl2003 et XL2007 et plus
    Dim cmdbar As Object '<--- la déclaration à ajouter
    If Menu = False Then 'est-ce un menu ?
        'ce n'est pas un menu
        Set cmdbar = CommandBars(MaCmdBar).Controls
    Else
        'c'est un menu
        Set cmdbar = CommandBars("Worksheet Menu Bar").Controls(MaCmdBar).Controls
    End If
    For Each bts In cmdbar 'pour chaque bouton de la commandebar spécifiée
        Select Case bts.ID 'on regarde son id
        Case 19, 21, 22, 755, 6002 'si c'est un des boutons recherchés
            'l'état actuel est-il different de l'état demmandé ? si il n'est pas different on arrete tout
            If (bts.Enabled True And Activer True) Or (bts.Enabled = False And Activer = False) Then Exit Sub
            bts.Enabled = Not bts.Enabled 'on change son état
        End Select
    Next
End Sub

A+
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
euuuuh oui !

une petite précision:

le copier/coller dans la barre de formule n'est pas désactivée ! il me parait inutile de le faire car cela n'affecte que la valeur

A+
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

OK Merci
donc ce que tu m'as donné compile bien avec moi mais lorsque je l’exécute j'ai une erreur de compilation qui dit :" Nom ambigu détécté : Activer_Bouton_CopierColler"

je ne comprends pas pourquoi ce nom ne marche pas alors qu'il n'y a pas de soucis avec " Activer_CombiTouches_CopierColler" par exemple
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
je t'ai donné 2 fois le code "Activer_Bouton_CopierColler", le 2ieme est une correction du premier !
n'aurait tu pas, par hasard, copié et collé la 2ieme version sans effacer la premiere ?

par ce que la seul raison possible à cette erreur eest que le code apparaisse 2 fois dans ton projet !

A+
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

ah c'est exact c'est ce que j'ai fait !
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

Il y a un truc que je ne comprends pas dans ta fonction " Activer_Bouton_CopierColler"
ou est ce qu'on indique le nom de la colonne où l'on veut empêcher le copier coller ?

ps : je n'ai jamais fait de VBA
merci
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
ce n'est pas dans cette sub, c'est dans les événements "Workbook_SheetBeforeRightClick", "Workbook_SheetSelectionChange"

première partie du code placé dans le code de "ThisworkBook"

je doit partir et ne pourrait pas répondre avant demain, bonne soiré

A+
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

ah oui j'avais pas vu
merci
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

Est ce qu'il est possible d'écrire ce code pour plusieurs colonnes d'un coup?
. .
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
Je ne me casserais personnellement pas tant la tête. Je viderais tout simplement le presse-papier à l'entrée dans ces colonnes. Ainsi (exemple):
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Select Case Target.Column
    Case 1, 2, 4 '<<<<<<<<<<<<<<<=============colonnes A, B et D
      OpenClipboard 0
      EmptyClipboard
      CloseClipboard
    End Select
End Sub




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

et ça va faire quoi de vider le presse papier?

et le code que tu m'as donné je le met en plus du précédent dans un nouveau module c'est ça ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et ça va faire quoi de vider le presse papier?

Des frites, sûrement !
et le code que tu m'as donné je le met en plus du précédent dans un nouveau module c'est ça ?

A ce niveau : mets-le à la poubelle. Ce sera aussi bien.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

Tu es là pour m'aider ou pour te foutre de ma gueule ?!!
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

Est ce qu'il est possible d'écrire ce code pour plusieurs colonnes d'un coup?


oui c'est possible ! comme je te l'ai dit il serait bien que tu essais de comprendre le code que je t'ai donné. Tu devrait facilement trouver les parties qui definissent les colonnes (colums en anglais) impliquées dans le code.

bonjour ucfoutu, le béton ne fatigue pas que les bras à ce que je vois .

huyari, le code que ta donné ucfoutu est une autre solution qui remplace celle que je t'ai donné. Elle est donc à utilisée en remplacement et pas en complément.

A+
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

ok
merci bigfish
. .
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

en fait ucfoutu pour ton information je n'ai jamais fait d'informatique au cours de ma scolarité, donc j'ai 0 notion.
Je suis simplement amenée à m'en servir exceptionnellement au cours de mon stage.

. .
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

bigfish, dans ton code de "thisWorkBook" je comprends que tu empeches le copier coller dans la colonne A , mais comment on fait si on veut l'empecher dans les colonnes A,B , D, Z simultanément par exemple ?
merci
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
salut,

as-tu avancé sur ton problème ?

A+
Messages postés
20
Date d'inscription
mercredi 18 juillet 2012
Statut
Membre
Dernière intervention
27 juillet 2012

Non,
quand je met dans le workbook le code de ucfoutu, j'ai un message d'erreur qui dit
erreur d'execution '28' : espace pile insuffisant

ça veut dire quoi ?