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 :

Compiler un classeur qui crée un nouveau classeur en .exe [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur technique
    Inscrit en
    Juin 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 29
    Points : 15
    Points
    15
    Par défaut Compiler un classeur qui crée un nouveau classeur en .exe
    Bonjour à tous,

    je fais appel à vous pour le "souci" suivant :
    Je souhaiterais protéger efficacement (ie plus efficacement que la protection intrinsèque à Excel qui semble se cracker sans aucun souci) un classeur Excel qui contient du code VBA. Pour cela, je voudrais utiliser un compileur qui transformerait le fichier Excel en application.exe.
    En testant les logiciels, je me suis rendue compte que la feuille générée par mon classeur protégé l'est "dans" l'application, et elle n'est pas sauvée comme un classeur classique, ce que je souhaiterais pour permettre aux utilisateur d'utiliser cette feuille librement.

    J'ai trouvé sur le net un post avec la même problématique qui propose une solution ( http://www.gdgsoft.info/t/saving-exp...ted-file/856/2 ), et malheureusement mes capacités en VBA semblent atteindre leurs limites puisque je ne comprends pas le code proposé...

    Quelqu'un pourrait-il m'aider à comprendre le code / m'indiquer d'autres pistes possibles ?

    Merci d'avance !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    J'ai pas bien compris ce que tu souhaite faire, mais par rapport au titre du sujet:
    Compiler un classeur qui crée un nouveau classeur en .exe
    La réponse est que tu ne peux pas officiellement compiler d'exécutable à partir d'un classeur Excel.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur technique
    Inscrit en
    Juin 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    en effet, je pense que je suis mal exprimée quant au titre. Plusieurs logiciels proposent de "compiler" les fichiers Excel pour les protéger, d'où le terme que j'ai employé.
    ( quelques exemples de logiciels : http://www.lockxls.fr/ http://www.xlspadlock.com/ )
    Le problème est qu'en protégeant mon fichier de la sorte, le classe qu'il génère ne s'enregistre pas en tant que classeur Excel. Apparemment il est possible de contourner cela avec la solution proposée dans mon précédent message, mais je n'ai pas réussi à comprendre le code proposé.

  4. #4
    Invité
    Invité(e)
    Par défaut
    OK, je comprends mieux.
    Il s'agit de produit tierce qui ne font pas parti de la bibliothèque standard du VBA (Excel, VBA, Office, StdOLE).

    Rien ne t'empêche de tester les produits pour voir ce que ça donne, apparemment, XLS Padlock est disponible sous forme de complément COM et supprime tout le code VBA du projet (et le stock en interne) et le remplace par un appel au complément COM qui contient le véritable code VBA (qui est surement crypté).

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ingénieur technique
    Inscrit en
    Juin 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    C'est celui-là que je suis en train de tester. Le souci est que la feuille créée depuis le classeur ainsi protégé apparaît à l'écran, mais entièrement verrouillée (impossible de l'enregistrer, d'en extraire les infos, de l'imprimer, ...) alors que je voudrais que ce soit une feuille Excel non protégée.
    Apparemment pour cela il faut faire en sorte dans le code VBA qu'une nouvelle application Excel soit ouverte.
    Voici le code proposé (que donc je ne comprends pas) :

    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
    If g_bExportOptionSelected Then
     
    If optNewExport Then
        Set xlApp = New Excel.Application
        Set WbkTarget = xlApp.Workbooks.ADD(xlWBATWorksheet)
     
        'copy header
        vData = shtData.Range("db").Offset(-1).Resize(1, shtData.Range("db").Columns.Count)
        WbkTarget.Sheets(1).Range("A1").Resize(UBound(vData), UBound(vData, 2)).Value = vData
     
        'copy data
        vData = shtData.Range("db")
        WbkTarget.Sheets(1).Range("A2").Resize(UBound(vData), UBound(vData, 2)).Value = vData
     
        WbkTarget.Close
        Set xlApp = Nothing
     
        Call setScreenOn
        MsgBox "New Database Sucessfully Exported", vbInformation
    End If
    End
    Je pense comprendre qu'il définit une nouvelle application Excel (xlApp) et qu'il créée dans cette application un classeur (Wbktarget). Est-ce que le code par la suite sert "simplement" à remplir Wbktarget ? Auquel cas les seules lignes qui me semblent nécessaires sont les lignes 4 et 5 (de même, je ne comprends pas trop l'intérêt des deux boucles If).

  6. #6
    Invité
    Invité(e)
    Par défaut
    Le code est incomplet.
    Avec les convention de nommage utilisées ici, on peut essayer de déduire une parti du code, mais bon, le code en l'état ne fait pas grand chose, et je doute qu'il fasse ce que tu souhaite faire, à savoir protéger les données (?).

    • 1/ Il ouvre une nouvelle instance d'Excel (xlApp As Excel.Application). => Ligne 4
    • 2/ Il créé un nouveau classeur (WbkTarget As Excel.Worbook) dans xlApp. => Ligne 5

      --- Il semble copier l'équivalent d'une entête de tableau ---
    • 3/ Il récupère un tableau Array (à l'aide d'un type variant) de valeur situé dans une feuille d'un classeur (shtData) qui est vraisemblablement dans l'instance courante d'Excel (mais pas dans xlApp en tout cas).
      On sait que c'est un tableau grâce à l'utilisation de UBound (Ligne 9). => Ligne 8
    • 4/ Il réinjecte les données recueillie (Etape 3) dans la 1ère feuille de WbkTarget. => Ligne 9

      --- Il semble copier l'équivalent d'un DataBodyRange de tableau ---
    • 5/ idem que 3/ sauf que c'est pour récupérer le contenu d'un tableau => Ligne 12
    • 6/ idem que 4/ sauf que c'est pour récupérer le contenu d'un tableau => Ligne 13

      ---------------------------------
    • 7/ Ferme l'instance d'Excel précédemment créée. => Ligne 15-16
    • 8/ Appel une méthode inconnu. => Ligne 18


    En d'autre terme, il copie des données d'un classeur à un autre, puis appel une mystérieuse procédure (peut être issue d'une précédente discussion sur leur forum).

  7. #7
    Membre à l'essai
    Femme Profil pro
    Ingénieur technique
    Inscrit en
    Juin 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    merci beaucoup pour l'explication du code. Protéger le fichier n'est pas ce que je souhaite faire (enfin, si, mais la protection ne pose pas problème). Ce que je voudrais faire c'est faire en sorte que le classeur généré par le classeur protégé ne soit pas protégé. Le "bout de code" a été posté sur un forum pour quelqu'un ayant exactement la même problématique (générer un fichier non protégé à partir d'un fichier protégé).
    Je vais essayer d'adapter ça (il semble que seules les lignes 4 et 5 sont à récupérer dans mon cas).

  8. #8
    Membre à l'essai
    Femme Profil pro
    Ingénieur technique
    Inscrit en
    Juin 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Rebonjour,

    problème résolu !

    Pour créer le classeur de sortie et l'enregistrer plus tard, le code récupérait le chemin d'accès du classeur protégé... Le problème étant que le classeur est ouvert dans un répertorie "virtuel" lorsqu'il est protégé, d'où le fait que le fichier de sortie était inaccessible.
    J'ai triché pour récupérer le bon chemin d'accès et j'ai pu enregistrer mon fichier de sortie de manière tout à fait classique.

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

Discussions similaires

  1. [VBA][Excel]Copier une feuille dans un nouveau classeur
    Par illight dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/10/2020, 12h51
  2. [XL-2010] Classeur qui compile plusieurs fichiers
    Par yaya.gaga dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2014, 15h00
  3. [XL-2010] Copier une feuille d'un classeur existant sur un nouveau classeur avec vba
    Par missy060 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/06/2013, 00h46
  4. [Toutes versions] Crée nouveau classeur et l'ouvrir sous condition
    Par Victor1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/08/2009, 14h59
  5. [C#][Excel]Création d'un nouveau classeur?
    Par bakonu dans le forum C#
    Réponses: 8
    Dernier message: 09/06/2008, 15h33

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