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 :

Souci pour enregistrer une plage de cellules en image (fonctionne partiellement)


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur SAV
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur SAV

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Souci pour enregistrer une plage de cellules en image (fonctionne partiellement)
    Bonjour,

    Dans un fichier que j'utilise, je souhaite pouvoir enregistrer un tableau sous format d'image (sans mon OneDrive). Je réutiliserai cette image par ailleurs.
    J'ai déjà fait quelques recherches et je pense ne pas être loin du compte. Le code que j'ai enregistré fonctionne sous condition. Je m'explique:
    Le code prévois de créer un "ChartObject" et que la plage de cellule que je copie y soit collée.
    • lorsque j'exécute le code pas à pas à l'aide de la touche F8, j'obtiens le résultat souhaité: dans le dossier prévu à cet effet, j'ai bien une image qui se crée à l'emplacement voulu et avec le nom voulu
      lorsque j'exécute la macro "en bloc", le contenu du presse papier ne se colle pas dans l'objet créé à cet effet mais dans la cellule active; que je le fasse de puis le bouton dans VBA ou directement depuis Excel. Dans ce cas, un fichier se crée avec le bon nom et au bon endroit mais elle est vide.

    Je ne comprends pas pourquoi cela fonctionne dans un cas et pas dans l'autre. Pouvez-vous m'aider?

    Voici le 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
    Sub exportjpg()
     
    Dim Plage As Range
     
    Set Plage = Range("P4:T27")
    Dim fichier As String
    fichier = "Tableau Devis " & Range("C2") & ".jpeg"
     
     
    Application.ScreenUpdating = False
    Plage.CopyPicture
    ActiveSheet.Paste
    With ActiveSheet.ChartObjects.Add(0, 0, _
    Selection.Width, Selection.Height).Chart
     
    .Paste
     
     
    .Export "C:\Users\chemin de sauvegarde\" & fichier, "jpeg"
     
    End With
     
     
    End Sub
    Merci d'avance,

    Jean-Michel

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En VBA et sauf cas exceptionnel, il est parfaitement inutile d'utiliser les méthodes Activate, Select, etc. ainsi que les objets Selection, ActiveCell, ActiveSheet
    Utilisez des variables objets en spécifiant la parentalité complète de l'objet et cela ira mieux.
    Pour une cellule la parentalité complète est Classeur.Feuille.Cellule pour un tableau croisé dynamique, c'est Classeur, Feuille, TableauCroiséDynamique, etc.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur SAV
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur SAV

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour Monsieur,

    Merci d'avoir pris la peine de me répondre. Je prends bonne note de votre conseil. Je vous avoue cependant ne pas voir très clairement ce que cela changera à ma problématique.
    Dans le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ActiveSheet.ChartObjects.Add(0, 0, _
    Selection.Width, Selection.Height).Chart
     
    .Paste
    si j'utilise le pas à pas, le ".paste" se fait bien sur le "ChartObjects". Par contre, lorsque j'exécute "d'une traite", le collage ne s'effectue pas

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par JMPBO Voir le message
    Je ne comprends pas pourquoi cela fonctionne dans un cas et pas dans l'autre. Pouvez-vous m'aider?
    Ton souci vient sans doute de la vitesse du système, je te propose ceci qui fonctionne chez moi.
    Il y a l'attente du presse papier libre et la suppression des copies intermédiaires.
    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
    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
    Sub exportjpg()
    Dim plage As Range, chart1 As Object, libre As Long
    Dim fichier As String
        fichier = "Tableau Devis " & Range("C2") & ".jpeg"
        With Sheets("Feuil1") ' à modifier
            Set chart1 = .ChartObjects.Add(0, 0, 1, 1).Chart
            Set plage = .Range("P4:T27")
            With chart1
                With .Parent
                    .Width = plage.Width: .Height = plage.Height: .Left = plage.Width + 20:
                    plage.CopyPicture
                    Do: DoEvents: libre = IsClipboardFormatAvailable(14): Loop While libre = 0    'Or (Timer - T) > 1000
                    Do: DoEvents: Loop Until .Chart.Pictures.Count = 0
                    .Chart.Paste
                    Do: DoEvents: Loop While .Chart.Pictures.Count = 0
                    .Chart.Export "C:\Users\chemin de sauvegarde\" & fichier, "jpeg"
                    .Chart.Pictures(1).Delete
                End With
            End With
            chart1.Parent.Delete
        End With
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur SAV
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur SAV

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    merci pour cette réponse. Je testerai cela demain et je mettrai le sujet à jour en fonction du résultat

  6. #6
    Candidat au Club
    Homme Profil pro
    Directeur SAV
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur SAV

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Cela fonctionne, merci.
    Je devrai par contre rester attentif au zoom. La taille de l'image dépend en effet de la taille affichée à l'écran.

  7. #7
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,

    La taille de l'image dépend en effet de la taille affichée à l'écran
    C'est une photo donc cela parait normal mais tu peux rajouter au début de la macro la modification du zoom, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            ActiveWindow.Zoom = 120

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

Discussions similaires

  1. [XL-2007] Enregistrer une plage de cellule en pdf.
    Par Cadet69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/01/2015, 19h03
  2. pb pour creer une plage de cellules variables
    Par jumpman dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/04/2012, 20h02
  3. enregistrer une plage de cellules dans un autre fichier
    Par Kiphrine dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2009, 10h14
  4. Comment utiliser Range(cells(... pour indiquer une plage de cellules
    Par gerald57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/05/2008, 10h35
  5. Modification d'une fonction pour selectionner une plage de cellule
    Par jackbauer972 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/08/2007, 15h07

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