Empécher l'utilisation d'une macro sur une feuille spécifiqu

Bonjour à tous,

Je suis novice en vba, et je cherche à empécher qu'une macro ne soit utiliser sur une feuille spécifique de mon fichier.

J'ai créer un fichier de planification pour mon boulot où on crée chaque semaine un nouvel onglet pour planifier le personnel.

En fin de semaine, une fois entré les chiffres de production, j'ai une macro qui transforme toutes mes formules en données (c/c des valeurs), pour archivage.

J'ai du faire ça, parce qu'une partie des données vient d'une source externe qu'on met régulièrement à jour, et qui font planter les semaines archivés. Donc je ne peux pas laisser les formules tourner, sinon ça finit par planter.

Mon soucis, c'est que cette macro qui dégage mes formules peut être appliquée sur toutes les feuilles, et notamment ma feuille de modèle (qui sert à créer les onglets). Et comme je bosse avec des gens qui ne maîtrisent pas trop excel, je suis a peu près sur qu'ils vont finir par lancer la mauvaise macro sur la feuille de modèle, et me dégager toutes les formules...

D'où ma question, comment ajouter une condition qui empêche d’exécuter une macro si on est dans la feuille "Modèle" ?

Merci d'avance pour les réponses.

Bonjour,

Citer la macro (en entier), si elle utilise des variables déclarées hors procédure, ne pas omettre ces déclarations. Et indiquer où est placée cette macro (quel module).

Cordialement.

La macro est dans le module 9, mais j'ai mis toutes les macro de ce classeur dans ce module (vu que j'ai aucune formation en vba, je n'ai pas compris le pourquoi de plusieurs modules).

Le texte de la macro :

Sub Bloquer_semaine()

'

' Bloquer_semaine Macro

'

'

ActiveSheet.Unprotect "Test"

Cells.Select

Selection.Copy

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

ActiveSheet.Protect "Test"

End Sub

Re,

Tu as tout à fait raison de ne pas disperser tes macros dans une foultitude de modules ! Un seul module standard suffit amplement pour tout ce qui relève du programme principal que l'on met en oeuvre dans un projet. Des besoins spécifiques peuvent justifier l'adjonction de modules, mais cela se compte largement sur les doigts d'une seule main...

Par contre, ton code en "Enregistreur", pour être efficace et fiable mérite d'être réécrit en VBA !

Tu disais dans ton premier post :

En fin de semaine, une fois entré les chiffres de production, j'ai une macro qui transforme toutes mes formules en données (c/c des valeurs), pour archivage.

On s'attendait donc à un traitement de masse de toutes les feuilles... Or ta macro n'opère que sur une seule feuille.

Il convient donc de savoir comment elle est lancée d'une part ?

Et d'autre part, quelles sont les feuilles à traiter et celles à ne pas traiter ? Comment on les distingue ?

Pour le code existant :

Sub Bloquer_semaine()
    With ActiveSheet
        .Unprotect "Test"
        .UsedRange.Value = .UsedRange.Value
        .Protect "Test"
    End With
End Sub

Mais cela ne résoud pas le problème posé...

Vu que je ne connais pas du tout le vba, j'utilise le plus souvent l'enregistreur de macro d'excel pour faire ce que je veux D'où le code en enregistreur.

Le volume n'est pas assez important pour nécessiter plusieurs feuilles en même temps, du coup la macro ne concerne qu'une seule feuille à la fois, celle de la semaine qui vient de terminer.

Elle est lancée manuellement pour clôturer la semaine (enfin elle le sera, le fichier est encore en test justement pour trouver les bug et autres soucis de formules).

La seule feuille à ne pas traiter c'est le modèle en début de fichier, qui sert de base pour créer les nouveaux fichiers.

Je joins une copie de mon fichier, le but est ici d'appliquer la macro sur l'onglet S07, et donc d'empécher qu'elle ne puisse être appliquer à l'onglet modèle.

A l'usage, le responsable crée le nouvel onglet et affecte des volumes prévisionnels pour les différentes équipe. Et les exploitants remplissent à postériori l'activité de chaque personne et sa production. Et ainsi de suite sur la semaine.

Quand la semaine est terminé, on lance la macro et ça bloque les données pour éviter que les tableaux de calcul ne plantent quand ils n'auront plus accès aux bonnes données, et pour archiver.

Et je vais aller modifier au moins le code de cette macro avec ce que tu m'a donné

Alors :

Sub Bloquer_semaine()
    With ActiveSheet
        If .Name = "Modèle" Then Exit Sub
        .Unprotect "Test"
        .UsedRange.Value = .UsedRange.Value
        .Protect "Test"
    End With
End Sub

Cordialement.

Ca fonctionne nickel, je te remercie

Rechercher des sujets similaires à "empecher utilisation macro feuille specifiqu"