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 :

Piéger le coller en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut Piéger le coller en VBA
    Bonjour,

    J'ai placé du code dans la fonction Workbook_SheetChange pour piéger le coller d'Excel afin d'imposer le collage par valeurs pour ne pas endommager la mise en forme.
    Par contre, si l'origine du collage n'est pas Excel, ça ne marche pas.
    Je sais le faire manuellement, il suffit de ne copier que le texte mais je n'arrive pas à savoir l'origine du copié.
    J'ai cherché dans les forums mais je n'ai rien trouvé de probant.

    Une idée ?

    Cdt, NC

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    J'ai placé du code dans la fonction Workbook_SheetChange
    Merci de bien vouloir nous donner, ici, le code utilisé.

    Par contre, si l'origine du collage n'est pas Excel, ça ne marche pas.
    Peux tu nous décrire précisément la démarche utilisée pour coller qui ne fonctionne pas?

    Lorsque cela ne fonctionne pas, peux-tu annuler le "coller"? (via la barre d'outils ou par Ctrl+Z)

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Ce n'est pas "l'origine du collé", qu'il t'appartient de déterminer, mais le contenu du presse-papier. Puis décider alors si ce contenu est acceptable ou non.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Bonjour,

    Pour être plus précis :

    Je cherche à contrôler la saisie des données dans la feuille.
    Je peux rencontrer plusieurs sortes :
    1 - la saisie au clavier
    Dans ce cas, les vérifications sont prises en charges par Excel par la validation des données des cellules,
    2 - la suppression d'une ou plusieurs cellules
    Ca, c'est OK.
    3 - le collage de données issues d'un collage Excel :
    Ca j'ai contourné par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    If Application.CutCopyMode Then    
            ' Détournement de la commande coller pour ne coller que les valeurs
            With Application
                If .CutCopyMode Then      
                    .Calculation = xlManual  
                    .Undo                             
                    Selection.PasteSpecial xlPasteValues  
                    .OnUndo "", ""
                    .OnRepeat "", ""
                    .Calculation = xlAutomatic
                End If
            End With
    End If
    Mais si l'origine du copié est Word, Pdf ou autre la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CutCopyMode
    ne sert à rien.
    Pour le collé, il faudrait faire la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.PasteSpecial Format:="Texte"
    Après avoir récupéré le contenu du inséré puis effectué un Undo.
    Mais comment savoir que c'est le presse-papier qui a été collé et pas de la saisie de texte à la manu ?

    A moins de "détourner" le coller peut-être ?

    J'espère que c'est plus clair.

    Cdt, NC

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Re
    Je ne comprends toujours pas, puisque tu peux toujours rejeter une donnée "inacceptable", que ce soit par Undo ou autrement (en gardant par exemple en mémoire la donnée antérieure et en la remettant si la donnée nouvelle ne "convient" pas.
    Mais bon. Tu veux une solution plus que radicale ? --->> vide donc le presse-papier dans l'évènement Worksheet_SelectionChange. Tu forceras ainsi la saisie manuelle.

    Et pourquoi, d'ailleurs, ne pas être plus vicieux encore. Au lieu de vider le presse-papier, on lui met la valeur de la cellule dans laquelle on entre.
    Regarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ouste As MSForms.DataObject
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If ouste Is Nothing Then Set ouste = New MSForms.DataObject
      ouste.SetText Target.Value
      ouste.PutInClipboard
    End Sub
    Voilà.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Dsl mais ce n'est pas si simple.

    Je veux qu'ils puissent coller des données depuis un tableur mais pas à partir de Word ou autre.
    Il est possible qu'ils ne collent pas qu'une seule cellule mais qu'ils embarquent dans le presse-papier un ensemble de cellules.

    Ce que je ne comprends pas c'est comment vérifier les données du presse-papier ?
    Car quand je rentre dans la procédure, je ne sais pas si les données ont été saisies à la manu (une donnée dans une cellule) ou encore la sélection d'un ensemble de cellules et l'appui sur la touche Suppr ou bien un collé du presse-papier.

    Si ils ont saisi à la main, il ne faut pas invalider la saisie. Hors le presse-papier peut très bien contenir quelque chose.
    Donc comment différencier les 2 types ?

    Excel fait bien la différence puisque en fonction du copié, il ne propose pas les mêmes options de collage.
    Pour un copié à partir d'Excel il y a la boîte de collage spécial avec les choix valeurs, formats, ... tandis que pour un copié à partir de Word il propose une autre boîte de collage spécial précisant la source Microsoft Office Word ...


    Grr je tourne en rond.

Discussions similaires

  1. Problème de copier coller en vba à partir d'excel
    Par Psycho185 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/06/2011, 13h47
  2. [WD-2003] copier/coller en VBA
    Par sellig60 dans le forum VBA Word
    Réponses: 7
    Dernier message: 02/04/2010, 10h27
  3. Problème de copier coller macro VBA
    Par Piernod dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/11/2009, 18h56
  4. Saturation du copier coller avec VBA
    Par frank26 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/11/2008, 09h25
  5. coller formules vba excel
    Par mapmip dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/08/2006, 16h00

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