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 :

Un seul code VB pour toutes les feuilles [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Par défaut Un seul code VB pour toutes les feuilles
    Bonjour,

    J'ai un fichier excel qui comporte 260 feuilles et qui aura tendance à s'agrandir. Chaque feuille comporte un tableau avec 4 radiobutton pour filtrer le tableau et un bouton imprimer.

    Cependant, toutes les feuilles utilisent le même code est la même configuration .
    N'ayant malheureusement pas réussi d'uniformiser cela en utilisant avec un module pour permettre d'écrire qu'une seul fois le code VB.

    Le problème étant qu'aujourd'hui mon fichier excel met 30s à s'enregistrer et autant pour s'ouvrir ... c'est donc très lourd.

    Pouvez-vous m'aider à éviter d'inscrire ce code VB sur toutes les feuilles , je pense que cela réduira la lourdeur du fichier.

    ci-joint mon fichier pour mieux comprendre , que j'ai simplement laissé avec 30 feuille car celui avec 260 feuilles est beaucoup trop gros (6Mo) mais ca reste le même principe.

    merci de votre aide ! :
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    Chaque code est copié sur les feuilles car tu utilises Activesheet


    Et si tu ne laissais sur chaque feuille que les commandes de bouton qui renverraient vers une macro situé dans le module 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub bouton1_click()
     
    MONBOUTON1 (activesheet.name)
     
    end sub
    tu pourrais dans le module 1 avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub MONBOUTON1 (nom as string)
     
    'et faire toutes les actions liées à ce bouton en commencant par
     
    sheets(nom).cells.....

    Comme ca tu réduis considérablement le code lié à chaque feuille et tu recentres à un seul endroit le code (ce qui est plus simple en cas d'évolution)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Par défaut
    Ok donc si j'ai bien compris le "activesheet" sera remplacé par "sheet(nom)" où nom sera récupérer par le code du bouton imprimer .

    J'essai de faire cela tout de suite et si j'y arrive pas pourrais-tu m'en faire un exemple directement pour une feuille ?

    J'ai donc fais comme tu me l'a proposé COCONUT2 pour la feuille ("1") cependant il me dit "sub ou function non définie" et même surligne en jaune la 1ère ligne de code "Sub MONBOUTON1(nom As String)" puis en bleu le mot "sheet"

    Fichier joint. Peut-tu m'indiquer l'erreur que j'ai faite ?

    Merci beaucoup !

    Edit : Mon erreur a été corriger c'était sheets et non sheet ! cependant il ne me lance pas l'impression ... après appui sur le bouton rien ne se passe maintenant.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    Répondre, maintenant que ta procédure principale est dans le Module1, il faut l'adapter en désignant précisément chaque élement en lui disant par exemple que c'est l'option button de la feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if sheets(nom).optionbutton1=true then
    mais ta procédure ne dit pas qu'elle doit imprimer si c'est l'optionbutton4 qui est sélectionné.

    Si c'est le cas, tu peux sortir l'appel de la boite d'impression de la fonction if puisqu'elle est commune à tous

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Par défaut
    Pour l'impression , elle est commune à tous sauf le radiobutton4 car il permet juste d'afficher le tableau entier. Poour les 3 autres radiobutton , chacun dévoile des colonnes différentes lors de la mise en page d'impression.
    D'où l'impossibilité je pense de sortir la boite de dialogue d'impression.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    en notant bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if sheets(nom).optionbutton1=true then
    ca marche bien chez moi.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour avoir un code identique pour un ensemble de feuille, soit tu écris ta procédure dans un module soit tu utilises une procédure événementielle de l'objet ThisWorkBook en lieu et place de celles des feuilles.
    Exemple si tu utilises la procédure événementielle Change des feuilles.
    Procédure dans toutes les feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     MsgBox "Vous avez modifié la cellule " & Target.Address & " de la feuille " & Me.Name
    End Sub
    Dans ThisWorkbook (Une seule fois)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     MsgBox "Vous avez modifié la cellule " & Target.Address & " de la feuille " & Sh.Name
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Un seul code pour toutes les feuilles
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/05/2013, 16h46
  2. Macro excel pour toutes les feuilles du classeur
    Par duffie34 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/03/2013, 12h55
  3. [XL-2003] Macro ou VB pour toutes les feuilles
    Par jeanphi45 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2011, 10h53
  4. Une procédure pour toutes les feuilles
    Par docjo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2009, 07h32
  5. Réponses: 6
    Dernier message: 16/02/2009, 14h13

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