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 :

Sauvegarde du presse papier utilisateur car utilisé dans une macro qui efface le contenu


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut Sauvegarde du presse papier utilisateur car utilisé dans une macro qui efface le contenu
    Bonjour,

    j'ai une macro qui copie une image lorsque je change de feuille.

    Elle utilise ".copy" et efface donc le contenu du presse-papier de l'utilisateur si ce dernier veut copier entre feuille.

    Comment puis-je garder les mises en formes lors de la copie utilisateur.
    il y a bien la méthode avec "dataobject.SetText" mais le formatage est perdu

    Y a-t-il une autre méthode ?

    Merci

    ESVBA

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par ESVBA Voir le message
    Y a-t-il une autre méthode ?
    Bonjour,

    Ne pas utiliser Copy?

  3. #3
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    Bonjour a vous

    je vais peut etre hors sujet mais voici un code qui permet de récupéré le contenu du presse papier dans un textbox a mettre derrière un bouton sur un userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
        Dim GestionErreur As String
         Dim MyDataObj As New DataObject
     
        On Error GoTo GestionErreur
        MyDataObj.GetFromClipboard
        Me.TextBox1 = Me.TextBox1 & Chr(13) & MyDataObj.GetText()
        Exit Sub
     
        GestionErreur:
        MsgBox "Le presse-papier est vide."
        End Sub
    Pascal

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut Un début
    Bonjour,

    Ce code ne fonctionnera pas si, l'utilisateur, après avoir copié son range, change de sélection.
    En fait, on conserve en mémoire le range : Selection.
    Il y a d'autres défauts (par exemple, tout "Collé" fera s'effacer le contenu du presse-papier), mais c'est un début de piste.

    activer la référence : "Microsoft Forms 2.0 Object Library"

    Dans le module ThisWorkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Option Explicit
     
        'nécessite d'activer référence : "Microsoft Forms 2.0 Object Library"
        Dim Copie As Boolean
        Dim rngCopie As Range
        Dim objData As DataObject
     
        Private Sub Workbook_SheetActivate(ByVal Sh As Object)
            'ici ton code de copié/collé d'image
     
            If Copie And Not rngCopie Is Nothing Then rngCopie.Copy
        End Sub
     
        Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
            Dim C As String, i As Long
            'intercepte l'action "Coller"
            With Application.CommandBars("Standard")
                i = .FindControl(ID:=128).Index
                C = .Controls(i).List(1)
            End With
            If C = "Coller" Then ClearPressPapier
        End Sub
     
        Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
            'détecte s'il y a eu un copié de fait
            Dim strPP As String
            GetPressPapier strPP
            If strPP <> "" Then SaveRangeCopie Sh, Selection
        End Sub
     
        Private Sub SaveRangeCopie(Wsh As Object, rng As Range)
            'enregistre le Range copié
            Copie = True
            Set rngCopie = Sheets(Wsh.Name).Range(rng.Address)
        End Sub
     
        Private Sub GetPressPapier(strPP As String)
            'get le contenu du presse-papier
            Copie = False
            Set objData = New DataObject
            objData.GetFromClipboard
            strPP = objData.GetText
        End Sub
     
        Private Sub ClearPressPapier()
            'vide le presse-papier
            Set objData = New DataObject
            objData.SetText ""
            objData.PutInClipboard
        End Sub

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    La question bête : quel presse-papiers ?

    Celui d'Office peut contenir plusieurs éléments et peut-être ouvert à partir du ruban.
    Celui de Windows contient seulement 1 élément à la fois.

    Moi, je te dirais de vérifier visuellement le presse-papiers d'Office, en exécutant la macro au pas-à-pas.

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut de retour
    Bonjour à vous quatre et merci de vous êtes intéressés à mon cas.

    Oui, AlainTech, j'utilise ".Copy" pour déplacer une image sur une autre feuille.
    Ne ne connais aucun autre fonction possible, et vous ?

    Grisan29, le problème avec votre code comme je l'évoquais et que je ne récupère que le texte sans mise en forme.
    Donc pas intéressant.

    Même réponse pour Pijaku. "SetText" et "GetText" oublient le formatage.

    ClementMarcotte, : peu importe le presse-papier, si je peux le piloter par VBA en conservant 2 contenus : une image et la sélection de l'utilisateur (image aussi, plage de cellules avec formats...)
    Mais là je ne sais pas faire et je n'ai pas trouvé.

    ESVBA

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

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

    Peut être en utilisant Insert.

    Un exemple à placer dans le module ThisWorkbook (l'image à copier/coller est dans la Feuil1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Option Explicit
     
    Dim CheminImage As String
    Dim NomShape As String
     
        Private Sub Workbook_Open()
            'stocke le chemin d'accès à l'image
            CheminImage = "C:\Users\Desktop\aLdLvbY5FNihRpNY.png"
        End Sub
     
        Private Sub Workbook_SheetActivate(ByVal Sh As Object)
            If Sh.Name <> "Feuil1" Then
                Range("B2").Select
                ActiveSheet.Pictures.Insert(CheminImage).Select
                NomShape = Selection.Name
            Else
                NomShape = ""
            End If
        End Sub
     
        Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
            If NomShape <> "" Then Sh.Shapes.Range(Array(NomShape)).Delete
        End Sub

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2010, 16h59
  2. Résultat de Checkbox utilisé dans une requête
    Par anthony_rexis dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2007, 09h43
  3. empecher l utilisateur d ecrire dans une JTextArea
    Par vince6262 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 29/05/2007, 13h49
  4. Réponses: 6
    Dernier message: 02/04/2007, 19h13
  5. Réponses: 15
    Dernier message: 19/05/2006, 15h55

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