IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

empêcher copier/coller combobox, textbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut empêcher copier/coller combobox, textbox
    Bonjour à tous,

    encore une intervention sur Développez.com.

    Je n'arrive pas à empêcher le copier coller sur un UserForm.

    Exemple j'ai une combobox dès lors que je sélectionne un item, il m'est possible d'effectuer un ctrl-C. Puis par un ctrl-V dans une textbox, l'item est recopié. Mais je ne veux pas que cela se produise. Comment remédier au problème ? (j'ai le même problème de textbox à textbox)

    Une aide me serait la bienvenue.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    salut,

    de tete, je dirais qu'en choppant la combinaison de touche Ctrl+V ou Ctrl+C on doit pouvoir mind fuck le bazar

    Quel est l'objectif exact recherche ? Empecher que l'utilisateur copie des donnees qui n'ont pas vocation a sortir de l'outil ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Merci pour ta réponse.

    Non copier ailleurs de l'outil userform m'importe peu. Par contre dans le userform je souhaite qu'un utilisateur lambda puis depuis un combobox copier la valeur et me la copier dans un textbox. je souhaite grosso merdo de verrouiller de potentiel bugs.

    quelqu'un aurait-il une solution pour éviter de copier la valeur d'une combobox dans un textbox (selon le ctrl-C puis ctrl-V) ?

    merci...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    Salut,

    en plein mois de juillet, mieux vaut etre un peu patient

    Vu le besoin, je doute que partir dans un blindage aussi pousse soit pertinent.

    Tu peux voir si un tableau de 2 valeurs numeriques qui stockent les KeyCode lors des keydown de tes objets, avec les valeurs 17 pour Ctrl et 86 pour V...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Merci pour ta rescousse JPCheck, je tente cette piste.

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    J'utiliserais personnellement une mitrailleuse. Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Sub TextBox1_Enter()
      If TextBox1.CanPaste Then ' pour éviter ce qui est déjà vide
        OpenClipboard 0
        EmptyClipboard
        CloseClipboard
      End If
    End Sub
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Merci Unparia,

    mais peux-tu svp développer un peu car je ne pige pas toutes les syntaxes.

    De plus je crois comprendre que tu vérifies à l'intérieur d'une textbox au moment de son entrée.

    cependant le peu que je comprenne, est que si tu viens d'une combobox et que le copier a été fait, alors dans ta routine il ne serait pas possible de coller ?!?

    Merci pour ton éclaircissement.

    ++

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    mais peux-tu svp développer un peu car je ne pige pas toutes les syntaxes.

    De plus je crois comprendre que tu vérifies à l'intérieur d'une textbox au moment de son entrée.
    Ce qui est utilisé n'a rien à voir avec VBA. Ce sont des fonctions de l'API de Windows.
    A l'entrée dans la textbox, le presse-papier est vidé de son contenu, qu'il devient donc impossible d'utiliser de quelque manière que ce soit. Voilà tout.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    ok je pige mieux.

    Par contre le portage n'est pas assuré d'une machine à une autre genre pc vs mac ?

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    il y a beaucoup plus simple
    bloquer simplement la touche ctrl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 17 Then MsgBox "copier coller interdit rentre chez ta mère  et va apprendre a taper toi même "
    End Sub
    tu peut toujours essayer de faire ctrlV ou ctrlC
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour patricktoulon
    c'est en effet une solution, mais à condition de faire alors harakiri de tous les autres raccourcis clavier (dont CTRL + A, CTRL + X, etc ..)
    Si adoptée : vaut peut-être mieux ne la mettre en oeuvre que si CanPaste est True, pour limiter aux cas "risqués"

    Au rang des solutions "simples", il y a également celle-ci, mais que je n'aime pas à divers titres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox1_Enter()
     Application.CutCopyMode = False
    End Sub
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Application.CutCopyMode = True
    End Sub
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    @unparia

    sinon en pure gestion de l'évènement tu a cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 17 Then TextBox1.Tag = "non"
    If KeyCode = 86 Or KeyCode = 67 And TextBox1.Tag = "non" Then KeyCode = 0: TextBox1.Tag = ""
    End Sub
    tu peut toujours essayer de copier coller mais ca ne bloque pas les ctrl+autre touche
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Bonjour et merci pour vos interventions.

    -> PatrickToulon : j'ai essayé ta méthode avec keycode = 17 etc... ça marche dans mon userform à savoir si je copie l'item du combobox, via la souris, puis si je colle dans le textbox alors la valeur n'est pas recopiée. Mais je dois pousser le test voir si il n'y a pas des vices cachés.
    Question subsidiaire (de manière générale d'objet à objet est-ce la même routine ? ex: de combobox à combobox etc ...)

    -> Unparia : j'ai essayé ta méthode de application.paste ect... mais cela ne marche pas (aucun code d'erreur remonté, en gros je peux copier et coller). Donc est-ce applicable à un userform ou plutôt à une feuille ? (je travaille dans un userform)

    -> unparia : je n'ai pas essayé avec ta seconde méthode lib user32.dll un truc dans ce genre. Cette solution je ne la retiens pas. J'ai cru comprendre qu'il pouvait y avoir des évolution difficile à gérer et/ou une incompatibilité de *.dll par rapport aux versions d'excel... De plus au travail certaines ne sont pas autorisées (pas tout pigé, j'avoue) => contrainte

    -> Jpcheck : toujours pas fait avec une méthode de tableau mais il semblerait que l'idée se rapprocche de celle de PatrickToulon.

    Merci pour vos aides, cela me débloque un peu plus...

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour
    oui la routine serait identique pour chaque control ayant l'évènement keydown

    et oui c'est a peu près l'idée de jpcheck sauf que j'utilise le tag du bouton pour mémoriser la touche ctrl appuyée

    on pourrait faire aussi comme suit
    tester les combinaison de touche avec like par rrapport a une variable de type string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    nottouche="1786176717651780"
    If KeyCode = 17 Then TextBox1.Tag = 17
    if nottouche like "*"&.tag & keycode & "*" then KeyCode = 0: TextBox1.Tag = ""
    End Sub
    résultat:

    ctrl a,c,v,p c'est walouhwalouh
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Comment empêcher le copier/coller sur un textbox?
    Par lakhdar16 dans le forum IHM
    Réponses: 5
    Dernier message: 22/01/2013, 11h46
  2. [XL-2007] Copier-coller via TextBox
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/05/2012, 08h37
  3. Copier/coller dans un textBox (formulaire)
    Par alliance dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2006, 00h06
  4. TextBox copier/coller/couper [Java]
    Par am.adnane dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/07/2006, 02h38
  5. Réponses: 3
    Dernier message: 29/03/2005, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo