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 :

Rendre une macro inactive à une date donnée [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Rendre une macro inactive à une date donnée
    Bonjour,
    J'ai créé une macro et j'aurais voulu savoir s'il y avait une possibilité de rajouter une condition à celle - ci pour qu'à partir d'une certaine date elle ne soit plus active ?
    En effet, je n'aurais plus accès à ce fichier dans un mois et j'aimerais la rendre inactive à ce moment là, est - ce possible?
    Merci d'avance :-)

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    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 : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En plaçant cette ligne en début de procédure, celle-ci ne fonctionnera plus à partir du 30 mars 2015
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Date >= DateSerial(2015, 3, 30) Then Exit Sub
    Ceci dit, elle ne résistera pas à quelqu'un qui connaît bien le VBA.
    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

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Parfait ! Merci beaucoup!!! je vais essayer ça ! :-)
    Je pensais mettre également un mot de passe afin que personne ne puisse la modifier ...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Salut,

    si jamais tu souhaites mettre ce système en place pour plusieurs macros, et que ta date serait susceptible d'être modifiée au fur et à mesure, je te recommande de passer par une constante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const DateLimite = DateSerial(2015,3,31)
    à laquelle tu pourras faire référence à plusieurs endroits dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Date>DateLimite Then
    ...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    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 : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour JP,
    Sauf erreur de ma part, une constante ne peut pas être alimentée par le résultat d'une fonction
    La ligne ci-dessous renvoie l'erreur Constante requise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const DateLimite = DateSerial(2015, 3, 1)
    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

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Effectivement, une constante remplace un littéral donc elle doit être initialisée avec un littéral.
    Je pencherai aussi pour la solution de Philippe avec un message pour que l'utilisateur ne soit pas surpris de l'absence de réaction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If Date >= DateSerial(2015, 3, 30) Then
     
        MsgBox "La date limite pour l'utilisation des fonctionnalités de ce classeur est arrivée à échéance !"
        Exit Sub
     
    End If
    L'utilisation d'un nom invisible est aussi une possibilité pour stocker la date de même que la base de registre.

    Hervé.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour JP,
    Sauf erreur de ma part, une constante ne peut pas être alimentée par le résultat d'une fonction
    La ligne ci-dessous renvoie l'erreur Constante requise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const DateLimite = DateSerial(2015, 3, 1)
    Exact,
    du coup un direct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const DateLimite = #03/31/2015#
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour

    Les collègues ont une solution, mais il reste quand même une certitude en ce bas monde. Quiconque capable de reculer la date du système peut continuer d'utiliser la macro mais bon, pour un simple béotien, cela devrait probablement tenir un certain temps.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Const DateLimite = "10/03/2015"
    Sub essaie_de_macro()
    If Date >= CDate(DateLimite) Then
     
        MsgBox "La date limite pour l'utilisation des fonctionnalités de ce classeur est arrivée à échéance !"
        Exit Sub
     
    End If
    End Sub
    après le 10 mars ca se bloque
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Toutes ces solutions pouvant être détournés, tu pourrais tout simplement opérer une suppression des codes.

    A l'aide voulu (en t'aidant des contributions précédentes) et avec l'aide de ce tuto tu supprimes les modules, comme ce code : http://silkyroad.developpez.com/VBA/...cEditor/#LIV-D

    Philippe

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour philippe JOCHMANS cette solution peut etre contourné aussi

    bouton exel: option :désactiver les macros :
    et enfin ouverture du fichier les macros ne sont pas déclenchées donc le code le code et accessible


    c'est d'ailleurs ce que je fait quand je récupère un exemple de fichier sur le forum a fin de ne pas avoir de surprise
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Si on veut vraiment partir sur du délire de code, on peut prévoir une tâche planifiée qui exécutera le code en question pour supprimer le code du module
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    RE
    cette tache planifiée devra être programmée sur tout les PCS utilisant ce fichier bien entendu

    et la marmotte .......dans le papier alu
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bon allez sans allez chercher midi quatorze heures comme on dit chez nous
    il y a une solution qui aurait du vous titiller un tout petit peu

    reprenons
    nous avons un classeur qui dans un mois sera plus disponible pour l'un mais pour d'autre (si j'ai bien compris )

    l'affaire est tout simple

    solution 1
    je vais simplement indiquer que l'on a la possibilité de de sauver le code des modules dans un Xla
    cet XLa est sauver dans le dossier des compléments en général du pc

    les fonctions dans ce classeur faisant appel au fonction du xla le tour est jouer un simple "on error resume next " l'ors de cet appel n'engendrera plus d'erreur quand utilisation du fichier par un autre PC

    solution 2
    on sait tous que de la même manière qu'un classeur peut faire appel a un xla
    un autre classeur peut manipuler un deuxième
    et bien c'est parfait le code dans le premier qui agit sur ce classeur en question

    bon maintenant la marmotte elle va dormir
    A méditer
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Re
    un exemple (exécuter la macro d'un autre classeur )

    ouvre un nouveau classeur vierge
    ajoute lui un module (Module1)
    dans ce module colle lui ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub MaMacro()
    msgbox"Bonjour c'est moi mais non!!! c'est pas moi  Lol!!!!!!"
    end sub
    sauve ce classeur sous "classeur avec mes macros.xls"

    ferme Excel

    ouvre un autre classeur vierge
    ajoute lui un module
    dans ce module colle lui ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub test()
    Dim wbk1, wbk2
    Set wbk1 = ThisWorkbook
        If Dir(ThisWorkbook.Path & "\classeur avec mes macros.xls") <> "" Then
        Set wbk2 = Workbooks.Open(ThisWorkbook.Path & "\classeur avec mes macros.xls")
          wbk1.Activate
              Application.Run "'classeur avec mes macros.xls'!Module1.MaMacro"
    wbk2.Close
    End If
    End Sub
    enregistre le sous le nom de "classeur de base .xls " par exemple

    les deux classeurs doivent être au même endroit(même dossier ) sinon il te faudra modifier la ligne "WOrkbooks.open "et de la condition sur la fonction (dir)

    ferme Excel

    maintenant tu a 2 classeurs (classeur de base /classeur avec mes macros)

    ouvre le classeur de base et lance la sub test comme tu peut le constater c'est la macro "MaMacro" qui est exécutée

    si ce classeur est exécuté sur un autre PC n'ayant pas le classeur "classeur avec mes macros " et bien tintin le haricot ,choux blanc , rien du tout


    ceci constituant une 3 eme solutionque je n'avais pas cité plus haut

    ca n'est pas exécuter une macro sur un autre classeur mais executer une macro d'un autre classeur !!!

    et il y a a une 4 Emme un peu similaire lancer un VBS ou tes macro serait écrites avec un getobject sur l'application Excel et sur le classeur renverrait les effets des fonctions

    une sorte de module externe dont tu serait le seul a posséder
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Ou est l'erreur - ou une différence entre une fonction et une macro ?
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 07h35
  2. Creer une macro via une macro
    Par GlasgowBoy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/05/2009, 14h54
  3. Réponses: 2
    Dernier message: 24/02/2009, 17h40
  4. écrire le résultat d'une macro dans une cellule d'une feuille à choisir
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/06/2008, 11h56
  5. [VBA Excel] Appliquer une macro sur une celulle contenant une valeur
    Par tchauviere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2008, 10h21

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