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

VBA Access Discussion :

Copier une variable dans le presse-papier [AC-97]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut Copier une variable dans le presse-papier
    Bonsoir à tous.

    Je souhaite, en cliquant sur le champ d'un formulaire, envoyer la variable dans le presse-papier pour pouvoir la coller sur une feuille Excel .

    Sauf erreur, il semble qu'il faille activer la librairie Microsoft "Forms x.x Object Library" pour pouvoir utiliser la fonction MSForms.DataObject. Or je n'ai pas cette librairie dans les Références de mon Acces97.

    J'ai inséré la dll FM20.dll dans C:\Windows\SysWOW64 (vu que je suis en W10 x64) et même dans C:\Windows\System32.

    Mais rien n'y fait après reboot : pas de librairie à cocher dans 'Références'

    Merci de votre aide, ou pour me suggérer une autre méthode.

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Et ceci ?
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Merci beaucoup.

    La vache ... 150 lignes de code pour un 'copier' ... Il va me falloir un peut de temps pour comprendre où est la variable avant de faire une bête copie de ce code ...

    Bonne soirée

  4. #4
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Merci encore Hyperion13, mais mon niveau ne me permettra pas de comprendre ce code pour l'adapter ...

    Sauf à trouver qq chose de plus simple, je me rabats sur ma 1ère hypothèse d'activer la librairie Microsoft 'Forms x.x Object Library' car dans ce cas, ce simple code pourra suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Texte269_Click()
     
    Texte269.SetFocus
     
    DoCmd.RunCommand acCmdCopy
     
    End Sub
    Je viens de tenter d'inscrire manuellement la dll, puis ai utiliser fm2paste.exe, sans succès. Toujours rien dans 'Références' ....

    Merci pour votre aide

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    J'ai trouvé ceci.
    Ça fait le job (testé sur Acc2k3) sans besoin de la référence Microsoft Forms 2.0 Object Library.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    Pourquoi ne pas inverser le problème ?:
    Aller dans XL, et via le ruban (version anglaise): "Data\Get Data\From Database\Access" et à partir de là pointer sur la table ou requête contenant la variable voulue.

  7. #7
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour,
    Et Pourquoi-Pas ouvrir le classeur Excel et lui dire
    workbooks(1).seets(1).range("A1")=me.contrôle. value

  8. #8
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Pourquoi ne pas inverser le problème ?:
    Aller dans XL, et via le ruban (version anglaise): "Data\Get Data\From Database\Access" et à partir de là pointer sur la table ou requête contenant la variable voulue.
    Bonjour et merci, mais il y a une connexion RDP entre les 2...

  9. #9
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Salut
    J'ai trouvé ceci.
    Ça fait le job (testé sur Acc2k3) sans besoin de la référence Microsoft Forms 2.0 Object Library.
    Merci hyperion13.

    J'ai déjà testé, mais j'ai ce message d'erreur :

    Nom : Capture.PNG
