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 :

[Pro] Export image sur disque d'une sélection variable de range d'un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut [Pro] Export image sur disque d'une sélection variable de range d'un tableau
    Bonjour,
    Premier post pour moi autodidacte...

    Voilà un bout de "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
        Valeur = Range("H2").Value
        Dim S As Range
        Set S = Sheets("Classement Championnat").Range("A1", "G" & Valeur)
        S.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
     
        Application.ScreenUpdating = True
        Workbooks.Add
     
        With ActiveSheet.ChartObjects.Add(0, 0, S.Width, S.Height).Chart
        .Paste
        .Export "C:\***.png", "PNG"
        End With
     
        ActiveWorkbook.Close False
    Alors voilà, je sèche totalement car voyez-vous en pas à pas dans le débogueur pas de soucis j'ai mon image enregistré sur le disque ...
    Mais lors de l'exécution du bouton affecté à cette macro l'export copie une image vide (toujours enregistré sur le disque)

    Pourquoi dieu cela fonctionne-t-il en pas à pas et pas après Grrr!
    Help please.
    Merci par avance !

  2. #2
    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
    je parie a 10 contre 1 que tu tourne sur 2013 ou 2016 ou plus
    inspire toi de cela
    https://www.developpez.net/forums/d1...-excel-2016-a/
    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

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Juste avant ton Set S =, mets un MsgBox(ActiveWorkbook.Name) pour vérifier que c'est au bon classeur que la Sheet qui suit est liée.

  4. #4
    Candidat au Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut
    Alors merci pour ces infos, utiles dans le sens où elles m'ont conforté dans le fait qu'il s’agissait bien d'un soucis de "Timing" (désolé je parle avec mes mots)

    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
    ...
        Valeur = Range("H2").Value
        'Range("A1", "G" & Valeur).Select
        'Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
        Dim S As Range
        'MsgBox (ActiveSheet.Name)
        Set S = Sheets("Classement Championnat").Range("A1", "G" & Valeur)
        S.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
     
        Application.ScreenUpdating = False
        Workbooks.Add
        With ActiveSheet.ChartObjects.Add(0, 0, S.Width, S.Height).Chart
        DoEvents
        DoEvents
        DoEvents
        DoEvents
        DoEvents
        .Paste
        .Export "C:\Users\Papa\Desktop\ExtractionClassementChampionnat.png", "PNG"
     
        End With
     
        ActiveWorkbook.Close False
    ...
    le do: Until: ... ne fonctionne pas chez moi
    3 constatations:
    1) c'est avant le Paste qu'il y avait soucis
    2) j'ai besoin de 4/5 DoEvents pour que cela passe
    => merci de me dire si possible comment simplifier ça sans rien modifier du reste du code, j'entends par là ne pas toucher à mon With ActiveSheet.ChartObjects.Add(0, 0, S.Width, S.Height).Chart.
    3) si le Application.ScreenUpdating est sur False (permet d'accélérer la macro) et bien c'est KO également donc bien mettre = True.

  5. #5
    Candidat au Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut
    Ceci étant quasi résolu, mon second objectif serait de récupérer (tjrs en VBA depuis le même simple bouton sur page Excel)
    ce même fichier tout fraîchement exporté sur mon disque pour utiliser un hébergeur d'images tel que sur goopics.net qui n'accepte que le glisser/coller ou la recherche de l'emplacement disque et de lui demander de me créer un URL de cette image.

    Le troisième objectif sera d'aller récupérer cet URL et juste me le mettre dans le presse papier (mais ça je dois et devrais y parvenir)...

    Si il y a plus simple du style Excel qui créerait des URL pour stocker une image jsuis preneur mais jpense pas hein

    Si qq'un à un lien d'études déjà faites pour la récup d'un fichier sur "emplacement disque et glisser coller sur zone web" bah je veux bien hihi

    Merci encore !!!

  6. #6
    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
    re
    résolu c'est vite dit
    tes doevents sont suffisant aujourd'hui mais demain si ton pc fait des taches en arrière plan ou sur un autre pc moins puissant pourrait même provoquer un white-screen
    et ben la tu sera chocolat

    je t'ai adapté une petite fonction par rapport a ma contribution

    le principe comme je le dit c'est d'interroger le clipboard dans un do loop pour savoir si les data corresponde au format xlpicture
    l'attente est juste ce qui faut puisqu'on sort du do:loop quand le clipboard est prêt

    tu peux copier une plage ou une shapes tu a les deux

    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
    #If VBA7 Then
        Private Declare ptrsafe Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long
    #Else
        Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long
    #End If
     
    Function Copy_All_To_Fichier(obj As Variant, desti As String)
        Dim hPicAvail&, i&
        With CreateObject("htmlfile").parentwindow.clipboardData.clearData("Text"): End With    'on vide le clipboard entre chaque copie pour tester vraiment le available
        Application.ScreenUpdating = False
        obj.CopyPicture    'Appearance:=xlScreen, Format:=xlBitmap
        Do: i = i + 1: DoEvents: hPicAvail = IsClipboardFormatAvailable(14): Loop While hPicAvail = 0 Or i = 5000
       If hPicAvail = 0 Then MsgBox "le clipboard n'a pas d'image": ActiveWorkbook.Close False
            Workbooks.Add
        With ActiveSheet.ChartObjects.Add(0, 0, obj.Width, obj.Height).Chart
            .Paste:
            Do: DoEvents: Loop While .Pictures.Count = 0
             .Export desti, UCase(Mid(desti, InStrRev(desti, ".") + 1))
        End With
        ActiveWorkbook.Close False
    End Function
    deux subs pour la tester

    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
     
    Sub test_copie_Range()
        Dim valeur, s As Range, chemin$
        valeur = 10    'Range("H2").Value
        chemin = "C:\Users\polux\Desktop\ExtractionClassementChampionnat.png"
        Set s = Sheets(1).Range("A1", "G" & valeur)
        Copy_All_To_Fichier s, chemin
    End Sub
    '
    Sub test_copie_shape()
        Dim valeur, s As Variant, chemin$
        chemin = "C:\Users\polux\Desktop\mashape.png"
        Set s = Sheets(1).Shapes("Ellipse 1")
        Copy_All_To_Fichier s, chemin
    End Sub
    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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2011, 17h36
  2. Tranfert d'un fichier image sur disque dur externe
    Par jp_developpeur dans le forum Windows XP
    Réponses: 6
    Dernier message: 27/08/2009, 09h29
  3. Enregistrer sur disque dur, une image url
    Par Sylvain245 dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2009, 22h27
  4. [BufferedImage] Redimensionner / Sauvegarder image sur disque
    Par nicolas.pied dans le forum Multimédia
    Réponses: 1
    Dernier message: 17/04/2007, 02h54
  5. enregistrer image sur disque avec URL
    Par meufeu dans le forum Langage
    Réponses: 8
    Dernier message: 26/10/2005, 12h55

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