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

C++Builder Discussion :

Probleme pour deverouiller le code VBE OleExcel


Sujet :

C++Builder

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut Probleme pour deverouiller le code VBE OleExcel
    Suite a un poste de Sunchaser demandant comment deverouiller un code VBE pour effectuer des modifications et reverouiller le code VBE (en connaissant le mot de passe bien sur), j'ai trouve un exemple que j'essaie de traduire en OleExcel et la j'ai un probleme le code appel une boite de dialogue pour entrer le mot de passe et une fonction passe le mot de passe et valide, deja je ne suis pas sur que j'appel la boite de dialogue mais de plus la fonction qui doit passer le mot de passe ecrit jusque dans le code BCB si quelqu'un a une idee.
    Je joind le code VBE
    Sub TestUnprotect()
    UnprotectVBProject Workbooks("Proteger_deproteger.xls"), "motdepasse"
    End Sub

    Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
    Dim vbProj As Object
    Set vbProj = WB.VBProject
    If vbProj.Protection <> 1 Then Exit Sub
    Set Application.VBE.ActiveVBProject = vbProj
    SendKeys Password & "~~"
    Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
    End Sub
    et ce que j'ai commence a coder
    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
     
    Variant vbProj, ID, recursive;
     
    vbProj = vXLWorkbook.OlePropertyGet("VBProject");
     
    if (vbProj.OlePropertyGet("Protection") != 1)
    {
     ShowMessage("erreur"); // a traiter plus tard Then Exit Sub
    }
    // on ouvre la boite de dialogue password
    vMSExcel.OlePropertyGet("VBE").OlePropertyGet("ActiveVBProject") = vbProj;
    // on ecrit le password et on valide
    vMSExcel.OleFunction("SendKeys", "jp", & "~~");
    // la ligne suivant provoque une erreur
    //vMSExcel.OlePropertyGet("VBE").OlePropertyGet("CommandBars", 1).OleProcedure("FindControl", (ID = 2578, recursive = True)).OleProcedure("ID", 2578);//.OlePropertyGet("recursive", True).OleFunction("Execute");

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Salut,

    Un truc qui me fait marrer, je me suis retrouvé avec le même type de code que toi (après avoir regardé le code en VBA que tu as donné dans le forum approprié) et un problème dans la même 'région'
    Juste une (ou deux) petites intérrogation ...
    Ne devrais t on pas utiliser qqchose comme OlePropertySet(...) pour désigner le ""ActiveVBProject" ?
    (Je n'ai pas réussi a trouver la bonne syntaxe encore dans ce cas)
    Quand je lance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vMSExcel.OleFunction("SendKeys","mauxdepasse", & "~~");
    je me retrouve avec le mot de passe écris dans une cellule dans la première page ouverte du fichier excel en cours de traitement...

    @ +

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Pour le cas qui t'interresse dans l'immediat, je mettrais le code VBE dans un fichier TXT, je l'importerais et j'executerais le code VBE en VisualBasic, la je suis sur qu'il fonctionne, et cela te permettrais de travailler tes fichiers le temps que l'on trouve comment faire fonctionner ce satane code.

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je viens de faire un essai en ouvrant un deuxieme classeur et la je n'ecrit plus le mot de passe dans une feuille Excel ou dans mon code BCB mais ca ne deverrouille toujours pas.
    J'ai traduit Application par vMSExcel mais je ne suis pas sur que ce soit bon.
    OlePropertySet c'est pour ecrire il y a aussi OleFunction ou OleProcedure
    Quand a la fonction SendKeys elle ecrit dans la fenetre active.

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Sunchaser connais tu un moyen d'afficher la variable "vbProj" dans un TLabel pour voir ce que l'on a selectionne a la limite on valide peut etre n'importe quoi.

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je n'ai toujours pas reussi a trouver la solution je cherche a afficher les valeurs en Variant dans TLabel afin de savoir les valeurs des Variants aux endroits ou je suis passe pour certains Variants pas de probleme pour d'autres j'ai un message d'erreur.
    Affichages d'un Variant ne provoquand pas d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Variant vFileName;
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Classeur1.xls";
     
      Label1->Caption = AnsiString(vFileName);
    ShowMessage(AnsiString(vFileName));
      Label2->Caption = WideString(vFileName);
      Label3->Caption = String(vFileName);
    Affichage provoquand une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vbProj = vXLWorkbook.OlePropertyGet("VBProject");
    ShowMessage(AnsiString(vbProj));
    Je joind le message d'erreur.
    J'aimerais savoir la valeur renvoyee par vbProj c'est peut etre la source du probleme

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je n'ai toujours pas trouve la solution mais je pense avoir progresse il me reste une erreur sur FindControl "membre introuvable", je n'ecrit plus dans la feuille ni dans mon code avec la fonction SendKeys.
    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
     
    Variant vMSExcel, vXLWorkbooks, vXLWorkbook;
    Variant vFileName, vNotUsed;
    Variant vbProj, ID, recursive, WB;
    vNotUsed = Unassigned;
     
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
     
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Classeur1.xls";
     
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed,
    vNotUsed, vNotUsed);
     
    vXLWorkbook = vMSExcel.OlePropertyGet("Workbooks", "Classeur1.xls");
     
    vbProj = vXLWorkbook.OlePropertyGet("VBProject");
     
    if (vbProj.OlePropertyGet("Protection") != 1)
    {
     ShowMessage("erreur"); // Then Exit Sub
    }
     
    vMSExcel.OlePropertyGet("Application").OlePropertyGet("VBE").OlePropertyGet("ActiveVBProject") = vbProj;
     
    vMSExcel.OleProcedure("SendKeys", "jp", & "~~");
     
    vMSExcel.OlePropertyGet("VBE").OlePropertyGet("CommandBars", 1).OlePropertyGet("FindControl", ID = 2578, recursive = true).OleFunction("Execute");
    }

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    J'ai toujours un probleme avec FindControl qui renvoie "membre introuvable", je n'arrive pas trouver comment l'ecrire.
    Voila la ligne en VBE
    Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
    Voici ce que j'ai essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    vMSExcel.OlePropertyGet("VBE").OlePropertyGet("CommandBars", 1).OlePropertyGet("FindControl", "2578", true).OleFunction("Execute");
    ou
    vMSExcel.OlePropertyGet("VBE").OlePropertyGet("CommandBars", 1).OlePropertyGet("FindControl", ID = 2578, recursive = true).OleFunction("Execute");
    ou
    vMSExcel.OlePropertyGet("VBE").OlePropertyGet("CommandBars", 1).OlePropertyGet("FindControl", "ID = 2578", "recursive = true").OleFunction("Execute");
    si quelqu'un a une idee?

Discussions similaires

  1. [XL-2010] probleme pour finir les codes VBA
    Par franck3869 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/01/2014, 22h58
  2. Probleme pour executer java.exe depuis le code !
    Par Battosaiii dans le forum C#
    Réponses: 1
    Dernier message: 21/11/2007, 12h55
  3. [CKEditor] Probleme pour afficher le code html apres insertion dans bdd
    Par Pepito2030 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 28/12/2006, 21h52
  4. probleme pour tracer une ligne avec OleExcel
    Par blondelle dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/08/2006, 19h10
  5. Réponses: 2
    Dernier message: 07/07/2006, 21h11

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