Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Empêcher copier/coller vers un autre classeur ou une autre application

455 views
Skip to first unread message

renroy

unread,
Feb 3, 2011, 10:36:48 AM2/3/11
to
Bonjour à tous,

Je fais appel à vos lumières et vos solutions parfois géniales à des
problèmes pointilleux.

J'ai un classeur Excel comportant quelques onglets d'information et
que je souhaite rendre disponible à un utilisateur. Je souhaite
permettre à cet utilisateur de compléter l'information des onglets
existants s'il le souhaite mais je ne veux pas lui permettre de copier
l'information vers un autre classeur ou vers une autre application
(par exemple: Word, Bloc-Note, etc.). Est-ce possible ?

J'ai inséré une macro vba dans l'objet ThisWorkbook qui semble bien
empêcher de copier vers un autre classeur tout en permettant de copier-
coller d'un autre classeur vers le mien:

Private Sub Workbook_Deactivate()
'Pour interdire le collage suite à une copie venant du classeur vers
un autre classeur
Application.CutCopyMode = False
End Sub

Mon problème est que rien n'empêche l'utilisateur de copier vers Word
ou le Bloc-note et ensuite de copier de Word ou Bloc-note vers un
nouveau classeur Excel.

1- J'ai lu quelque part que Application.CutCopyMode=False ou
Application.CutCopyMode=True équivaut à l'appui sur la touche Echap
(annulation du mode Copier ou Coller, disparition des pointillés).
Quelle est la différence entre les deux puisque False et True ont le
même effet ?

2- Existe-t'il une façon universelle (applicable peu importe la
version d'Excel) de vider le presse-papier au moment de basculer
d'Excel vers une autre application ?

3- Workbook_Deactivate() ne semble détecter que la bascule entre
classeurs. Comment peut-on détecter la bascule entre Excel et une
autre application ?


Merci à l'avance pour vos précieuses suggestions.

René R.

isabelle

unread,
Feb 3, 2011, 10:49:48 AM2/3/11
to
bonjour René,

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Dim oDataObject As DataObject
Set oDataObject = New DataObject
oDataObject.SetText ""
oDataObject.PutInClipboard
Set oDataObject = Nothing
End Sub


isabelle

DanielCo

unread,
Feb 3, 2011, 10:51:01 AM2/3/11
to
Bonjour.
Et aussi, comment interdire l'impression, l'envoi par messagerie et la
copie d'écran, et comment obliger l'activation des macros... C'est
perdu d'avance.
Cordialement.
Daniel

news.free.fr

unread,
Feb 3, 2011, 10:58:19 AM2/3/11
to
Bonjour Isabelle,
Je crois que ça ne fonctionne plus depuis XL2007.
Daniel


news.free.fr

unread,
Feb 3, 2011, 10:58:36 AM2/3/11
to
Bonjour Isabelle,
Je crois que ça ne fonctionne plus depuis XL2007.
Daniel

isabelle

unread,
Feb 3, 2011, 11:09:12 AM2/3/11
to
bonjour Daniel,

peut tu essayer celle-ci,

Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long

Sub Vider_Presse_Papier()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub

isabelle

DanielCo

unread,
Feb 3, 2011, 11:31:01 AM2/3/11
to
Pas mieux, apparemment.
Daniel

isabelle

unread,
Feb 3, 2011, 11:37:42 AM2/3/11
to
et avec la commande xl4 ?

Sub vide_Clipboard()
On Error Resume Next
Application.CommandBars("Clipboard").Controls(4).Execute
End Sub

isabelle

renroy

unread,
Feb 3, 2011, 11:40:47 AM2/3/11
to
Bonjour Isabelle,

Merci de ton intervention ;-)

Tel que soulevé par Daniel, le code que tu suggère ci-après génère une
erreur de compilation "Type défini par l'utilisateur non défini"
lorsqu'appliqué dans Excel 2010.

René

> > René R.- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -

renroy

unread,
Feb 3, 2011, 11:43:03 AM2/3/11
to
Bonjour Daniel,

