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 :

nombre maximal de shapes


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Par défaut nombre maximal de shapes
    Bonjour,

    Je me pose actuellement une question a propos de la numérotation automatiques des shapes en vba sous Excel 2000.

    Je m'explique, j'ai un programme qui me creer des ellipses dans un graphique puis qui réalise un certain nombre de traitement dessus. A la fin du programmes les shapes sont détruits.

    Lorsque je relance le programme la numérotation des shapes continue a partir des anciens qui on été supprimés (Oval 154, Oval 155 etc...) et pas a partir de 1. Étant donné que mon programme créé beaucoup d'ellipses j'ai peur qu'au bout d'un moment il y ai un débordement et que le programme ne fonctionne plus.

    Existe t'il un moyen de remettre ce compteur à 0 ou de le décrémenter lorsque je supprime mes ellipses ?

    Quel est le nombre maximal de shapes que peut accepter excel?

    Que va t'il se passer en cas de débordement de ce compteur (enfin si il déborde bien sur) ?

    Merci,
    Tank86

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai fait un truc bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim i As Long
        Application.ScreenUpdating = False
        On Error Resume Next
            Do While Err.Number = 0
                ActiveSheet.Shapes.AddShape msoShapeOval, 258#, 229.5, 48.75, 141.75
                i = i + 1
                Debug.Print "N° de l'ellipse " & ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name
                ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Delete
            Loop
        On Error GoTo 0
        Application.ScreenUpdating = True
    End Sub
    Et là j'arrive à 32767... parce que j'ai déclaré i en integer...
    Déclaré as long, j'ai stoppé la macro à 170000 et dans Excel, si je sélectionne l'ellipse j'ai "Ellipse 170000" dans la fenêtre en haut et à gauche.
    Avec Double... je te laisse le faire
    Si tu supprimes les ellipses au fure et à mesure, je ne vois pas le pb, il n'y a que le N° qui change
    Bonne journée

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Par défaut
    Merci de ta réponse rapide
    Ok donc a priori pas de limite!

    J'aurai pas de problemes de débordement avant un bon moment puisque je traite mes différentes shapes avec leurs noms (type string)

    je testerai avec un double ce midi pendant que j'irai manger
    Edit : En effet après tests à 15.000.000 ca fonctionne toujours

    Par contre es ce qu'il est possible de remettre ce compteur à 0?

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Rien vu dans les limites d’Excel, la limite doit à priori se situer au niveau du nombre de shapes présents qui serait en fonction de la mémoire dispo. Toi tu ne les cumules pas, le phénomène est donc lié à la structure des noms finalement et au type de la variable sous-jacente qui les alimente.

    Les tests d’Ousk vont dans ce sens
    Par contre, pour ce qui est d’agir sur le compteur d’indexation des noms (différent des index des shapes), je ne pense pas que ce soit accessible, des pirouettes sont possibles par contre au vu du comportement des feuilles et classeurs :


    1) En code – au fur et à mesure que tu crées un shapes ellipse, tu le renommes genre (ellipses crées en dernier / shapes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    I = ActiveSheet.Shapes.Count
    …
    ActiveSheet.Shapes.AddShape(msoShapeOval, 132, 78 , 102, 40).Name = "EllipsePerso" & ActiveSheet.Shapes.Count + 1 – I
    ….
    A la fin du programmes les shapes sont détruits.
    Si tu effaces tous les shapes (donc le graphique, contrôles etc…)

    2) Tu effaces tes shapes, tu sauves, tu fermes, tu rouvres => c’est reinitialisé

    3) Tu effaces tes shapes, tu copies ta feuille dans ton classeur, tu supprimes l’ancienne => c’est réinitialisé dans la nouvelle.


    cordialement,

    Didier

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ce sujet m'intéresse car bien évidemment je trouve aberrant que malgré la suppression d'objets le N° continue a être incrémenté sauf avec la solution proposée par Ormonth qui semble être la seule valable.

    Il faut remarquer qu'il est possible d'obtenir la possibilité de supprimer des objets, mais que par contre pour ce qui est des "shapes" la seule possibilité est "couper" donc comme avec "coller" l'objet est conservé en mémoire.

    J'exprime peut-être mal mon idée, mais est-ce la raison de cette réinitialisation qui ne se fait pas ?

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Il faut remarquer qu'il est possible d'obtenir la possibilité de supprimer des objets, mais que par contre pour ce qui est des "shapes" la seule possibilité est "couper" donc comme avec "coller" l'objet est conservé en mémoire.
    Si tu veux dire "c'est comme si la seule possibilité est "couper", on peut peut-être dire ça quoi que tu ne peux annuler l'action par le code, ni réaliser le collage des shapes ailleurs que permettrait l'action de couper.
    Par contre, Delete les supprime bien.
    Un autre moyen pour avoir le bon numéro de shape, les renommer lors de leur création
    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
    Sub InsertionDesBidules()
    Dim i As Long
        Application.ScreenUpdating = False
            Do While i < 2 'Err.Number = 0
                ActiveSheet.Shapes.AddShape msoShapeRectangle, 250#, 200, 50, 150
                i = ActiveSheet.Shapes.Count
                ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name = "Rectangle " & i
                Debug.Print "Nom : " & ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name
                ActiveSheet.Shapes.AddShape msoShapeOval, 250#, 200, 50, 150
                i = ActiveSheet.Shapes.Count
                ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name = "Ellipse " & i
                Debug.Print "Nom : " & ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name
            Loop
        Application.ScreenUpdating = True
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Sup()
    Dim LeTruc As Shape
            'Suppression des bidules
            For Each LeTruc In ActiveSheet.Shapes
                LeTruc.Delete
            Next
    End Sub
    Bonne nuit

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonsoir,

    Je crois que comme indiqué plus haut, on a tendance à amalgamer les notions de noms (incrémentés) et de numéro d’index (item).

    Quand on crée des Shapes, l’Application leurs attribue un nom par défaut et pour des raisons pratiques, elle les donne par catégorie et les incrémente. Mais ceci n’est qu’une action par défaut, le numéro faisant partie du nom mais n’ayant rien à voir dans les caractéristiques de la collection concernée au contraire de l’item. Ce nom peut être d’ailleurs modifié à loisirs, donc le numéro attaché n’est là que pour éviter les doublons et est en final qu’une partie de string ne pouvant être invoqué en tant que number.
    La méthode retenue permet en outre, basiquement, d’éviter les doublons ce qui arriverait avec le code indiqué ci-dessus si on laisse une ellipse non effacée.
    Donc je dirai pour simplifier, non l’objet n’est pas conservé en mémoire s’il est supprimé, le nombre d’item de la collection varie bien. Par contre la pile d’incrémentation des noms par défaut perdure tant que la collection comporte un objet.

    Dans le but de créer un parallèle pour exemple dans une approche qui nous est plus habituelle :

    Tu ouvres un nouveau classeur vierge avec mettons 3 feuilles par défaut, tu en rajoutes 2 fois une, elles porteront les noms Feuil4 et Feuil5 par défaut.
    Tu supprimes toutes les feuilles sauf Feuil1.
    Tu insères de nouveau une feuille…. Elle portera le nom Feuil6 sans que ça nous choque…Par contre si tu invoques une Worksheets d’index supérieur à 2, tu auras bien sûr un message d’erreur.

    cordialement,

    Didier

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour bonjour
    Citation Envoyé par Ormonth
    La méthode retenue permet en outre, basiquement, d’éviter les doublons ce qui arriverait avec le code indiqué ci-dessus si on laisse une ellipse non effacée.
    Désolé, Didier, c'est très bien dit mais c'est faux. Tu "amalgames" trop sans approfondir et il paraît évident que tu as mal lu le code.

    Je ne pensais pas nécessaire d'avoir à détailler mon code mais bon... Alors j'explique aux gens...

    Quand tu crées un nouvel objet, si tu lui affectes un numéro de création, tu peux placer son nom dans un tableau dimensionné puisque tu connais le nom et le numéro. Par la suite tu pourras utiliser le tableau comme, par exemple, pour positionner les shapes, jouer sur leurs dimensions, etc ?
    Si tu laisses Excel gérer le numéro, tu ne le connais qu'en relevant le nom. Mais alors pour utiliser le nom tu dois avoir un tableau à deux dimensions : La première pour le N° de création de l'objet, la seconde contenant le N° affecté par Excel. Très pratique et pas compliqué pour retrouver le vrai nom !
    Par contre, en renommant les shapes, tu peux placer leurs noms dans une collection et les "manipuler" directement par leur nom.
    ActiveSheet.Shapes(Collect("Grosse boule verte")).blabla
    Et ça peut être intéressant

    Citation Envoyé par Ormonth
    ce qui arriverait avec le code indiqué ci-dessus si on laisse une ellipse non effacée
    Où as-tu vu ça ?

    Si tu affectes un nom à un objet au moment de sa création, il conserve son nom après fermeture du classeur et réouverture. Et là je parle du nom.

    Si pour le nommer au moment de la création tu lui ajoutes un numéro pour satisfaire à l'utilisation que tu vas en faire, et si pour lui affecter ce numéro tu utilises Shapes.count, alors je ne vois pas pourquoi j'aurais à supprimer les figures existantes au moment de fermer le classeur où lors de sa réouverture.

    Ce qui me gène dans ton message est le ton docte que tu utilises qui ne peut qu'embrouiller un débutant s'il te croit sans vérifier.

    Alors j'y vais aussi de mon ton péremptoire :

    - Non ! On n'est pas obligé de supprimer les shapes renommés avant fermeture du classeur.
    - Oui ! Les shapes conservent le nom qu'on leur a affecté après fermeture du classeur
    - Si ! On peut avoir grand intérêt à nommer les shapes pour les manipuler selon l'utilisation que l'on en fait.
    - Comme le fait le code proposé, Shapes.count permet d'affecter le numéro vrai de création des shapes.
    - Enfin, rien n'empêche de créer de nouveaux shapes après réouverture du classeur.

    Comme tu vois, très cher Ormonth, les Shapes sont beaucoup plus gentilles avec nous que nous pouvons l'être avec elles

    Bonne journée

    (pour modifier ton message tu as le bouton Editer )

  9. #9
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Salut Ousk’

    Ma réponse se situe chronologiquement après le post de jacques jean, à qui je tentais de répondre (c’était la nuit, je n’ai pas rafraîchi entre deux)donc :

    Envoyé par Ormonth
    La méthode retenue permet en outre, basiquement, d’éviter les doublons
    Fait référence à : La méthode retenue par …Microsoft

    et

    ce qui arriverait avec le code indiqué ci-dessus si on laisse une ellipse non effacée.
    à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    I = ActiveSheet.Shapes.Count
    …
    ActiveSheet.Shapes.AddShape(msoShapeOval, 132, 78 , 102, 40).Name = "EllipsePerso" & ActiveSheet.Shapes.Count + 1 – I
    ….
    Où d'ailleurs je renomme bien les Shapes pour les manipuler....C’est là que j’ai « vu ça »...dans le contexte de tank86...

    Donc Ousk’, je ne remettais nullement en cause ton code que je n’avais pas regardé alors et je ne me serait pas hasardé à attribuer un terme tel que « basiquement » à une de tes méthode

    cordialement,

    Didier

    PS : mes excuses aux lecteurs si mon ton a pu paraître docte, ce n'est que le reflet de la difficulté à exprimer une approche personnelle de la chose...

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok pas de bobo. Deux choses tout de même : Tu dis
    je ne remettais nullement en cause ton code
    Tu dis ça parce que tu ne l'avais pas lu... La preuve c'est que tu as ajouté
    code que je n’avais pas regardé
    Là tu es carrément vexant !
    Ensuite tu m'affirmes :
    je ne me serait pas hasardé à attribuer un terme tel que « basiquement » à une de tes méthodes
    Et bien tu as tort ! Mes "méthodes", comme tu les nommes, sont toujours le reflet de mon incompétence. Etant un esprit simple connaissant ses faiblesses, je m'applique toujours à comprendre ce que j'écris, c'est tout dire. Malheureusement ça ne m'empêche pas me planter avec beaucoup de méthode... Tu veux que je te donne quelques url où j'ai mis toute ma conscience à répondre à côté ?

    Ceci dit, tu reconnaîtras que tout vient du fait que tu utilisais mal "I = ActiveSheet.Shapes.Count".
    Et si tu avais lu mon code ça ne serait pas arrivé...

    Bonne journée quand même

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Par défaut
    Bonjour a tous

    Eh bien, eh bien, je vois que le sujet a passionné certain membres

    Je vais apporter quelques précisions qui feront peut etre avancer le smillblick

    A la fin de mon programme je supprime les shapes, mais pas tous, en fait je supprime seulement les ellipses.
    il me reste donc un grahique et un bouton!
    En encore c'est pas obligatoire ca dépend des actions de l'utilisateur!

    Et en effet si l'on supprime TOUS les shapes puis que l'on enregistre, ferme et réouvre la feuille, le nommage automatique de shapes d'excel va bien recommencer à 0. Ce qui n'est pas le cas si il reste au moins 1 shape dans les différentes feuilles.

    Dans mon application je ne peut pas tous les supprimer et les recreer a l'ouverture du fichier(car les macro ne seront pas forcement activés automatiquement). J'ai aussi remarquer qu'a force d'incrementation mon fichier excel s'allourdis de plus en plus et c'est la le vrai probleme.

    Renommer les shapes a leurs création permet seulement de "cacher" le probleme (sans offencer la solution proposée )

    Il est vrai qu'il reste la solution supprimer et de recréer la feuille (a voir si je peut automatiser ca avec une macro de nettoyage).

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Il est vrai qu'il reste la solution supprimer et de recréer la feuille (a voir si je peut automatiser ca avec une macro de nettoyage).
    Si tu gardes une feuille dans ton classeur, même vide, tu peux supprimer toutes les autres.

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Par défaut
    Certes, mais il me faut sauvegarder quelque part les infos de mes feuilles supprimé. d'enregister le fichier excel avec cette seule feuille vide et de fermer puis d'ouvrir automatiquement le fichier excel puis de réactiver les macro et de regénéré les feuilles supprimé.
    =>Trop compliqué pôur ceux qui auront a l'utiliser (a moins que tout puisse etre automatisé)

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    On va prendre les impératifs un à un :
    sauvegarder quelque part les infos de mes feuilles supprimées
    Au lieu d'enregistrer une feuille vide, on peut copier les seules données sur la feuille vide (!)
    enregister le fichier excel avec cette seule feuille vide
    Vu, on enregistre les données. Si des shapes existe, on peut en connaître le nombre et le type si, avant de les supprimer on note leurs caractéristiques quelque part
    fermer puis d'ouvrir automatiquement le fichier excel
    Le traitement effectué sur le fichier avant fermeture peut être automatisé lors de la fermeture du classeur. Il faudra envisager une confirmation éventuelle.
    réactiver les macro et regénérer les feuilles supprimées
    Ça ne pose pas de pb. Il sera cependant nécessaire d'avoir quelque part un tag pour savoir si les macros doivent être exécutées à l'ouverture. (si l'utilisateur ne désire pas enregistrer les changement, la macro de "reconstitution" n'est pas forcément nécessaire.
    etc.
    Mais tout ce que tu envisages est (a priori) possible.

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par tank86
    J'ai aussi remarquer qu'a force d'incrementation mon fichier excel s'allourdis de plus en plus et c'est la le vrai probleme.
    Comme j'étais dubitatif, j'ai vérifié ça. Avant création de 32768 ellipses, mon fichier vide (hormis la macro) pesait 17,5 ko.
    Après création et suppression des 32768 ellipses, avant enregistrement comme après, il pèse 23 ko.
    Si je recommence l'opération une fois, deux fois, dix fois, sa taille ne bouge plus...
    C'est un simple constat. Je n'explique rien.
    Si je supprime la feuille, enregistre le classeur, le ferme avant de l'ouvrir de nouveau et de recrée la feuille, la taille du classeur passe à 22ko (!)
    Enfin, si je recrée 65536 ellipses supprimées au fure et à mesure, le classeur revient à 23ko.
    Bref, il n'est pas exact de dire "mon fichier excel s'allourdis de plus en plus"

    Juste en passant, tu dis
    Renommer les shapes a leurs création permet seulement de "cacher" le probleme (sans offencer la solution proposée )
    Poursuis tes expériences et vérifie ce que j'ai mis ci-dessus.
    Pour cette phrase :
    Et en effet si l'on supprime TOUS les shapes puis que l'on enregistre, ferme et réouvre la feuille, le nommage automatique de shapes d'excel va bien recommencer à 0. Ce qui n'est pas le cas si il reste au moins 1 shape dans les différentes feuilles.
    Effectivement, mais si tu la nommes en lui affectant le numéro Activesheet.shapes.count, elle aura le numéro 1 et la shape suivante, si tu lui affectes aussi ActiveSheet.Shapes.Count après sa création, elle sera bien la forme numéro 2
    Maintenant, si tu ne changes pas le nom de la shape rescapée à l'ouverture du classeur, celui-ci ne changera pas. Mais si après création tu affectes ActiveSheet.Shapes.Count à la shape suivante, elle sera bien la forme numéro 2... Etc.


    Comme je ne comprends pas ce que tu veux de plus, au bout du bout, je te laisse méditer tout ça avant de nous faire part de tes projets

  16. #16
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    tank86, vois de façon empirique ce qui fait que ton classeur devient obèse, comme ousk sur un truc simple, je ne vois pas de différence, sur l'exemple à suivre sur 10000 itérations je passe de 33 à 35 Ko...

    Je pars du principe que je dois garder 2 shapes à la base, les ellipses étant crées en dernier toujours...

    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
    Sub Toto()
    Dim I As Long 'long = selon contexte
    Dim j As Long
    Dim k As Long
    Dim L As Integer
     
    For L = 1 To 10000
        I = ActiveSheet.Shapes.Count
        For k = I To 3 Step -1
            ActiveSheet.Shapes(k).Delete
        Next k
        I = ActiveSheet.Shapes.Count
        For j = 1 To 4
            ActiveSheet.Shapes.AddShape(msoShapeOval, 132, 78 + j * 10, 102, 40).Name = "EllipsePerso" & ActiveSheet.Shapes.Count + 1 - I
        Next j
    Next L
    End Sub
    cordialement,

    Didier

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Par défaut
    Bonjour,

    Citation Envoyé par ouskel'n'or Voir le message
    Comme j'étais dubitatif, j'ai vérifié ça. Avant création de 32768 ellipses, mon fichier vide (hormis la macro) pesait 17,5 ko.
    Après création et suppression des 32768 ellipses, avant enregistrement comme après, il pèse 23 ko.
    Si je recommence l'opération une fois, deux fois, dix fois, sa taille ne bouge plus...
    C'est un simple constat. Je n'explique rien.
    Si je supprime la feuille, enregistre le classeur, le ferme avant de l'ouvrir de nouveau et de recrée la feuille, la taille du classeur passe à 22ko (!)
    Enfin, si je recrée 65536 ellipses supprimées au fure et à mesure, le classeur revient à 23ko.
    Bref, il n'est pas exact de dire "mon fichier excel s'allourdis de plus en plus"
    En effet, la taille du fichier diminue avec la suppression des shapes (et de plus l'augmentation de taille n'est pas vraiment significative avec quelques dizaines d'ellipses dans ma feuille). J'aurai du pousser un peu plus mon raisonnement. mea culpa

    Comme je ne comprends pas ce que tu veux de plus, au bout du bout, je te laisse méditer tout ça avant de nous faire part de tes projets
    Si je reprend mes questions du début, c'était surtout sur la limite d'incrémentation automatique d'excel auquel a priori il n'y aurait pas de limite (ou tres lointaine).
    Et concernant la remise a zero de ce compteur. (La technique de supprimer TOUS les shapes d'enregistrer, de fermer le fichier, de le réouvrir et enfin de recreer les shapes fonctionne).

    Renommer les shapes a leurs création permet seulement de "cacher" le probleme (sans offencer la solution proposée )
    Ce que je voulait dire par la c'est que le compteur de nommage automatique d'excel continue a être incrémenter et que renommer les shapes a leur création ne remet pas à zero l'incrémentation automatique. J'avoue que je l'avais un peu cherché et c'est pour ca que j'avais mis le petit smiley

    Pour en revenir a mes dernières questions, je précise que le nom de la shape créée n'a aucune importance pour moi. Qu'elle s'appelle 1 ou 153245 c'est pareil. Mais dans l'optique de faire un programme propre je préfère remettre a zero ce compteur (pas avec le shape.count mais bien le compteur automatique d'excel). Et en effet, avec quelques messages de confirmation et d'information, il est tout a fait possible de simplifier au maximum la procédure de nettoyage et de re-création de ma feuille de visualisation.

    J'ai quand même une dernière question, comment effectuer un traitement lors de la fermeture du classeur ?

  18. #18
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    comment effectuer un traitement lors de la fermeture du classeur
    Dans THISWORKBOOK, dans l'evenement BEFORECLOSE.

    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If ThisWorkbook.ReadOnly = True Then Exit Sub
     
    Fermeture_Suivi_des_Projets
    End Sub

  19. #19
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Par défaut
    Merci pour toutes ces réponses,

    comme on dit maintenant : Il n'y a plus qu'à !

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/05/2008, 13h17
  2. Quel est le nombre maximal de tables dans un DataSet ?
    Par Philorix dans le forum Accès aux données
    Réponses: 6
    Dernier message: 11/09/2006, 14h18
  3. Nombre maximal de fichiers dans un répertoire
    Par cquilgars dans le forum Administration système
    Réponses: 10
    Dernier message: 15/12/2005, 12h04
  4. Un ls et nombre maximal de fichiers
    Par adrien84 dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 08/06/2004, 11h16
  5. [net][Sockets] Quel est le nombre maximal de threads?
    Par itsmii dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 06/05/2004, 10h48

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