Masquer les onglets ou non?

Bonjour,

J'ai besoin de conseils de VBAstes expérimentes

Je suis en train de créer un classeur avec beaucoup d'onglets (environ 30). Seul un sera utile (onglet accueil) à l'utilisateur du classeur. Cependant, il sera nécessaire d'activer par moment les onglets afin d'exécuter les macros présentes sur l'onglet accueil.

Par sécurité et esthétisme, il serait préférable de masquer l'ensemble des onglets et de les activer au cas par cas dans les macros.

J'ai cependant peur que cela ne ralentisse trop mes macros. Qu'en pensez-vous?

Merci par avance de vos conseils,

Bonsoir,

en fonction de comment sont écris vos différents codes, sachez qu'il n'est pas nécessaire que les onglets soient visibles pour pouvoir travailler dessus !

Mais sans fichier il n'est pas commode d'affirmer que cela ne provoquera pas de problème.

@ bientôt

LouReeD

Bonsoir,

Merci pour votre retour.

Je suis (je pense) obligé d'activer ces fichiers car je souhaite effectuer des copier/coller afin d''exporter par la suite vers d'autres classeurs.

D'une manière générale, je n'ai pas l'impression que l'activation / désactivation soit une manipulation chronophage dans un code VBA?

VBA peux travailler sur les feuilles sans les activer, puiser ou déverser des informations

Donc même masquées VBA fait le travail et les données restent accessibles à la feuille principale

Il ni a que si tu protège, là VBA ou la feuille principale aura des problèmes pour accéder aux variables

Si tu cache les feuilles il n'y a pas de problème

Une autre solution c'est Application.ScreenUpdating = False au début de la macro et Application.ScreenUpdating = True a la fin

permet de bloquer l'écran là ou il est au lancement de la macro, on peut ainsi activer la feuille puis la désactiver avant de réactiver l'écran

Une macro contenant des Select ne marchera pas puisqu'elle cherche a donner le focus a une cellule d'une feuille cachée

Attention aussi avec les protections et verrouillages de cellules

Merci Toukoul.

Effectivement j'utilise Application.ScreenUpdating.

Peux-tu me confirmer qu'avec cette méthode, même si je dois activer/désactiver 5 onglets, cela ne sera pas trop chronophage?

Bonne soirée @ vous !

@ bientôt

LouReeD

Absolument le chronophage peut être le code VBA s'il est mal fait

Mais les feuilles même cachées restent en mémoire vive

éliminer une mise en forme excessive

supprimer les styles inutilisés

supprimer des formes

Graphiques

Dessin de formes

Comments

Image clipart ou images jpg

SmartArt

Images

Objet

supprimer la mise en forme conditionnelle

méfiez vous de ne pas abuser de ces fonstions tres demandeuses en mémoire

CORRESPONDANCE

INDIRECT

DÉCALE

INDEX

MATCH

Lors de l'utilisation de tableau donnez leur les limites, surtout pas lignes ou colonnes entières

Salut Toukoul,

Suite à tes conseils de la semaine dernière, j'ai revu l'ensemble de mes macros afin d'utiliser le moins possible SELECT et ACTIVATE. Cependant, je n'arrive pas à utiliser l'extrait ci-dessous sans sélectionner ma feuille au départ:

   
   'Ecart comptage
     For i = 2 To 33

Seuil_alerte_comptage = Feuil1.Range("c30")

        Feuil18.Select
        If (Cells(i, 7)) > Seuil_alerte_comptage Then
        Range(Cells(i, 1), Cells(i, 7)).Copy
        LastRowFeuil17 = Feuil17.Range("A100").End(xlUp).Row + 1
        Feuil17.Cells(LastRowFeuil17, 1).PasteSpecial Paste:=xlPasteValues

        End If

    Next i

    

Deuxième question: est-il possible de naviguer entre deux classeurs (ouverts) sans les sélectionner?

Merci encore de ton aide,

Bonsoir,

regardez comment est structuré cette partie de code :

Feuil17.Range("A100").End(xlUp).Row + 1

Le VBA est un langage "Objet", c'est à dire qu'on prend un objet puis point puis on reprend un objet dans celui ci puis point puis un paramètre (par exemple)

si vous ne spécifiez pas l'objet "feuille" alors les objet "cellule" de type Range ou Cells s'applique à la feuille active.

Pour éviter d'activer un objet feuille, il suffit de la cibler dans l'instruction.

Donc au lieu de Feuil18.Select

puis d'écrire Range("A1") ou Cells(i,7) il suffit de mettre Feuil18. devant ces sous objets :

Feuil18.Range("A1") ou Feuil18.Cells(i,7) et pour éviter de mettre plusieurs fois Feuil18

With Feuil18
    .Range("A1")
    .Cells(i,7)
End With

en espérant avoir été clair...

@ bientôt

LouReeD

Merci de votre réponses qui est très claire.

J'avais glissé une deuxième question au bas de mon message : Est-il possible de naviguer entre deux classeurs (ouverts) sans les sélectionner?

Bonjour,

Oui de la même manière que pour une une feuille...

Workbooks("blabla").Worksheets("bidon").Range("machin").Copy Activesheet.Range("A1")

A+

Merci !

Rechercher des sujets similaires à "masquer onglets"