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 :

Run-time error '7': Out of memory


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut Run-time error '7': Out of memory
    Bonjour à tous,

    J'ai un fichier excel qui contient un tableau avec des données dans la feuille A.
    Dessous, je possède 20 graphiques, pour les 20 lignes, représentant mes données.

    Le code doit :
    • Récupérer le titre de chaque graphique, qu'il utilisera comme nom de fichier à sauvegarder
    • Sauver chacun des graphiques dans un dossier spécifié.
    • Insérer dans la feuille B l'image sauvée en commentaire pour être affichée au survol de la cellule représentative.


    Voici le code qui fonctionne (ou du moins lors des tests sur 3-4 lignes).

    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
    Sub CMD_EXPORT_GRAPH_FCR()
    Dim INT_I As Integer
     
    Dim STR_IMAGE As String
    Dim STR_FILENAME As String
    Dim STR_SHEET As String
     
    STR_SHEET = "Resume_2019"
     
    For INT_I = 1 To 20
        STR_IMAGE = ActiveSheet.ChartObjects(INT_I).Chart.ChartTitle.Characters.Text
        STR_FILENAME = ThisWorkbook.Path & "\_Graphs\" & STR_IMAGE & ".png"
        ActiveSheet.ChartObjects(INT_I).Chart.Export STR_FILENAME
     
        With Sheets(STR_SHEET).Range("B" & 25 + INT_I)
            .ClearComments
            .AddComment.Text Text:=""
            .Comment.Shape.Fill.UserPicture (STR_FILENAME)
            .Comment.Shape.ScaleHeight 3, msoFalse, msoScaleFormTopLeft
            .Comment.Shape.ScaleWidth 3, msoFalse, msoScaleFromTopLeft
        End With
    Next INT_I
     
     
    End Sub
    Le code en lui-même fonctionne, cependant lorsque j'arrive aux alentours de la 9ème itération, je reçois un message d'erreur de mémoire insuffisante (toujours à la hauteur de cette ligne de code : ".Comment.Shape.Fill.UserPicture (STR_FILENAME)".
    J'ai executé l'application sur différentes machines et le problème est le même.

    Une piste à m'indiquer afin de corriger le tir ?
    A savoir que j'ai initialement ajouté les graphiques en commentaire à la main, ce qui me fait penser qu'il ne peut pas s'agir d'un problème de faisabilité (20 images au total ne me semble pas quelque chose de trop lourd, sauf erreur de ma part).

    PS : Si vous avez une idée pour éviter de passer par la sauvegarde des images mais par la récupération directe de mes graph internes au fichier, je suis preneur aussi si toutefois c'est faisable ^^
    Merci à tous pour vos retours

    Edit 1 : Je viens de tester quelque chose : Si je fais tourner le code une première fois (et qu'il plante à la 9ème itération) et que je sauve. Si je ferme Excel (voire reboot) et que je modifie mon code en faisant la boucle "For INT_I = 9 to 20", il plante encore à l'itération 9 (la première donc), et donc n'avance pas plus loin. Le fait du reboot me laisse penser qu'il ne s'agit pas de soucis de clipboard (bien que je ne sauvais rien dedans dans mon code) mais un semblant de limite d'images dans l'excel via VBA (je rapelle qu'en mode manuel, j'avais su importer les 20 images en commetaire) ... ma piste semble bonne ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour,

    je ne saurais dire d’où cela viens mais si tu veux essayer de vider le presse papier voici un petit code dédié à cela :

    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
    Option Explicit
     
    #If VBA7 Then
        Private Declare PtrSafe Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As LongPtr
        Private Declare PtrSafe Function CloseClipboard Lib "User32" () As LongPtr
        Private Declare PtrSafe Function EmptyClipboard Lib "User32" () As LongPtr
    #Else
        Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
        Private Declare Function CloseClipboard Lib "User32" () As Long
        Private Declare Function EmptyClipboard Lib "User32" () As Long
    #End If
     
     
    Public Sub ViderPP()
        'Ouverture du presse-papier
        OpenClipboard 0&
        'On vide le presse-papier
        EmptyClipboard
        'Fermeture du presse-papier
        CloseClipboard
    End Sub
    A+

    Edit : j'aurai du ajouter que j'ai fait un fichier qui déplace des images insérées dans des cellules vers le commentaire de ces cellules donc un peu ce que tu fais et dés le début et par expérience je me suis pas posé de question j'ai directement mis en place le vidage du presse papier. Aujourd'hui cela fonctionne sur des listes de 500 références avec images et ce sans problème .

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut
    Hello !
    Merci pour cette première piste.
    Comme je l'imaginais, malheureusement celà ne fonctionne pas.
    J'ai intégré ton code et fait un "Call ViderPP" à la première ligne dans mon "For ... Next", mais toujours plantage à la 9ème ligne. :s

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Ah mince !

    As tu essayé, juste pour voir de t’arrêter à la 8ieme image puis sauver, fermer et relancer la macro à la 9ieme ... je me demande si cela ne viendrais pas d'une autre limitation propre à excel... en générale le format PNG donne de gros fichier et je me demande si cela ne viens pas de cela ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut
    Effectivement, j'ai remplacé mes limites "en dur" de mes boucles for par des inputbox pour définir moi-même de quelle ligne à quelle ligne executer, et quelque fois à partir de 9 lignes, quelques fois à partir de 13 lignes ca bloque.
    Ce que je trouve étrange, c'est que comme je l'ai mentionné, je peux affecter les 20 images (qui font entre 7 et 18KB chacune) si je le fais à la main, mais si je l'automatise ça plante à ~9, ce qui intrigue ma logique :p

    Pour ce qui est de ta proposition, je l'ai fait (la partie Edit 1 de mon message) et ca plante toujours au même endroit :s

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Ah oui ok pour l’édit du premier message j'avais loupé cette partie!

    et en terme de taille d'image (dimension je veux dire) serait il possible que l'image 9 soit au delà de ce qui est acceptable pour un commentaire ?

Discussions similaires

  1. [XL-2010] Probleme Out of Memory Run time error 7 sur macro
    Par Aiyolia dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/02/2017, 14h36
  2. [XL-2013] Run-time error '9': Subscript out of range
    Par francoisem dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/12/2014, 09h06
  3. Error lancement dll dans VBA: Run-time error '28' - Out of stack space
    Par cfrelet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2010, 10h30
  4. [debutant] Run-time error '9': Subscript out of range
    Par NikoBe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/12/2008, 08h26
  5. [VBA] Run-time error : '35600' Index out of bound
    Par neo2k2 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/03/2008, 16h23

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