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 :

agrandir le contenu de l'image (zoom) [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut agrandir le contenu de l'image (zoom)
    Bonjour,

    je viens ici pour trouver de l'aide. Je n'arrive pas à lire correctement le contenu d'une image.

    Je copie beaucoup de cellules depuis un autre fichier excel source.
    Les cellules copiées sont passées en image pour afficher celle-ci dans un userform dans mon fichier excel cible.

    voici mon 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
    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
    51
    52
    53
    54
    55
    56
    Private Sub UserForm_Click()
    Dim Wbk1 As Object
    Dim Wbk As Workbook
    Dim pic_rng As Range
    Dim NomImage As String
    Dim sh_temp As Worksheet
    Dim ch_temp As Chart
    Dim PicTemp As Picture
     
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
     
    Set Wbk = Workbooks.Open("test.xls") 'On ouvre le fichier contenant les donnees a recuperer pour image
    Wbk.Unprotect
    Worksheets("t").Activate
    Worksheets("t").Select
    Worksheets("t").Unprotect
     
    Set pic_rng = Sheets(1).Range("A5:K9") 'faire le xlendup plus tard
     
     
     
    Set sh_temp = Worksheets.Add
    Charts.Add
    ActiveChart.Location where:=xlLocationAsObject, Name:=sh_temp.Name
    Set ch_temp = ActiveChart
    pic_rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    ch_temp.Paste
    Set PicTemp = Selection
    With ch_temp.Parent
    .Width = PicTemp.Width
    .Height = PicTemp.Height
    End With
    ch_temp.Export Filename:=ThisWorkbook.path & "\" & "range_output.jpeg"
     
     
    Application.DisplayAlerts = False
     
    NomImage = ThisWorkbook.path & "\" & "range_output.jpeg"
    UserForm7.Image1.AutoSize = False 'true ou false ça ne fait rien
    UserForm7.Image1.PictureSizeMode = fmPictureSizeModeZoom
     
     
    UserForm7.Image1.Picture = LoadPicture(NomImage)
     
     
    sh_temp.Delete
     
    Wbk.Close
    Set Wbk1 = Nothing
    Set Wbk = Nothing
     
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
     
    End Sub

    si je mets à cette ligne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set pic_rng = Sheets(1).Range("A5:K9") 'faire le xlendup plus tard
    j'obtiens cela dans mon userform7.image1
    Nom : ligne plus grosse.jpg
Affichages : 194
Taille : 58,8 Ko
    des lignes lisibles et grosses

    si je veux tout le contenu de mon fichier alors je mets ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set pic_rng = Sheets(1).Range("A5:K203") 'faire le xlendup plus tard
    sachant que dans 5 jours le K203 sera peut être passé à K252 par exemple

    j'obtiens comme image alors ceci dans mon userform7.image1
    Nom : toutes les lignes.jpg
Affichages : 176
Taille : 113,9 Ko
    tout est comprimé et j'en suis déprimé

    comment faire pour qu'avec beaucoup de ligne j'obtienne le même résultat qu'avec 5 lignes par exemple. j'ai l'impression que prendre de "A5:K203" il n' y a pas "de mise à l'échelle" et qu'il faudrait faire 5 lignes par 5 lignes enregistrer dans une image et autant d'image que j'aurai de bloc de 5 images mais c'est ingérable.


    En espérant exposé clairement mon soucis.
    Merci d'avance si vous avez astuce ou idée.

  2. #2
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 432
    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 432
    Points : 2 191
    Points
    2 191
    Par défaut
    Bonjour,
    Regarde l'option autosize du contrôle

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Hélas non, je l’ai mis dans mon code avec autosize à true ou false ni fait rien.
    Ce n’est pas l’image (son cadre) que je veux agrandir mais son contenu.
    C’est à dire que image1.width=500 et par exemple image1.height=1200, le cadre s’agrandit mais le contenu reste illisible.

    Je pense que les propriétés de l’image n’y feront rien.


    C’est peut etre la méthode qui n’est pas bonne.
    dés le départ je veux pouvoir consulter le contenu du fichier excel source avec ses mises en formes dans une image ou autre objet… pour de la consultation.

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 973
    Points : 9 331
    Points
    9 331
    Par défaut
    Hello,
    et en utilisant une image dans une Frame avec barres de défilement ?
    Nom : ImageScroll.png
