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 :

Surcharge picture.insert en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 21
    Par défaut Surcharge picture.insert en VBA
    Bonjour à tous,

    J'ai un problème sur mon code VBA et plus précisément sur le picture.insert.

    Je m'explique. Mon picture.insert est compris dans une boucle qui me permet d'insérer en face de chaque nom d'image la photo qui lui correspond en colonne B.
    C'est un code pas du tout compliqué mais lorsqu'il arrive sur cette partie d'insertion d'image le vba rame, lorsque je dépasse la dizaine d'images à insérer, et fait bugger totalement l'excel.

    Auriez-vous une solution à mon problème?

    Je vous remercie par avance ^^

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    1) on ne voit pas ton code !
    2) j'ai également observé que lorsque je mettais dans mon sac, l'un à la suite de l'autre, des poids de 20 kg, j'avais de plus en plus de difficultés à transporter mon sac, au point de ne même plus pouvoir le soulever au bout de quelques poids ainsi rajoutés (quand les anses du sac ne cassaient pas, en plus ...). Une solution à mon problème ?

    Plus sérieusement : on évite de surcharger ainsi la mémoire. On se contente au besoin de ne mémoriser que le chemin d'une image et de ne l'afficher que sur demande.

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par unparia Voir le message
    1) on ne voit pas ton code !
    +1

    2) j'ai également observé que lorsque je mettais dans mon sac, l'un à la suite de l'autre, des poids de 20 kg, j'avais de plus en plus de difficultés à transporter mon sac, au point de ne même plus pouvoir le soulever au bout de quelques poids ainsi rajoutés (quand les anses du sac ne cassaient pas, en plus ...). Une solution à mon problème ?
    Faire de la musculation?

    Plus sérieusement : on évite de surcharger ainsi la mémoire. On se contente au besoin de ne mémoriser que le chemin d'une image et de ne l'afficher que sur demande.
    Ca dépend de la taille de l'image et du nombre d'image, lrital05 parle de seulement une dizaine d'image, il me semble peux quand même en afficher plus que ça sans planter, même si les images sont un peu lourdes.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour halaster
    Ca dépend de la taille de l'image et du nombre d'image, lrital05 parle de seulement une dizaine d'image, il me semble peux quand même en afficher plus que ça sans planter, même si les images sont un peu lourdes
    c'est bien pour cela que j'ai comparé avec l'ajout de poids de 20 kg dans mon sac ... (200 kgs, c'est lourd ... et les anses craquent avant, même si l'on est haltérophile)

    EDIT : et sans compter que :
    - ce sera la mémoire système, qui posera problème. Si la mémoire vive est déjà encombrée (autres applis, etc ...) on passe en mémoire swap de Windows (beaucoup plus lente et elle-même peut-être déjà encombrée)
    - l'ouverture d'un classeur est accompagnée d'un fichier temporaire qui n'est supprimé qu'à la fermeture. La possibilité d'utiliser des Undo impose par ailleurs la conservation en mémoire des actions antérieures, jusqu'à la sauvegarde. La facture peut alors être assez salée dans certains cas

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par lrital05 Voir le message
    Bonjour à tous,

    J'ai un problème sur mon code VBA et plus précisément sur le picture.insert.

    Je m'explique. Mon picture.insert est compris dans une boucle qui me permet d'insérer en face de chaque nom d'image la photo qui lui correspond en colonne B.
    C'est un code pas du tout compliqué mais lorsqu'il arrive sur cette partie d'insertion d'image le vba rame, lorsque je dépasse la dizaine d'images à insérer, et fait bugger totalement l'excel.

    Auriez-vous une solution à mon problème?

    Je vous remercie par avance ^^
    Plus de mémoire vive. En supposant que ce soit un Windows à 64 bits. Parce que, windows à 32 bits est limité en pratique autour de 3 Go.

    Parce que Excel a constamment besoin de tous ses classeurs en mémoire vive pour fonctionner.

    Donc utiliser Excel pour cela, cela relève du cordonnier (bien) mal chaussé, ou du psychiâtre qui se lève un bon matin et qui décide d'installer une prothèse de la hanche.

    Citation Envoyé par unparia Voir le message
    - l'ouverture d'un classeur est accompagnée d'un fichier temporaire qui n'est supprimé qu'à la fermeture. La possibilité d'utiliser des Undo impose par ailleurs la conservation en mémoire des actions antérieures, jusqu'à la sauvegarde. La facture peut alors être assez salée dans certains cas
    Surtout quand on est chef de projet dans une boîte visiblement trop pingre pour équiper son personnel comme des vrais professionnels. Quand je pense à tout ce que cela leur coûte de payer le temps perdu â du bricolage improductif avec un outil in(més)adapté; une license Visual Studio, serait rentabilisée le temps de le dire.

  6. #6
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 21
    Par défaut
    Je voulais passer par visual studio mais j'ai besoin de rester sous Excel pour que les utilisateurs du programme puissent faire des modifications. Et comme les futurs utilisateurs ne connaissent qu'Excel, je suis obligé de rester sur cette solution.

    Je suis obligé d'insérer les images car c'est pour nos clients et ils les veulent à chaque fois en face pour qu'ils n'aient pas à cliquer sur le lien à chaque fois.

    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
                         If ligne = 0 Then
                            Set emplacement = Sheets("fiche").Cells(l, 1)
                        Else
                            Set emplacement = Sheets("fiche").Range("a" & l & ":" & "a" & l + ligne - 1)
                        End If
     
     
     
    strShpUrl = Sheets("BDD").Cells(ligneimage, 8).Value
     
     
       With emplacement.Parent
     
          .Pictures.Insert (strShpUrl)
     
          .Shapes(.Shapes.Count).Left = emplacement.Left
     
          .Shapes(.Shapes.Count).Top = emplacement.Top
     
       End With

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par lrital05 Voir le message
    Je voulais passer par visual studio mais j'ai besoin de rester sous Excel pour que les utilisateurs du programme puissent faire des modifications. Et comme les futurs utilisateurs ne connaissent qu'Excel, je suis obligé de rester sur cette solution.
    Donc, tous les Services de dictature informatique ont décidé d'un commun accord qu'aucun utilisateur n'étant pas passé par une entreprise de lavage de cerveau qui forme des dieux du PC, n'est asssez intelligent pour apprendre autre chose qu'Excel. Dire que des individus pareils imposent leurs vues sur des organisations entières.

    Je suis obligé d'insérer les images car c'est pour nos clients et ils les veulent à chaque fois en face pour qu'ils n'aient pas à cliquer sur le lien à chaque fois.
    PowerPoint est fait pour cela, entres autres. Et si le Service de dictature informatique est trop pauvre pour équiper les utilisateurs, il y a une solution gratuite. Tout ce que les pauvres nouilles ont à faire c'est de le télécharger en espérant que tous leurs ignares aient Windows 10:

    https://www.microsoft.com/store/apps/9wzdncrd2g0j

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    hello,

    Citation Envoyé par lrital05 Voir le message
    le vba rame, lorsque je dépasse la dizaine d'images à insérer, et fait bugger totalement l'excel.
    Quelle taille (en octets) et quelle dimension ont tes images en moyenne ?
    As-tu essayé de désactiver le rafraîchissement d'excel pendant l'insertion de tes images ? Pour cela faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.ScreenUpdating = False
    avant la boucle d'insertion des images
    et faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    une fois que l'insertion est terminée.

    Ami calmant, J.P

  9. #9
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 21
    Par défaut
    Je vais voir pour Sway si c'est possible.

    Sinon j'avais bien désactivé le rafraîchissement d'Excel mais rien n'y fait.
    Les photos font 2 ko en moyenne donc je pensais que ca passerait sans aucun problème.

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    sous Excel 2003 je dépasse la centaine de fichiers et encore plus gros et ce, sans souci …
    Mais la taille du classeur prenant un embonpoint certain, en dehors de la fonctionnalité Office
    permettant de réduire leurs tailles, mieux vaut les lier au lieu de les importer …

    Pas eu de souci non plus avec les versions 2007 & 2010 …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    hello
    Citation Envoyé par lrital05 Voir le message
    Les photos font 2 ko en moyenne donc je pensais que ca passerait sans aucun problème.
    c'est bizarre avec le code qui suit , avec 50 images de 4K en moyenne , l'exécution est quasi instantanée et je n'ai pas mis de Application.ScreenUpdating .
    La macro consiste à lire tous les fichiers jpg d'un répertoire qui représentent des photos avec un nom de fichier sous la forme <prénom>_<nom>.jpg
    On écrit le prénom dans la colonne A, le nom dans la colonne B, et on insére la photo en colonne C .
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub ChargeTrombinoscope()
        Dim Chemin As String, Fichier As String
        Dim Nom, Prénom As String
        Dim splitArr() As String
        Dim Ligne As Integer
        Worksheets("Trombi").Activate
     
        'Définit le répertoire contenant les fichiers
        Chemin = "F:\temp\Trombinoscope\"
        'Boucle sur tous les fichiers jpg du répertoire.
        Ligne = 2
        Fichier = Dir(Chemin & "*.jpg")
        Do While Len(Fichier) > 0
            'Extraction prénom
             splitArr = Split(Fichier, "_")
             Prénom = splitArr(0)
             Range("A" & Ligne).Value = Prénom
             'Extraction nom
             splitArr = Split(splitArr(1), ".")
             Nom = splitArr(0)
             Range("B" & Ligne).Value = Nom
             'insertion de la photo dans la colonne C
             With ActiveSheet.Pictures.Insert(Chemin & Fichier)
               With .ShapeRange
                .LockAspectRatio = msoTrue
                .Width = ActiveSheet.Cells(Ligne, 3).Width
                .Height = ActiveSheet.Cells(Ligne, 3).Height
               End With
            .Left = ActiveSheet.Cells(Ligne, 3).Left
            .Top = ActiveSheet.Cells(Ligne, 3).Top
            .Placement = 1
            .PrintObject = True
            End With
            'Fichier suivant
            Fichier = Dir()
            Ligne = Ligne + 1
        Loop
    End Sub
    et voici le résultat :

    Nom : Trombinoscope.jpg
