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 :

Copy et paste imcomprehensible [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut Copy et paste imcomprehensible
    bonjour a tous
    j'ai un petit souci avec un copy paste

    voila mon souci
    je prend un cliché de l'userform avec l'api adequate
    'capturer l'écran

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    private sub bouton_click()
    keybd_event vbKeySnapshot, 1&, 0&, 0& ' fenêtre active
            DoEvents
    Sheets(1).Paste
    end sub
    sa sa fonctionne
    le problème c'est que je peut le faire plusieurs fois après avoir apporté des modification a l'userform

    et a chaque fois c'est l'image de la précédente capture qui se colle dans le sheets
    je suis obligé de faire 2 a trois fois la capture pour que la capture soit bien la dernière comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private sub bouton_click()
    for i = 1 to 3
    keybd_event vbKeySnapshot, 1&, 0&, 0& ' Capture de la fenêtre active
    next
            Sheets(1).Paste
    end sub
    quelqu'un a une idée pourquoi je suis obligé de faire ca ??

    merci pour le retour

    au plaisir
    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

  2. #2
    Membre éprouvé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 46
    Par défaut
    Bonjour,

    J'ai juste ajouté une ligne à la première version de votre code. Je n'ai pas testé avec un userform mais avec la fenêtre "Microsoft Visual Basic" en changeant les fichiers déployés dans la fenêtre projets ... et ça marche chez moi avec Excel 2007.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
     
    Private Sub bouton_click()
     
      keybd_event vbKeySnapshot, 1&, 0&, 0& ' fenêtre active
      DoEvents
      Sheets(1).Paste
      Application.CutCopyMode = False
     
    End Sub
    A voir.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    et merci pour le retour
    cependant tu aurais du essayer avec un userform tu aurais constaté qu'il n'y avais pas de changement

    et pour vider le presse papier j'utilise les api ce qui reviens au meme cela dit

    une autre idée???

    au plaisir
    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

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    J'ai reproduit la situation décrite en créant un UserForm avec une TextBox, une ComboBox et un CommandButton. J'ai appliqué le code suivant au UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
     
    Private Sub CommandButton1_Click()
    keybd_event vbKeySnapshot, 1&, 0&, 0& ' fenêtre active
    DoEvents
    Sheets(1).Paste
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim Jours
    Jours = Array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche")
    ComboBox1.List = Jours
    End Sub
    Je lance le UserForm à partir d'un CommandButton (OLEObject) situé sur Feuil1 dont le code est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    UserForm1.Show vbModeless
    End Sub
    J'utilise vbModeless pour pouvoir cliquer sur une cellule de la feuille pendant l'exécution du UserForm afin que les différentes copies ne se superposent pas.
    ************************
    J'ai fait plusieurs essais de prendre plusieurs copies tout en changeant les valeurs de la TexBox et de la ComboBox
    1) à partir de la même instance du UserForm,
    2) en ouvrant et fermant successivement le UserForm
    Tout fonctionne parfaitement sur ma machine aussi bien sous Excel2003 qu'Excel2007

    A part le changement de déclaration de l'API (Private dans mon code), le code est identique au tien. Par conséquent, je ne vois pas d'où vient l'anomalie et si j'ai apporté de l'eau au moulin.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour et merci pour l'intérêt que tu porte a mon souci

    mais je viens d'essayer ton fichier et le problème reste identique chez moi

    je l'affiche
    je change la combo
    je prend un cliché
    déjà au départ j'ai un bug' le presse papier semble etre vide
    ensuite je re affiche le userform
    je change la combo
    je prend le cliché
    et l'image est collée dans la feuille
    je rechange la combo
    je reprend un cliché
    et la l'image et la meme que la première
    je rechange une 3 eme fois
    et c'est le cliché n°2 qui se colle dans le sheets

    je suis en train de me rendre dingue avec ce truc

    merci pour le retour

    au plaisir
    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

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    J'avais fait les essais sur ma machine dont l'OS est XP.
    Suite à la persistance de ton problème, je me suis mis sur la machine du fiston qui est sous Seven. Sur cet OS, je constate les mêmes problèmes que ceux que tu rencontres.

    Je te proposes le code suivant qui semble tout solutionner :

    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
    Private Declare Sub keybd_event Lib "user32.dll" ( _
      ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Function CloseClipboard& Lib "User32" ()
    Private Declare Function OpenClipboard& Lib "User32" (ByVal hwnd As Long)
    Private Declare Function EmptyClipboard& Lib "User32" ()
     
    Private Sub CommandButton1_Click()
    Dim retour&
    '--- Le presse-papiers ---
    retour& = OpenClipboard(0&) 'Ouvre
    If retour& = 0 Then
      MsgBox "Impossible d'ouvrir le presse papier."
      Exit Sub
    End If
    retour& = EmptyClipboard    'Efface
    retour& = CloseClipboard    'Ferme
    If retour& = 0 Then
      MsgBox "Impossible de fermer le presse papier."
      Exit Sub
    End If
    '--------------------------
    keybd_event vbKeySnapshot, 1&, 0&, 0& ' fenêtre active
    On Error Resume Next
    Do
      Err.Clear
      DoEvents
      Sheets(1).Paste
    Loop Until Err = 0
    On Error GoTo 0
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim Jours
    Jours = Array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche")
    ComboBox1.List = Jours
    End Sub
    Est-ce mieux ?

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

Discussions similaires

  1. [Débutant] explorateur fichier (listview) et cut/copy et paste
    Par waspy59 dans le forum C#
    Réponses: 7
    Dernier message: 01/06/2012, 16h56
  2. Réponses: 0
    Dernier message: 31/12/2008, 15h15
  3. [VBA-E] Probleme COPY PASTE d'une feuille à une autre
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/07/2006, 17h56
  4. Réponses: 5
    Dernier message: 28/06/2006, 14h02
  5. [VBA] word automation copy/paste
    Par Lysis dans le forum VBA Word
    Réponses: 2
    Dernier message: 16/09/2005, 12h45

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