Affichages : 156
Taille : 144,9 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Merci pour l’aide.

    Pas essayer le frame, je me suis orienté vers une listbox. Hmm je vais tenter le frame et je vous dirai.

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Bonjour Jurrasic

    Je n'arrive pas obtenir ce que vous avez fait.

    j'ai fais un listbox ok, mais j'aimerais bien connaitre comment vous avez fait pour rendre lisible le range.

    merci

  7. #7
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 951
    Points : 4 063
    Points
    4 063
    Par défaut
    Bonjour,
    Dans la création de l'image, au lieu de
    Format:=xlPicture
    Mettre
    Format:=xlBitmap
    Qui permet une meilleure qualité d'image.

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 973
    Points : 9 331
    Points
    9 331
    Par défaut
    Hello,
    voici le code d'un formulaire constitué d'un bouton (Commandbutton1) d'un contrôle Frame (Frame1) avec dedans un contrôle Image (Image1). Quand on clique sur le bouton on charge l'image du fichier défini pr Img.
    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
    Private Sub CommandButton1_Click()
    Dim dimension
    Const img = "d:\temp\range.png"
    dimension = dimension_image(img)
     With Frame1
            .ScrollBars = fmScrollBarsBoth
            .Image1.Top = 0
            .Image1.Left = 0
            .Image1.BorderStyle = fmBorderStyleNone
            .Image1.PictureSizeMode = fmPictureSizeModeClip
            .Image1.Picture = LoadImage(img)
            .Image1.Width = dimension(0) / PtoPx
            .Image1.Height = dimension(1) / PtoPx
            .ScrollWidth = dimension(0) / PtoPx
            .ScrollHeight = dimension(1) / PtoPx
     End With
    End Sub
     
     
    Private Sub UserForm_Initialize()
     With Frame1
            .ScrollBars = fmScrollBarsBoth
            .Image1.Top = 0
            .Image1.Left = 0
            .Image1.BorderStyle = fmBorderStyleNone
            .Image1.PictureSizeMode = fmPictureSizeModeClip
     End With
    End Sub
    Private Function dimension_image(chemin)
         Dim img As Object
        With CreateObject("WIA.ImageFile"): .LoadFile chemin: dimension_image = Array(.Width, .Height): End With
    End Function
    Private Function PtoPx()
    PtoPx = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72
    End Function
     
     
    Function LoadImage(ByVal Filename As String) As StdPicture
            With CreateObject("WIA.ImageFile")
                    .LoadFile Filename
                    Set LoadImage = .FileData.Picture
            End With
    End Function
    A noter que grâce à la fonction LoadImage on peut charger un Png dans le contrôle Image (code de Patricktoulon).
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 973
    Points : 9 331
    Points
    9 331
    Par défaut
    Hello,
    voici une version avec enregistrement d'une plage en fichier image puis affichage de cette image :
    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
    Private Sub CommandButton1_Click()
    Dim dimension, cho As ChartObject, ImgSelect As Object
    Const img = "d:\temp\range.png"
    Sheets("Feuil1").Range("A1:B11").CopyPicture xlScreen, xlBitmap
    Sheets("Feuil1").Paste
    Set ImgSelect = Application.Selection
    Set cho = Sheets("Feuil1").ChartObjects.Add(Left:=ImgSelect.Left, Top:=ImgSelect.Top, _
                               Width:=ImgSelect.Width, Height:=ImgSelect.Height)
    cho.Select
    Application.ActiveChart.Paste
    Application.ActiveChart.Export Filename:=img, FilterName:="PNG"
    ImgSelect.Delete
    cho.Delete
    dimension = dimension_image(img)
     With Frame1
            .ScrollBars = fmScrollBarsBoth
            .Image1.Top = 0
            .Image1.Left = 0
            .Image1.BorderStyle = fmBorderStyleNone
            .Image1.PictureSizeMode = fmPictureSizeModeClip
            .Image1.Picture = LoadImage(img)
            .Image1.Width = dimension(0) / PtoPx
            .Image1.Height = dimension(1) / PtoPx
            .ScrollWidth = dimension(0) / PtoPx
            .ScrollHeight = dimension(1) / PtoPx
     End With
     Kill img
    End Sub
    Nom : AfficherImage.gif