Affichages : 1276
Taille : 51,1 Ko

    sous Windows 7, Excel 2010

    EDIT : je viens de m'apercevoir que sous Excel 2010, le Pictures.Insert ne sauvegardait pas les images dans le fichier mais seulement le lien par rapport au fichier. Donc si on supprime une photo du répertoire , la photo n'est plus présente quand on ouvre le classeur.
    Pour avoir l'image sauvegardée dans le fichier il faut utiliser Shapes.AddPicture avec les options qui vont bien ( LinkToFile à False et SaveWithDocument à True )
    voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Dim Hauteur, Largeur, HautI, GaucheI As Integer
            Largeur = ActiveSheet.Cells(Ligne, 3).Width
            Hauteur = ActiveSheet.Cells(Ligne, 3).Height
            GaucheI = ActiveSheet.Cells(Ligne, 3).Left
            HautI = ActiveSheet.Cells(Ligne, 3).Top
            ActiveSheet.Shapes.AddPicture Chemin & Fichier, False, True, GaucheI, HautI, Largeur, Hauteur
            'Fichier suivant
            Fichier = Dir()
            Ligne = Ligne + 1
    D'autre part si vous exécutez plusieurs fois la macro, vous rajoutez à chaque fois de nouvelles images. Il est donc conseillé d'effacer toutes les images avant d'exécuter la macro.
    Avec le code suivant par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub EffacerPhotos()
    ActiveSheet.Pictures.Delete
    End Sub
    Ami calmant, J.P

Discussions similaires

  1. INSERT INTO vba
    Par isabelle b dans le forum VBA Access
    Réponses: 21
    Dernier message: 26/06/2008, 21h12
  2. equivalent "copy picture" MSP en vba
    Par nb_fr31 dans le forum Général VBA
    Réponses: 0
    Dernier message: 15/11/2007, 16h03
  3. requète INSERT Access VBA
    Par yannick9 dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/07/2007, 14h21
  4. Insert SQL + VBA
    Par Hydex dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/05/2007, 22h22
  5. pb insert en VBA
    Par louisju dans le forum Access
    Réponses: 5
    Dernier message: 15/02/2006, 19h06

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