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 :

Désactiver une macro avec une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut Désactiver une macro avec une macro
    Bonjour,

    Je travaille sur un fichier de saisie que je dois envoyer propre par la suite.
    Donc pour éviter que l'utilisateur suivant est accès à mes formules, j'ai affecté une macro dans une image afin de pouvoir faire un copier - coller des valeurs du tableau sur la même feuille avec un enregistrement automatique sur un fichier temporaire.

    Donc mon tableau avec toutes les formules est simplement remplacé par le même tableau avec seulement les valeurs.
    Mais vu que je dois envoyer ce même fichier, je voudrai donc que ma macro désactive son affectation à l'image afin que l'utilisateur ne puisse pas cliquer dessus par mégarde.

    Je cherche donc une fonction VBA qui permet de supprimer une affectation de macro ou de désactiver la macro.

    Est-ce possible ?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Par défaut Masquer avant de sauvegarder
    Bonjour,

    Il serait par exemple possible de masquer l'image (ou le bouton de commande) avant de sauvegarder la copie inactive. Cette commande serait à insérer dans la macro créant la sauvegarde, avant d'enregistrer celle-ci.

    Sauvegarde_FA.Visible = False

    où Sauvegarde_FA représenterait le nom du contrôle à désactiver.

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,


    Pourquoi procéder ainsi, d'autres solutions sont possibles :

    par exemple créer un nouveau classeur sans macros ni formules ou bien ouvrir un classeur qui contient la macro et faire les modifications dans le document CIBLE ?

  4. #4
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut une ébauche de code...
    Copie dans un nouveau classeur la feuille pour garder la présentation et fait dessus une copie des valeurs pour effacer les formules. De plus, il n'y a plus de macro...

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub Macro1()
        Dim wb    As String
     
        Application.SheetsInNewWorkbook = 1
     
        'Mémorise le classeur avec les macro
        wb = ThisWorkbook.Name
     
        'Création nouveau classeur
        Workbooks.Add
        ActiveWorkbook.SaveAs ("AZERTY.xls") 'sauve pour qu'il existe réellement
     
        'Copie de la feuille dans le classeur "AZERTY.XLS"
        Workbooks(wb).Activate
        ActiveSheet.Copy Before:=Workbooks("AZERTY.xls").Sheets(1)
     
        ' Copie pour effacer les formules
        Windows("AZERTY.xls").Activate
        Cells.Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
        '
        Application.DisplayAlerts = False
     
            'Supprime la feuille de base
            Sheets("Feuil1").Delete
     
            'Ferme le classeur
            ActiveWorkbook.Close SaveChanges:=True
     
        '
        Application.DisplayAlerts = True
    End Sub
    ESVBA

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Bonjour le forum

    Devant ce genre de problème, j'utilise la fonction UserName, dans une sub auto Open. Comme ça ta commande n'est visible que par toi.
    Cette astuce me permet également de supprimer pas mal de mots de passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Environ("username") = "ton_user" then
    ton image visible que par toi
    ton code
    Cdlt
    Dom

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Ultra rapide et ultra simple, recopier les cellules sur elles-même en valeur.
    Et sauvegarder sous...
    Dépend de ta mémoire vive et donc du volume de tes données.
    Pour des volumes pas trop lourds (50 000 cellules ce n'est pas lourd) il n'y a pas photo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Piste()
    ActiveSheet.UsedRange.Cells = ActiveSheet.UsedRange.Cells.Value
     
    End Sub
    Sous 2003, c'est OK avec 3-4 Go de ram pour une feuille entière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Piste2()
    ActiveSheet.Cells = ActiveSheet.Cells.Value
     
    End Sub
    Mais par forcément plus rapide que la solution de ESVBA.

    Pour ce qui est de l'élimination du code VBA, la meilleure solution est dans la FAQ, genre ::

    Sauvegarder le classeur contenant cette macro, puis supprimer la totalité des procédures.
    La macro "SupprimeTout" est aussi détruite.
    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
    18
    19
    20
    21
    22
     
    Sub SupprimeTout()
        'Enregistre le classeur et supprime la totalité des procédures
        Dim VbComp As VBComponent
     
        'Enregistre le classeur
        ThisWorkbook.SaveAs "C:\Sauvegarde.xls"
     
        For Each VbComp In ThisWorkbook.VBProject.VBComponents
            Select Case VbComp.Type
                Case 1 To 3
                    ThisWorkbook.VBProject.VBComponents.Remove VbComp
                Case Else
                    With VbComp.CodeModule
                    .DeleteLines 1, .CountOfLines
                    End With
            End Select
        Next VbComp
     
        'Sauvegarde les modifications
        ThisWorkbook.Save
    End Sub
    cordialement,

    Didier

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 6
    Dernier message: 03/08/2011, 15h55
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24

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