Affichages : 141
Taille : 164,1 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Bonjour jurassic

    Je n’arrive pas obtenir le même rendu car j’applique la procédure du post#1.

    Réponse post#7: effectivement,ça améliore,mais d’un zeste pas flagrant donc pas mieux

    Réponse au post#2: autosize à false ou true, ca ne change rien

    Post#8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Const img = "d:\temp\range.png"
    En fait comment est construit votre fichier png?

    Questions:
    - Comme moi vous faites un «*ctrl-imprime ecran*» puis «*paint*» puis enregistrez sous range.png ?
    - pourriez vous, svp, refaire mais avec un range=(«*A5:I134*») pour voir le résultat/rendu et comparer svp ?

    Franchement je n’ai toujours pas le rendu même en tapant votre code, je pense que c’est la façon d’enrgistrer l’image mais j’attends de voir avec un range plus grand

  11. #11
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Bon ça,*»marchotte*»

    Mais j’ouvre depuis un autre fichier excel je trouve galère ça rame, si je fais avec 250 voir 1000lignes qu’en sera t’il ?!

    J’ai eu l’erreur 1004 parfois lors de la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sheets("Feuil1").Range("A1:B11").CopyPicture xlScreen, xlBitmap
    Perso je suis obligé de faire un worbook.open au prealable puis
    Workbooks.sheets(1).range(«*A1:B11*»).copypicture xlscreen,……..

    Je me rends compte que ça rame

  12. #12
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Désolé mais je relance mon post#11,
    La solution fonctionne mais pas optimum.
    En effet, j'effectue un workbook.open pour ouvrir le fichier excel cible et l'afficher dans un USF du fichier source.

    Est-ce possible selon vous de le faire depuis un fichier fermé (tout en conservant les mises en forme des cellules) ?

  13. #13
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 973
    Points : 9 331
    Points
    9 331
    Par défaut
    Hello,
    Citation Envoyé par esse2016 Voir le message
    En effet, j'effectue un workbook.open pour ouvrir le fichier excel cible et l'afficher dans un USF du fichier source.
    Est-ce possible selon vous de le faire depuis un fichier fermé (tout en conservant les mises en forme des cellules) ?
    Je pense que cela n'est pas possible car si tu n'ouvres pas ton fichier dans EXCEL tu n'auras pas la représentation graphique des cellules, seulement les données.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  14. #14
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    Bonjour Jurassic,

    Dans çe cas je cloture la discussion, on considère que c’est solutionné.

    Merci encore.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonjour Ami calmant,

    Petite question complémentaire comment adapter la taille de l'image à la taille du contrôle image.

    Merci d'avance pour votre réponse.

    Cordiales salutations @+

  16. #16
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 973
    Points : 9 331
    Points
    9 331
    Par défaut
    Hello,
    Citation Envoyé par modus57 Voir le message
    Petite question complémentaire comment adapter la taille de l'image à la taille du contrôle image.
    c'est à dire ? parce que c'est ce qu'il y a dans mon dernier code : les barres de défilement correspondent à la taille de l'image par rapport à la taille du contrôle.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonjour Ami calmant,

    Navré d’avoir posé une question aussi basic.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'pour adapter l'image au contrôle mettre les lignes suivantes en commentaire
    '.Image1.Width = dimension(0) / PtoPx
    '.Image1.Height = dimension(1) / PtoPx
    '.ScrollWidth = dimension(0) / PtoPx
    '.ScrollHeight = dimension(1) / PtoPx
    .Image1.PictureSizeMode = fmPictureSizeModeStretch
    Bonne après-midi.

  18. #18
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut relance le sujet
    Bonjour,

    Je reviens, ici je croyais en avoir terminé avec le sujet en fait non.
    Lorsque j'ouvre certains fichier l'image dans ma frame sont petite, et sur d'autres fichiers l'image correspond parfaitement à la question de cette discussion ouverte au post#1

    J'ai regardé la différence des fichiers je ne vois rien, ils sont tous en zoom=100%. Alors je ne sais pas où peut venir cette différence ?

    une idée ?

  19. #19
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 294
    Points : 87
    Points
    87
    Par défaut
    En relançant l'ordinateur c'est passé.

    -> Ensuite j'ai eu une erreur du type erreur 1004 copyofpicture of method class failed
    -> j'ai mis du coup le "application" devant le sheets("Feuil1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Sheets("Feuil1").Range("A1:B11").CopyPicture xlScreen, xlBitmap

    Là au moment j'écris ça passe


    -> Je me demande également (en plus du "application")
    si j'effectue la copyofpicture avant que le excel fermé ne soit pas totalement ouvert qu'est ce que cela fait ?

    des avis pour ceux qui ont la patience et l'envie merci d'avance

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

Discussions similaires

  1. [D7]image zoomée et modification
    Par dleu dans le forum Delphi
    Réponses: 2
    Dernier message: 17/01/2007, 17h59
  2. Réponses: 6
    Dernier message: 15/01/2007, 11h15
  3. Agrandir la taille d'une image
    Par Bouassa dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 01/03/2006, 11h22
  4. [Image] zoom et redimensionnement
    Par ryo ohki dans le forum 2D
    Réponses: 6
    Dernier message: 09/09/2005, 01h03
  5. [Image] Zoom Dezoom
    Par cyber_jad dans le forum 2D
    Réponses: 5
    Dernier message: 12/11/2004, 14h30

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