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:
et j'ai remarqué "Picture 1" et "Picture 2" était présent dans plusieurs feuilles
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
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
à la rigueur je peux viré tous les commentaires
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
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part Cells.ClearComments
Merci d'avance à tous
A bientôt
PS: pour des raisons de confidentialité j'ai changé le nom des feuilles
Partager