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 :

Copie d'écran et enregistrement en jpg


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut Copie d'écran et enregistrement en jpg
    Comme alternative et complément à la sauvegarde d'une image sous forme de fichier .gif donnée par Cafeine (http://www.developpez.net/forums/sho...ighlight=image) j'ai récupérer ce code dans la FAQ VB6 pour réalisé la sauvegarde d'une copie d'écran et ai tenté de l'adapter à VBA.
    Ma première question est : Est-ce possible ?
    La seconde est : A quoi correspond en VBA Pic.hDC (en rouge)
    (Pic étant ici le nom de l'image dans l'userform)
    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 Function BitBlt Lib "gdi32.dll" ( _
         ByVal hDestDC As Long, _
         ByVal x As Long, _
         ByVal y As Long, _
         ByVal nWidth As Long, _
         ByVal nHeight As Long, _
         ByVal hSrcDC As Long, _
         ByVal xSrc As Long, _
         ByVal ySrc As Long, _
         ByVal dwRop As Long) As Long
    
    Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
    
    Private Declare Function GetDC Lib "user32.dll" ( _
         ByVal hwnd As Long) As Long
    
    Private Const SRCCOPY As Long = &HCC0020
    '______________________________________________________________________________
    
    Private Declare Function FindWindowA Lib "user32" _
            (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      
    Public Sub ScreenShot(Pic As Image)
    'Dim Hdl As Long
        'Hdl = FindWindowA(vbNullString, Me.Caption)
        Pic.PictureSizeMode = 3
        Pic.Width = Me.Width
        Pic.Height = Me.Height
        Pic.Visible = False
        BitBlt Pic.hDC, 0&, 0&, Me.Width, Me.Width, GetDC(GetDesktopWindow()), 0&, 0&, SRCCOPY
        SavePicture Pic.Image, "C:\ScreenShot.bmp"
    End Sub
    
    Private Sub CommandButton1_Click()
        ScreenShot Pic
    End Sub
    Par avance, merci

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour Ousk,
    1) a ta question "Est-ce que c'est possible" ?
    ma réponse est "oui, mais à condition d'afficher l'image là où on peut bénéficier d'un hdc"
    2) je ne comprends pas ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub ScreenShot(Pic As Image)
    associé à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     BitBlt Pic.hDC, 0&, 0&, Me.Width, Me.Width, GetDC(GetDesktopWindow()), 0&, 0&, SRCCOPY
    car un contrôle Image n'a précisément pas de hdc !
    3) si tu en as réellement besoin, je peux te fabricoter quelque chose adapté à VBA, mais avec quelques modifications :
    a) VBA ne travaille pas en Pixels mais en points (mais j'ai déjà fait ce calcul il y a quelque temps ... me reste à le retrouver dans mon fouillis)
    b) le résultat final pourra être envoyé en image d'une UserForm, mais sans l'autoredraw
    c) je pense qu'il serait possible de récupérer le tout dans un contrôle image (je ne crois pas que cela serait trop difficile), mais en passant d'abord par une UserForm...

    Conclusion : je veux bien reprendre mon travail là où je l'ai arrêté brutalement il y a deux ans pour VBA, si tu m'assures que tu en as vraiment besoin.

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello ucfoutu,
    Vraiment besoin ? Pour le moment je fais ça en manuel. Un vrai bricollage.
    Pour le code original, je l'ai trouvé ici, chapitre "Comment faire une capture d'écran ?"Pour la ligne que tu cites, j'ai remplacé Pic As PictureBox par image (que j'ai laissé) mais j'ai testé avec msforms.image, Forms.image... etc.
    Pour ta proposition, tu vois mais ne vas pas te prendre la tête. Si la solution avait existé, ça m'aurait arrangé.
    Comme je sais, grace à Cafeine, enregistrer une copie de cellules en gif et autres, peut-être, dans VBA est-il possible de récupérer une copie d'écran avec Clipboard (?) Tu n'as pas une idée ?
    Merci de ta réponse.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Oui, j'ai déjà une idée...
    Le presse-papier, en effet.

    Mais VBA n'a pas d'objet Clipboard. Qu'à cela ne tienne, on va faire avec deux fonctions de l'Api de Windows. M'en occupe après dîner. Ne cherche plus de ton côté (pâs la peine de s'y mettre à deux).

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok, merci.
    A+

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    J'en bave dans tous les sens...
    1) Ce coquin de VBA ignore ce qu'est la propriété AutoRedraw, ce qui fait que je "perds" mon image d'écran (bien constituée, pourtant) à tous les coups
    2) j'arrive par une autre méthode à la mettre dans le presse-papier (vérifié en allant sous Paint pour voir qu'elle est bien là), mais je ne parvioens toujours pas à l'en extraire ensuite depuis VBA pour la mettre dans un contrôle image....
    Vais laisser un peu et y revenir demain avec plus de calme.

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

Discussions similaires

  1. [Delphi]Copie d'écran dans un fichier jpg
    Par khayyam90 dans le forum Contribuez
    Réponses: 0
    Dernier message: 04/01/2011, 14h23
  2. copie d'écran jpg
    Par youp_db dans le forum Windows
    Réponses: 2
    Dernier message: 20/02/2008, 15h17
  3. Faire une copie d'écran d'un Panel
    Par Wilco dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 17h28
  4. Reformatter un doc word pour en faire des copies d'écran
    Par titouille dans le forum VBA Word
    Réponses: 4
    Dernier message: 22/09/2005, 18h21
  5. Copie d'écran dans un fichier
    Par angsthase dans le forum Autres Logiciels
    Réponses: 12
    Dernier message: 17/08/2005, 00h45

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