Un homme averti en vaut deux. Merci! Cependant, je n'ai pas besoin de
tout interdire ni d'obliger l'activation des macros :)

René

DanielCo

unread,
Feb 3, 2011, 11:49:17 AM2/3/11
to
Non plus (je ne la connaissais pas, celle là !)
On dirait que c'est "by design"; pas possible qIls ne l'aient pas fait
exprès.
Daniel

renroy

unread,
Feb 3, 2011, 11:49:44 AM2/3/11
to
Je ne sais pas vraiment. J'ai inséré les lignes On error ... et
Application ... sous Sub Workbook_WindowDeactivate(ByVal Wn As Window)
mais c'est comme si la routine ne s'exécutait pas :(

René

> >>> Daniel- Masquer le texte des messages précédents -

news.free.fr

unread,
Feb 3, 2011, 11:50:49 AM2/3/11
to
Il faut que tu coches MS Forms dans les références de VBVE.
Daniel

DanielCo

unread,
Feb 3, 2011, 11:52:33 AM2/3/11
to
Excuse. Je voulais dire les références de la fenêtre VBE (Outils,
Références).
Daniel

DanielCo

unread,
Feb 3, 2011, 11:53:57 AM2/3/11
to
???
Si tu veux utiliser Workbook_Deactivate ?
Daniel


> Bonjour Daniel,
>
> Un homme averti en vaut deux. Merci! Cependant, je n'ai pas besoin de
> tout interdire ni d'obliger l'activation des macros :)
>

> Renᅵ


>
> On 3 fᅵv, 10:51, DanielCo <dcolardelle...@free.fr> wrote:
>> Bonjour.
>> Et aussi, comment interdire l'impression, l'envoi par messagerie et la

>> copie d'ᅵcran, et comment obliger l'activation des macros... C'est

renroy

unread,
Feb 3, 2011, 12:04:30 PM2/3/11
to
Non. Je veux dire l'activation des macros n'est pas un problème pour
moi dans ce cas. C'est un peu long à expliquer mais j'ai imaginé un
workaround par l'utilisation d'un classeur secondaire qui sert de
validation, un peu comme une licence d'utilisation. Par défaut, le
classeur principal est protégé et les onglets intéressants pour
l'utilisateur sont masqués. Pour les visualiser, il n'a d'autre choix
que d'activer les macros. Dès que c'est fait, une macro du classeur
principal vérifie l'existence du classeur secondaire et des paramètres
de celui-ci autorise et automatise l'affichage des onglets concernés.
Voila. Je ne sais pas si je suis clair ... mais çà fonctionne ;-)

René

On 3 fév, 11:53, DanielCo <dcolardelle...@free.fr> wrote:
> ???
> Si tu veux utiliser Workbook_Deactivate ?
> Daniel
>
> > Bonjour Daniel,
>
> > Un homme averti en vaut deux. Merci! Cependant, je n'ai pas besoin de
> > tout interdire ni d'obliger l'activation des macros :)
>
> > Ren
>

> > On 3 f v, 10:51, DanielCo <dcolardelle...@free.fr> wrote:
> >> Bonjour.
> >> Et aussi, comment interdire l'impression, l'envoi par messagerie et la

> >> copie d' cran, et comment obliger l'activation des macros... C'est
> >> perdu d'avance.
> >> Cordialement.

isabelle

unread,
Feb 3, 2011, 12:12:00 PM2/3/11
to
bonjour René,

tu as peut être désactivé les événements, execute cette macro pour être
sur qu'ils soient actif,

Sub Événemets_Actif()
Application.EnableEvents = True
End Sub

isabelle

isabelle

unread,
Feb 3, 2011, 12:13:38 PM2/3/11
to
il faut ajouter la r�f�rence la r�f�rence � Microsoft Forms 2.0 Library

isabelle

Le 2011-02-03 11:40, renroy a �crit :


> Bonjour Isabelle,
>
> Merci de ton intervention ;-)
>

