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 Action sur suppression de feuille [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut VBA Action sur suppression de feuille
    Bonjour,
    je voudrais savoir comment je pourrais décrémenter une variable lorsqu'une feuille est supprimée manuellement et où je dois écrire le code svp.
    J'ai bien essayé de trouver un truc du genre "Workbook_NewSheet" qui était deja disponible mais je n'ai pas trouvé pour la suppression.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Tu peux gérer l'événement de classeur qui survient juste avant la suppression. Le code suivant est donc à mettre dans le module du classeur, et ta variable doit être soit une variable de ce module, soit une variable globale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
     Mavariable = Mavariable - 1
    End Sub
    Par exemple, le code suivant gère le nombre de feuilles à l'ouverture du classeur et décrémente ce nombre à chaque suppression de feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public CountOf As Long
     
    Private Sub Workbook_Open()
      CountOf = Sheets.Count
    End Sub
     
    Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
      CountOf = CountOf - 1
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Regarde du côté de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
     
    End Sub

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut Problème
    Merci de vos réponses et je voulais savoir si cette fonction était compatible avec 2010 parce que je ne l'avait pas trouvée dans la liste et que mon programme ne fonctionne toujours pas j'ai donc ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
    nombre_de_pages = nombre_de_pages - 1
    ActiveWorkbook.Names.Add Name:="mavariable", RefersToR1C1:="=" & nombre_de_pages
    MsgBox [Mavariable]
    End Sub
    je supprime avec un clic droit mais rien ne se passe, vous pourriez m'éclaircir sur mes erreurs ?
    Je précise que je garde ma valeur nombre_de_page en mémoire même après fermeture du fichier d'où le code ajoutée.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu ne dis pas "ce qui ne marche pas", mais déjà, tu ajoutes un nom alors qu'il existe peut-être déjà...

    Question existentielle: A quoi te sert-il de mémoriser le nombre de feuilles d'un classeur alors que tu peux l'obtenir via la propriété Count de la collection Sheets ou WorkSheets?

    Si tu en as besoin dans une feuille de calcul (ce que je suppose vu l'utilisation d'un nom), je te propose d'utiliser la fonction =INFORMATIONS("NBFICH")
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut Balises de code svp: Sélection du code puis clic sur le bouton #. Merci ;)
    Je ne connais pas la propriété Count je l'integrerais après je préfère travailler pour l'instant avec ce que je connais pour cela que j'ai une variable qui compte mon nombre de pages et en faite c'est la décrémentation qui ne fonctionne pas ma variable reste a valeur fixe.
    J'ai donc essayer sur une nouvelle feuille pour m'entrainer et pareil je pense ne pas bien comprendre la fonction delete du coup ou peut etre autre chose.
    Je précise que je suis débutant en VB ceci explique mes nombreuses erreurs et apparament lacunes :s
    Voici le code que j'ai créer pour m'entrainer:

    Module 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Global Salut As Integer
     
    Sub bouton()
    MsgBox [Salut]
    End Sub
    Workbook:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
      Salut = 10
    End Sub
     
    Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
      Salut = Salut - 1
    End Sub
    Et donc avec ce code ma variable reste à 10 quoi que je fasse j'imagine qu'il y a une bonne explication à cela.
    Pour visualiser ma variable j'ai reliée la macro à un bouton comme c'est indiqué sur son nom.
    Je supprime des pages en faisant clique droit puis supprimer pour essayer de décrémenter.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Chez moi, le code tel que tu le donnes fonctionne... Les crochets autour de Salut ne sont pas nécessaires.

    PS: Pense à mettre des balises code autour de ton code (sélection du code puis bouton #)

    Ca ne m'explique pas pourquoi tu as besoin de le calculer à la suppression d'une feuille alors que tu peux l'avoir par .Count sur la collection des feuilles... Peut-être aimes-tu te compliquer la vie?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut Bon ben ...
    Ah bon ? erf c'est bizarre je me demande si il y a pas des options a changer peut etre ou que je ne suis tout simplement pas sur la bonne version de excel pour utiliser cette fonction je ne l'avais pas dans ma liste de fonction workSheet ca me semblait bizarre bref merci de ton aide je me renseignerais je met la discussion en résolu je ferais mes petites recherches sur le sujet

    Ceci est un test (les balises)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub bouton()
    MsgBox [Salut]
    End Sub
    Ca à l'air d'être ça tu m'a appris un autre nouveau truc merci mdr bonne journée.

  9. #9
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    J'ai fait une petite recherche sur internet, j'ai l'impressions, qu'en effet, cet evenement n'existe pas encore sur Excel2010.
    Tu ferais mieux d'utiliser Sheets.Count qui lui, a priori, existe bien sur Excel2010 et est bien plus simple

    EDIT : https://msdn.microsoft.com/en-us/lib.../dn448396.aspx
    Workbook.SheetBeforeDelete Event (Excel)
    Office 2013 and later

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut
    Ah merci Riaolle j'essaierais de faire avec cette autre fonction je peux bien me débrouiller avec ce qu'il y a

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    L'événement BeforeDelete existe depuis longtemps, à mon avis... Met un point d'arrêt sur la première ligne de cette fonction, puis supprime une feuille. Tu verras bien si tu captes l'événement.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tiens, j'aurais dit que c'était plus vieux... Merci riaolle

    TKSfoufi: Ca n'indique toujours pas pourquoi tu veux mémoriser cette donnée...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [XL-2010] [VBA] Action sur toutes les textbox d'un userform
    Par MarcL08 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/11/2017, 07h20
  2. Réponses: 7
    Dernier message: 03/12/2015, 15h00
  3. Réponses: 0
    Dernier message: 09/06/2014, 16h32
  4. [XL-2013] Actions sur toutes les feuilles sauf 3
    Par dlight dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/08/2013, 16h10
  5. Action sur toutes les feuilles d'un classeur
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/12/2005, 15h11

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