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 :

Effacer toutes les Shapes d'une feuille sauf une [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut Effacer toutes les Shapes d'une feuille sauf une
    Bonjour à tous,

    J'ai une macro qui est supposée me dessiner des objets selon les valeurs entrées dans ma feuille. A chaque fois que la feuille se modifie, ces formes sont susceptibles de changer. Il faut donc préalablement effacer toutes les formes, avant de dessiner les nouvelles. Le problème, c'est que je veux quand même en garder une, mais je ne sais pas comment faire... Voilà 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
    Dim s As Shape
        For Each s In Shapes
            If s Is Not Shapes("SchemaBateau") Then  'ou
            If Not s = Shapes("SchemaBateau") Then  'ou
            If s <> Shapes("SchemaBateau") Then
                s.Delete
            End If
        Next
        Dim index As Integer
        For index = 1 To N
            Shapes.AddShape(msoShapeSmileyFace, _
                            Shapes("SchemaBateau").Left + (Lpanneaux + 2 * R * (index - 1)) / Lht * Shapes("SchemaBateau").Width, _
                            Shapes("SchemaBateau").Top + Shapes("SchemaBateau").Height - (Tirant - R) * Shapes("SchemaBateau").Width / Lht, _
                            2 * R * Shapes("SchemaBateau").Width / Lht, _
                            2 * R * Shapes("SchemaBateau").Width / Lht).Fill.ForeColor.RGB = vbYellow
        Next
    Je suis obligé de lui dire "Supprime toutes les formes sauf SchemaBateau" parce que le nombre de formes à dessiner dépend des paramètres de la feuille. les 3 possibilités pour le If que j'ai mises ci-dessus ne marchent pas.

    Question donc : comment effacer toutes les formes, sauf celle appelée "SchemaBateau" ? Sachant que ma démarche n'est pas forcément la bonne...

    Merci à tous !

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Bonsoir,

    peut être ainsi, si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim s As Shape
    For Each s In ActiveSheet.Shapes
        If s.Name <> "SchemaBateau" Then s.Delete
    Next s
    bonne soirée
    @+

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    C'est effectivement ça, à part le End If qu'il manque (histoire de faire mon pinailleur ). Par contre, pourquoi "Next s" à la fin du code ? "Next" ne suffit-il pas ? Et que fait "Next s" de différent par rapport à "Next" ?

    Voilà mon code (qui marche) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each s In Shapes
        If s.Name <> "SchemaBateau" Then
            s.Delete
        End If
    Next
    Merci en tout cas !

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Re,

    non pas besoin de "end if" si l'instruction suit le "then" sur la même ligne...

    Pour le "compteur" "s" après le "next", permet une meilleure lisibilité dans le cas de boucles imbriquées...

    @+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/11/2013, 03h23
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. Réponses: 1
    Dernier message: 18/03/2011, 18h35
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35

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