> Tel que soulev� par Daniel, le code que tu sugg�re ci-apr�s g�n�re une
> erreur de compilation "Type d�fini par l'utilisateur non d�fini"
> lorsqu'appliqu� dans Excel 2010.
>
> Ren�
>
> On 3 f�v, 10:49, isabelle<i...@v.org> wrote:
>
>> bonjour Ren�,

DanielCo

unread,
Feb 3, 2011, 12:18:58 PM2/3/11
to
C'est un vieux débat, ici. Depuis un classeur externe, avec une macro,
je peux afficher toutes les feuilles du classeur principal, sans
activer les macros sur celui-ci.
Daniel

isabelle

unread,
Feb 3, 2011, 12:19:00 PM2/3/11
to
bonjour René,

tu peut aussi protéger la feuille en interdisant tout (même la sélection)
mais comme disait Daniel cela n'empeche pas la copie d'écran

isabelle

renroy

unread,
Feb 3, 2011, 12:44:57 PM2/3/11
to
Daniel,

Je comprend et je suis conscient que ma solution n'est pas à toute
épreuve. Disons que je me contente d'une solution à l'épreuve des
utilisateurs "ordinaires" ayant peu ou pas de connaissance VBA.

René

DanielCo

unread,
Feb 3, 2011, 1:33:35 PM2/3/11
to
Alors OK, il ne faut en attendre plus.
Daniel

renroy

unread,
Feb 3, 2011, 1:57:47 PM2/3/11
to
Merci Daniel et Isabelle pour votre précieuse collaboration.

René

isabelle

unread,
Feb 3, 2011, 2:45:41 PM2/3/11
to
bonjour Daniel,

il y a une discution ici :
http://social.answers.microsoft.com/Forums/fr-FR/w7filesfr/thread/241a362d-6ade-4579-af1a-9fcbaa3ab6f7
les rᅵponses de Jean-Claude BELLAMY et de Pierre TORRIS donne une
solution pour pallier ᅵ la commande "Effacer le Clipboard" pour les
versions 2007 et +

isabelle

Le 2011-02-03 11:49, DanielCo a ᅵcrit :
> Non plus (je ne la connaissais pas, celle lᅵ !)


> On dirait que c'est "by design"; pas possible qIls ne l'aient pas fait

> exprᅵs.


> Daniel
>
>
>> et avec la commande xl4 ?
>>
>> Sub vide_Clipboard()
>> On Error Resume Next
>> Application.CommandBars("Clipboard").Controls(4).Execute
>> End Sub
>>
>> isabelle
>>
>>
>>
>>

>> Le 2011-02-03 11:31, DanielCo a ᅵcrit :


>>> Pas mieux, apparemment.
>>> Daniel
>>>
>>>
>>>> bonjour Daniel,
>>>>
>>>> peut tu essayer celle-ci,
>>>>
>>>> Private Declare Function OpenClipboard Lib "user32" _
>>>> (ByVal hwnd As Long) As Long
>>>> Private Declare Function EmptyClipboard Lib "user32" () As Long
>>>> Private Declare Function CloseClipboard Lib "user32" () As Long
>>>>
>>>> Sub Vider_Presse_Papier()
>>>> OpenClipboard 0
>>>> EmptyClipboard
>>>> CloseClipboard
>>>> End Sub
>>>>
>>>> isabelle
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>

>>>> Le 2011-02-03 10:58, news.free.fr a ᅵcrit :
>>>>> Bonjour Isabelle,
>>>>> Je crois que ᅵa ne fonctionne plus depuis XL2007.
>>>>> Daniel
>
>

michdenis

unread,
Feb 3, 2011, 1:51:56 PM2/3/11
to
Bonjour,

| Je souhaite permettre � cet utilisateur de compl�ter l'information


| des onglets existants s'il le souhaite mais je ne veux pas lui
| permettre de copier