Affichages : 797
Taille : 10,5 Ko

    J'ai cru voir que ce message apparaissait dans le cas d'un sous-formulaire, ce qui n'est pas mon cas ...

    Merci

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    mais si tu veux vraiment utiliser le presse Papier!
    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
    Sub test()
    PressePapier = "toto"
    txt = PressePapier
    End Sub
    Public Property Let PressePapier(Value)
    Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
        With CreateObject(DATAOBJECT_BINDING)
            .SetText Value
            .PutInClipboard
        End With
    End Property
    Public Property Get PressePapier()
    Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
        With CreateObject(DATAOBJECT_BINDING)
            .GetFromClipboard
            PressePapier = .GetText
        End With
    End Property

  11. #11
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Merci Thumb down.

    J'ai l'erreur suivante :
    429 - Un composant ActiveX ne peut pas créer un objet.
    Je sais que le VB sur Access97 est très restrictif .

    Je continue à gratter.

    Bonne journée

  12. #12
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Si runtime error 2465
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Texte269_Click()
    On Error GoTo errHandler
        Me!Texte269.SetFocus
        DoCmd.RunCommand acCmdCopy
    errExit:
    Exit Sub
    errHandler:
    If Err.Number = 2465 Then
    Resume Next
    End If
    End Sub
    EDIT 19:39 et je viens de trouver ce lien.

    le lien vers l'API de Allen Browne (Post#2) as-tu vérifié que cela fonctionnait avec tes 2 lignes d'instruction sans chercher à comprendre les 150 lignes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Texte269_Click()
        Me.Texte269.SetFocus
        DoCmd.RunCommand acCmdCopy
    End Sub
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Texte269_Click()
        Me.Texte269.SetFocus
        Me.Texte269.SelStart = 0
        Me.Texte269.SelLength = Len(Me.Texte269.Text)
        DoCmd.RunCommand acCmdCopy
     End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  13. #13
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Merci beaucoup.

    Je teste cela ce soir et reviens vers vous.

    Pour info, Me. n'existe pas dans la syntaxe du VB 5.0 (celui-d'accès 97). Il faut démarrer directement de l'étiquette ou la variable.

    Phil

  14. #14
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Bonjour à tous.

    Grosses semaines de travail en déplacement : j'avais mis ce dev de coté.

    Je viens d'essayer tous ce que vous m'avez proposé, mais ça coince toujours.

    Je me rabats vers un simple Copier/coller à la main, car le focus me permet de sélectionner directement la variable

    Je clos la discussion.

    Bon WE

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    Salut,

    Moi j'ai ceci à te proposer
    Dans ton form, sur le clic dans ton champ tu va coller le code dans ta [Procédure événementielle]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SetClipboard ta variable   'Va à la procédure dans un module avec le nom que tu veux
    Ensuite dans ton Module du mets ce code

    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
    Option Compare Database
     
    Option Explicit
     
    Public Declare Function ShellExecute Lib "shell32.dll" _
        Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
        ByVal lpFile As String, ByVal lpParameters As String, _
        ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
    Private Declare Function CloseClipboard Lib "user32.dll" () As Long
    Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As Long
    Private Declare Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
    Private Declare Function SetClipboardData Lib "user32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function GlobalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32.dll" (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32.dll" (ByVal hMem As Long) As Long
    Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long

    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
    Public Sub SetClipboard(sUniText As String) 'Copie dans le presse papier
        Dim iStrPtr As Long
        Dim iLen As Long
        Dim iLock As Long
        Const GMEM_MOVEABLE As Long = &H2
        Const GMEM_ZEROINIT As Long = &H40
        Const CF_UNICODETEXT As Long = &HD
        OpenClipboard 0&
        EmptyClipboard
        iLen = LenB(sUniText) + 2&
        iStrPtr = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, iLen)
        iLock = GlobalLock(iStrPtr)
        lstrcpy iLock, StrPtr(sUniText)
        GlobalUnlock iStrPtr
        SetClipboardData CF_UNICODETEXT, iStrPtr
        CloseClipboard
    End Sub
    Cela copie ta variable dans le presse-papier
    Ensuite dans Excel tu fais Ctrl v pour coller où tu veux

    A+

  16. #16
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Bonjour et merci electrosat03 !

    J'ai coller le code : aucune erreur c'est déjà ça

    En revanche, je n'ai rien dans le presse papier. Le coller ou que je me mette ne fonctionne pas.

    J'ai fait un msgbox avec ma variable à la fin de la procédure événementielle: rien non plus

    Si tu as une idée ....

    Merci

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    Salut,
    dans ton form, tu sélectionnes ton champ qui doit contenir ta variable puis dans les propriétés sur événement au clic tu choisi [Procédure événementielle] ça ouvre ta fenêtre de code et tu place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SetClipboard ta variable   'Va à la procédure dans un module avec le nom que tu veux
    "ta variable", c'est le nom de ton contrôle qui contient la valeur que tu dois copier, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SetClipboard Me.le nom du contrôle
    Il va donc allez à la function SetClipboard avec comme paramètre la valeur de ton contrôle

  18. #18
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Mais oui bien sur !

    je voulais récupérer la valeur dans une variable : il fallait mettre le nom du contrôle ! c'est évident en y réfléchissant

    Ca marche nickel !

    1000 mercis

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    De rien

    A+

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

Discussions similaires

  1. [OpenOffice][Tableur] Copier la valeur d'une variable dans le presse papier
    Par tydoo34 dans le forum OpenOffice & LibreOffice
    Réponses: 6
    Dernier message: 14/06/2016, 14h05
  2. [Batch] Copier une variable dans le presse-papier
    Par paumel dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 06/02/2016, 13h48
  3. Copie du contenu d'une variable dans le presse papier
    Par gangsterus dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 12h05
  4. Réponses: 3
    Dernier message: 06/07/2005, 11h27
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

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