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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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