Pourquoi ne pas utiliser un formulaire (userform) pour permettre
d'ins�rer dans la feuille de ton choix toute l'information dont tu as
besoin. Cette feuille peut demeurer masqu�e
(Worksheets("feuil1").Visible =xlSheetVeryHidden, donc impossible � l'usager
de conna�tre l'existence de la feuille et de la visualiser sans avoir acc�s
� VBA. Comme la feuille n'est jamais affich�e, impossible aussi d'en faire
une copie.

Afin que quelqu'un ne puisse pas afficher la feuille masqu�e � partir
d'un autre classeur (vba), tu prot�ges le classeur (pas les feuilles)
(structure et fen�tres)

Tu ajoutes ceci dans le ThisWorkbook au cas o� en d�prot�gerait le classeur

'---------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
Worksheets(Array("sheet2", "sheet4")).Visible = xlVeryHidden
ThisWorkbook.Protect "MotDepasse", Structure:=True, Windows:=True
End Sub

'---------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ThisWorkbook.Protect "MotDepasse", Structure:=True, Windows:=True
End Sub
'---------------------


MichD
--------------------------------------------

DanielCo

unread,
Feb 3, 2011, 3:23:35 PM2/3/11
to
J'ai lu en diagonale et je n'ai pas compris. Je suis sous XP et Office
2010. Mon problᅵme est avec VBA. J'ai essayᅵ le script de Pierre Torris
qui n' a rien vidᅵ.
Daniel

news.free.fr

unread,
Feb 3, 2011, 3:30:35 PM2/3/11
to
J'ai lu en diagonale et je n'ai pas compris. En fait, tes trois macros
fonctionnent et vident le presse-papiers Windows, mais pas le
presse-papiers Office.
Daniel

isabelle

unread,
Feb 3, 2011, 3:31:27 PM2/3/11
to
tu as tᅵlᅵchager le fichier ?

http://www.ptorris.com/reg.php
-> clipboard-clear.vista-7

Il suffit de crᅵer un raccourci et de le mettre oᅵ vous voulez.

------------------------------------------------------------------------
isabelle

Le 2011-02-03 15:23, DanielCo a ᅵcrit :

DanielCo

unread,
Feb 3, 2011, 3:35:17 PM2/3/11
to
Oui, lui ne vide rien, ni le clipboard Windows, ni celui d'Office, mais
bon, je suis sous XP.
Daniel

LSteph

unread,
Feb 5, 2011, 3:20:40 AM2/5/11
to
Bonjour à tous,

Tout cela est bien trop facilement déjouable vous le savez bien Isa et
Daniel c'est pour souscrire à une réponse gentillement mais il faut le dire
quand même:

Application.enablevents=false

ou les désactiver à l'ouverture

On ne pourra pas empêcher d'empêcher...

Une autre façon, certes contournable aussi, serait de protèger les feuilles
en empêchant la sélection des cellules verrouillées et mettre masquer et
déverrouillées sur celles ou l'on saisit.

Cordialement.

--
LSteph

"DanielCo" <dcolard...@free.fr> a écrit dans le message de
news:iiel7s$ps2$1...@speranza.aioe.org...

LSteph

unread,
Feb 5, 2011, 3:27:09 AM2/5/11
to
Bonjour,

Tu ne l'empêchera pas complètement.

déjà ton premier code n'y fera rien:

Application.enablevents=false
on désactve les évennements et le déactivate passe à la trappe.

ou même ne pas activer les macros à l'ouverture.

Reste la protection de feuille par mot de passe et empêcher la sélection des
cellules vérouillées
qui est déjà plus efficace avec ses limites là aussi.

Cordialement.

__
LSteph

"renroy" <ren...@gmail.com> a écrit dans le message de
news:1722e23f-11f8-4eaa...@v7g2000yqh.googlegroups.com...
Bonjour à tous,

Je fais appel à vos lumières et vos solutions parfois géniales à des
problèmes pointilleux.

J'ai un classeur Excel comportant quelques onglets d'information et
que je souhaite rendre disponible à un utilisateur. Je souhaite

permettre à cet utilisateur de compléter l'information des onglets


existants s'il le souhaite mais je ne veux pas lui permettre de copier

0 new messages