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 :

Supprimer images, dessins


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut Supprimer images, dessins
    Bonjour à tous,

    Cette fois ci c'est moi qui vous pose une question.

    Mon problème est le suivant :

    Un service m'envois des classeurs Excel de calcul que je dois injecter dans l'ERP de mon entreprise (Industrie) via des scripts.
    Ces classeurs sont très gros et l'ERP le digère mal (anomalies, plantages global ...), bref il faut leurs donner une cure d'amaigrissement.
    Pour cela j'ai demandé qu'ils suppriment les images (source de lourdeur) de leurs classeurs, mais ces images leurs servent pour une
    vérification visuel pour valider la cohérence des calculs.

    Sur le principe je peux comprendre mais ces calculs n'ont pas besoin de ces images et l'ERP non plus, du coup, manuellement je supprime
    les images qui sont disséminé dans les feuilles de ces classeurs. De cette façon je passe d'Environ 10 Mo à 120 Ko

    Seulement le faire à chaque fois c'est long et fastidieux

    donc je souhaite supprimer au sein de ces classeurs excel les images(photos), les formes ou groupe etc ... automatiquement par macro

    - pour récupérer les classeurs à modifier je vais utiliser les "File Dialogs" et là j'ai pas besoin d'aide
    - pour repérer chaque feuille du dit classeur je pense m'en sortir avec une boucle du type
    for each sheet in sheets ... next

    - par contre pour repérer chaque image, forme et groupe je pense qu'il faut faire une boucle du style

    for Each quelque chose

    mais je sais pas quoi je ne connais pas la collection des images, formes ou groupes au sein d'une feuille de classeur

    J'ai utilié l'enregistreur de macro qui m'a donné ceci:

    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
    57
    58
    59
    60
    61
    Sub Macro4()
    '
    ' Macro4 Macro
    '
     
    '
        ActiveSheet.Shapes.Range(Array("Group 21")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Group 24")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 11")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 1")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Connector 5")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Connector 25")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 9")).Select
        Selection.Delete
        Sheets("xxx").Select
        ActiveSheet.Shapes.Range(Array("Group 11")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 1")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 3")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 2")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 4")).Select
        Selection.Delete
        Sheets("xx-xxx-xxxx").Select
        ActiveSheet.Shapes.Range(Array("Group 18")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 2")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 4")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 5")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 41")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 42")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Picture 30")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Connector 15")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Connector 28")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Freeform 20")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 24")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("TextBox 26")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Connector 21")).Select
        Selection.Delete
        ActiveSheet.Shapes.Range(Array("Straight Connector 13")).Select
        Selection.Delete
    End Sub
    et j'ai remarqué "Picture 1" et "Picture 2" était présent dans plusieurs feuilles

    Il est évident que je ne peux pas mettre en dur les objets puisque les classeurs n'ont pas les mêmes images et qu'en plus
    il est tout à fait possible qu'ils remplacent une image par une autre (évolution du produit) et donc ma macro ne sera plus à jour


    De plus, certains mettent des photos dans les commentaires de certaines cellules (j'avais jamais pensé que l'on pouvais mettre des images
    dans ces petits triangles rouges)

    donc deuxième questions mais en rapport avec la première

    Comment peut-on lister les commentaires présent dans une feuille et surtout comment-on savoir si il y a une image dedans ou pas
    parce que l'enregistreur de macro me donne ça quand j'ai supprimer le commentaire pour supprimer l'image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro5()
    '
    ' Macro5 Macro
    '
    '
        Sheets("xx").Select
        Range("B2").Select
        Selection.ClearComments
    End Sub
    à la rigueur je peux viré tous les commentaires
    ESt-ce çette instruction fonctionne sans faire la grouille quelque partDonc je fais appel à tous les grands d'Excel qui sont sur ce site pour m'aider dans cette tâche

    Merci d'avance à tous

    A bientôt

    PS: pour des raisons de confidentialité j'ai changé le nom des feuilles

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    si tu as la certitude que toutes les shapes peuvent degager, un code du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub DeleteAllShapes()
    Dim Shp As Shape
    Dim wsh As Worksheet
    For Each wsh in Activeworkbook.Worksheets
    wsh.activate
    For Each Shp In ActiveSheet.Shapes
        Shp.Delete
    Next Shp
    Next wsh
    End Sub
    En principe les commentaires ne "pesent" rien
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    merci à vous deux pour la rapidité

    Citation Envoyé par Jean-Philippe André Voir le message
    Salut,

    si tu as la certitude que toutes les shapes peuvent degager, un code du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub DeleteAllShapes()
    Dim Shp As Shape
    Dim wsh As Worksheet
    For Each wsh in Activeworkbook.Worksheets
    wsh.activate
    For Each Shp In ActiveSheet.Shapes
        Shp.Delete
    Next Shp
    Next wsh
    End Sub
    une question les images (photos) sont gérer aussi par Shapes ?

    Désolé je ne maitrise pas les images sous excel

    Citation Envoyé par Jean-Philippe André Voir le message
    En principe les commentaires ne "pesent" rien
    oui en principe sauf quand on met une photo dedans (certains j'ai le cas)

  4. #4
    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
    une question les images (photos) sont gérer aussi par Shapes ?
    oui!en quelque sorte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each sh in activesheets.shapes
    sh.delete
    next
    sh represente dans la boucle une forme une image ou même un contrôles
    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

  5. #5
    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
    Gaffe à ne pas faire des dégâts.
    La collection Shapes contient tout les objets présents sur la feuille. Y compris les contrôles formulaire et les contrôles activex.
    Igloobel dit vouloir supprimer certains d'entre eux, mais pas forcément tous.
    Je lui suggère donc de prendre des précautions, ainsi (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim sh As Shape
    For Each sh In Me.Shapes
       select case sh.type
         case x, y, z,
            ' action de suppression    
         case else
           ' autre action éventuelle ou rien
      end select
    Next
    Voilà quelques types (liste non exhaustive et à continuer au besoin. L'énumération complète est à la rubrique MsoShapeType, énumération de l'aide VBA) :
    images par menu Excel : 13
    Formes : 1
    zones de texte : 17
    contrôles formulaire : 8
    contrôles activex (y compris donc contrôles image activex) : 12

    Reste à faire au besoin le distinguo entre un contrôle activex image et un contrôle activex non image. Je le ferai si Igloobel en a le besoin (en fonction de ses feuilles).

    EDIT : je rappelle au passage que les commentaires de cellules sont également des objets Shape

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    OH PU.....NAISE!

    Bon alors avant de me lancer je vais vérifier

    Citation Envoyé par unparia Voir le message
    ...
    EDIT : je rappelle au passage que les commentaires de cellules sont également des objets Shape
    Veux-tu dire que par là que l'on savoir si il y a une photo dans un commentaire ?

    En tout cas merci à tous de ces éclaircissements

    Oui j'avoue que je ne connaissait pas Shape


    De toute façon je vous tiens au courant.

  7. #7
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour à tous,
    As-tu pensé à cela ? A essayer sur une copie d'un fichier pour le test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes.SelectAll: Selection.Delete
    Edit: Trop tard.

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

Discussions similaires

  1. [Image]Dessiner des rectangles sur une image
    Par navona dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 09/03/2006, 22h51
  2. [Image][Dessin]calques
    Par roche.jul dans le forum 2D
    Réponses: 9
    Dernier message: 06/03/2006, 12h56
  3. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 17h11
  4. [Image]Dessiner une ligne en dynamique
    Par Bugmaster dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 02/08/2004, 11h56
  5. [debutant]supprimer image
    Par F.F. dans le forum C++Builder
    Réponses: 6
    Dernier message: 09/07/2004, 10h24

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