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 :

Aide pour simplification macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut Aide pour simplification macro
    Bonjour à tous,

    Dans mon fichier, j'ai créé un bandeau présent dans chacune de mes feuilles de calcul. Ce bandeau me permet de naviguer sur mes différentes feuilles sans que les onglets soient visibles tous ensembles.
    Le bandeau est constitué de 10 zones de texte auxquelles sont reliées des macros qui permettent d'activer la page choisie sur le bandeau (exemple je clique "Accueil", j'active la feuille "Accueil" et les autres feuilles ne sont pas visibles (xlveryhidden). Le nom des feuilles se trouvent dans la feuille "Données" B8:B17.
    J'ajoute que j'ai mis en place un code qui empêche la modification du nom des onglets dans l'onglet lui-même, il faut obligatoirement passer par la feuille "données" et celle-ci est protégée.
    Donc, je souhaiterai simplifier les procédures qui prennent beaucoup de place.
    Les macros sont placées dans un module nommé "Page"

    Voici le bandeau

    Nom : Page.png
Affichages : 299
Taille : 187,7 Ko


    Voici une des macros (il y en a 10 comme celle-ci). La feuille visible est activée change à chaque nouveau choix dans le bandeau.

    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
     
    Sub Page_Accueil()
    Application.ScreenUpdating = False
    Sheets("Accueil").Visible = True
    Sheets("Accueil").Select
    'La feuille "Accueil" est visible, les autres sont masquées
    Sheets("Articles").Visible = xlSheetVeryHidden
    Sheets("Fournisseurs").Visible = xlSheetVeryHidden
    Sheets("Clients").Visible = xlSheetVeryHidden
    Sheets("Commandes").Visible = xlSheetVeryHidden
    Sheets("BCommandes").Visible = xlSheetVeryHidden
    Sheets("Ventes").Visible = xlSheetVeryHidden
    Sheets("Factures").Visible = xlSheetVeryHidden
    Sheets("Livre_Activités").Visible = xlSheetVeryHidden
    Sheets("Données").Visible = xlSheetVeryHidden
    Application.ScreenUpdating = True
    End Sub
    Merci par avance pour vos réponses

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Bonjour,

    un essai avec une seule macro pour les 10 zones de texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub AfficheFeuille()
    Dim WS As Worksheet, NomFeuille As String
    NomFeuille = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
    For Each WS In Worksheets
        If WS.Name = NomFeuille Then
            WS.Visible = True
            WS.Activate
        Else
            WS.Visible = xlSheetVeryHidden
        End If
    Next
    End Sub

    La macro doit être affectée à chaque zone de texte .

    A tester

    A+

  3. #3
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour Algoplus

    Merci pour ta réponse. Je teste et je reviens vers toi

  4. #4
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Ne peut-on pas mettre ce code dans un module et y faire appel dans chaque Zone de texte ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    La macro doit effectivement être dans un module standard.

    et comme dit précédemment :

    La macro doit être affectée à chaque zone de texte .
    A+

  6. #6
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Désolé je n'avais pas compris

  7. #7
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour à tous, Bonjour Algoplus,

    J'ai donc mis ton code en place dans un module, et je l'appelle dans chaque zone de texte mais j'ai un message d'erreur sur la partie en rouge.
    "Variable ou procédure attendue, et non un module".
    Merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Page_Accueil()
    Application.ScreenUpdating = False
    AfficheFeuille 'Appel le module - Message d'erreur ici
    Application.ScreenUpdating = True
    End Sub
    Ton code que j'ai mis dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub AfficheFeuille()
    Dim WS As Worksheet, NomFeuille As String
    NomFeuille = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
    For Each WS In Worksheets
        If WS.Name = NomFeuille Then
            WS.Visible = True
            WS.Activate
        Else
            WS.Visible = xlSheetVeryHidden
        End If
    Next
    End Sub

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Par défaut
    Bonjour,
    Il semblerait que ta procédure AfficheFeuille appartienne à un module dont le nom est AfficheFeuille. Si c'est bien le cas, renomme ton module.

  9. #9
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour zenpbb,

    Merci pour ta réponse
    Ah oui c'est tout bête, en plus j'ai déjà eu le cas, mais pourquoi ne pas y avoir pensé

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Je crois qu'on ne se comprend pas sur le sens de : affecter un macro à une zone de texte.

    Pour moi il y a 10 zones de texte comportant chacune le nom d'une feuille.

    La macro Sub AfficheFeuille() doit être rattaché directementà chaque zone de texte . Sans passer par une macro intermédiaire.
    Clic droit sur la zone de texte , affecter une macro ......( enfin.... sur ma vieille version XL)
    A+

  11. #11
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour Algoplus,

    C'est exactement ce que j'ai fait. Il y avait déjà une macro affectée aux zones de texte, je les ai simplement modifié.
    Mais comme me l'a fait remarqué Zenpbb, j'ai nommée ma macro comme le module.

    Code module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub AfficheFeuille()
    Dim WS As Worksheet, NomFeuille As String
    NomFeuille = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
    For Each WS In Worksheets
        If WS.Name = NomFeuille Then
            WS.Visible = True
            WS.Activate
        Else
            WS.Visible = xlSheetVeryHidden
        End If
    Next
    End Sub
    Code dans zone de texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub Page_Accueil()
    AfficheFeuille
    End Sub

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Donc on passe par une macro intermédiaire !?

  13. #13
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Dans mon dernier post j'explique ce que j'ai fait. J'ai supprimé l'ancien code de mes zones de texte et je l'ai remplacé par ta macro via un module que j'appelle dans mes zones de textes

  14. #14
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Alors si les nouvelles versions Excel permettent d'écrire du code dans une zone de texte, je rends mon tablier....
    Le code proposé ne fonctionnera pas ainsi.

  15. #15
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    J'ai affecté une macro à ma zone de texte, je n'ai pas écrit le code directement à l'intérieur de la zone.

  16. #16
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Si je mets ta macro directement dans ma zone de texte ça fonctionne très bien. Mais sans passer par un module, ce qui oblige à recopier ton code dans les 10 zones de texte.

  17. #17
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Donc c'est cette macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Page_Accueil()
    AfficheFeuille
    End Sub
    qui est affectée (au moins) à la première zone de texte.

    Alors que ce devrait être la Sub AfficheFeuille()

  18. #18
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Oui c'est ça. J'ai affectée à ma zone de texte la macro que tu m'as proposé et là ça fonctionne sans problème.
    Mais si je créé un module avec la proposition et qu'ensuite je l'appelle dans ma procédure de la zone de texte ça bug.

    Donc je vais mettre ton code dans chacune de mes zones de texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub AfficheFeuille()
    Dim WS As Worksheet, NomFeuille As String
    NomFeuille = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
    For Each WS In Worksheets
        If WS.Name = NomFeuille Then
            WS.Visible = True
            WS.Activate
        Else
            WS.Visible = xlSheetVeryHidden
        End If
    Next
    End Sub
    Merci pour ta patience et ton aide

Discussions similaires

  1. Aide pour simplification macro
    Par teddy72000 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 07/02/2013, 16h03
  2. Aide pour une macro mêlant Excel et Lotus!
    Par andyranai dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/05/2008, 10h25
  3. [VBA-E]SOS besoin d'aide pour un macro
    Par lecossais dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 18/06/2006, 19h57
  4. [VBA-E] Aide pour simplification de mon code.
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 12h34
  5. [VBA] Excell : demande d'aide pour une macro
    Par Fealendril dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/01/2006, 17h28

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