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 :

[VBA-E]: Suppression de feuilles après création


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 5
    Points
    5
    Par défaut [VBA-E]: Suppression de feuilles après création
    Salut

    j'ai créé une p'tite macro mais j'ai besoin d'aide pour continuer.
    Dans un classeur Excel, j'ai plusieurs feuilles (une dizaine). Quand j'ouvre ce classeur, j'ai un bouton pour lancer ma macro, apparait alors un User Form. Selon la valeur sur laquelle je clique de mon user form, une nouvelle feuille se crée. Ainsi, j'ai tjs au minimum 10 feuilles + celles qui se sont créées lors de choix sur l'user form.
    J'aimerais installer un bouton me permettant de supprimer toutes les feuilles créées, seulement celles créées par la macro (par l'user form)!
    Comment puis-je faire ? Quelqu'un a une idée ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Quels sont les noms VB de tes 10ères feuilles? Feuil1 à Feuil10?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub delAddedSheets()
        Dim f, wks As Worksheet
        f = Array(Feuil1, Feuil2, Feuil3, Feuil4, Feuil5, _
                  Feuil6, Feuil7, Feuil8, Feuil9, Feuil10)
        Application.DisplayAlerts = False
        For Each wks In ThisWorkbook.Worksheets
            bool = True
            For i = 0 To UBound(f)
                If wks.Name = f(i).Name Then bool = False: Exit For
            Next i
            If bool Then wks.Delete
        Next wks
        Application.DisplayAlerts = True
    End Sub

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Points : 148
    Points
    148
    Par défaut
    Bonjour
    tu pourrais faire une boucle de suppresion sur toutes les feuilles en excluant celle que tu veux laisser (je suppose la que le nom des feuilles que tu veux laisser est fixe) un truc du style
    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
    Private Sub CommandButton1_Click()
    Dim feuille As Worksheet
    Dim classeur As Workbook
     
    Set classeur = ThisWorkbook
     
    For Each feuille In classeur.Worksheets
    If feuille.Name <> "Feuil3" _
    Or feuille.Name <> "Feuil4" _
    Or feuille.Name <> "Feuil4" _
    Then
    feuille.Delete
    End If
     
    Next feuille
     
     
    End Sub
    la ca met encore des messages d'alerte
    si tu n'en veut pas regarde avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.displayalerts= true ou false
    rémi

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    le nom de mes feuilles ne sont pas fixes et ne sont pas feuil1, feuil2, etc.
    du coup, c sûr que ça complique les choses.
    Faudrait peut être que la premiere action de la macro, avant l'apparition de l'User From, soit le rajout d'une lettre + underscore, par exemple M_ devant chaque feuille existante lors de l'ouverture du classeur, puis d'effacer toutes les feuilles qui ne commencent pas comme ça.
    Enfin je dis ça, c juste une idée mais je n'ai aucune idée de comment faire.
    merci pour vos réponses, elles m'aident déjà

  5. #5
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    En partant de l'idée de dadavyvy (qu'a toujours des bonnes idées ) je déclarerais un tableau en Public dans le module ou dans l'userform, j'alimenterais ce tableau du nom des feuilles créées au fur et à mesure de leurs créations et à la fin, je supprimerais toutes les feuilles non présentes dans le tableau dans une boucle For each LaFeuille in activeWorkbook.worksheets
    Une idée de plus

    Tiens, une idée pour simplifier le code :
    Au lieu de créer un tableau, tu crées un string dans lequel tu concatènes tes noms de feuilles créées avec un séparateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LeString= "&Feuil1&Feuil2&Feuil3..." & "&Feuil10"
    Toutes ces feuilles ayant été ajoutées. Pour les effacer, la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For each LaFeuille in activeWorkbook.worksheets
         if instr(LeString,"&" & LaFeuille.name) = 0 then LaFeuille.delete
    Next
    LeString déclaré en Public
    Pas testé
    A+

    Edit
    Juste une autre idée

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Points : 148
    Points
    148
    Par défaut
    Tous ca me parait pas mal la solution de dadvyvy est plus propre
    par contre ouskelnor tu dis:
    je supprimerais toutes les feuilles non présentes dans le tableau
    moi je dirais plutot l'inverse il met les feuilles créées dans un tableau et supprime donc ttes les feuilles présentes dans ce tableau
    non?
    rémi

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par michel2662
    le nom de mes feuilles ne sont pas fixes et ne sont pas feuil1, feuil2, etc.
    Le nom des feuilles (caption de l'onglet) peut être variable, d'accord.
    Mais normalement, si tu pars toujours du même classeur, les 10ères feuilles ne devraient jamais changer de nom VBA, dès l'instant que tu es rentré dans le module VBA et que tu y a mis du code...

    Nota : dans Excel2000, quand tu crées un nouveau classeur avec 3 onglets (ou feuilles), si tu déplaces la [Feuil2] devant la [Feuil1] et que tu vas dans l'editeur VBA, tu t'apercois que tu as dans l'explorateur de projet :
    Feuil1 (Feuil2)
    Feuil2 (Feuil1)
    Feuil3 (Feuil3)

Discussions similaires

  1. [AC-2000] Suppression de données après archivage en VBA
    Par Tydher dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/07/2011, 11h45
  2. [XL-2003] erreur aprés création de la 11ème feuille
    Par tremens dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/10/2010, 15h56
  3. [VBA-E]suppression ligne d'après lisbox multicritère
    Par clairefranclieu dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/09/2006, 22h38
  4. [VBA] Copie d'une feuille (avec graphique)
    Par ed_dexia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2005, 09h56

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