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 :

Piloter OLE Excel, VBE avec C++Builder


Sujet :

Macros et VBA Excel

  1. #1
    Membre expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    Par défaut Piloter OLE Excel, VBE avec C++Builder
    Bonjour,
    Je cherche a effectuer des modifications dans des fichiers Excel via un code executé sous C++Builder. Pour les parties 'classiques', du type : Mise en page, ajout de lignes, de formules, etc, etc ...pas de problèmes puisque j'ai trouvé mon bonheur dans la FAQ Builder.
    Néanmoins, j'aurais besoin de faire en même temps des modifs dans le code VBA sous jacent a ce projet.
    Le 'VBAProject' de ce fichier est protégé par un mot de passe, que je possède.
    J'aurais besoin de modifier tout le code situé dans l'évènement SelectionChange d'un objet 'WorkSheet'
    Est ce possible déja, selon vous, avec du VBA ?
    Auriez vous éventuellement un exemple afin que j'essaie de l'adapter a mon cas (travail sous C++Builder)?

    Merci d'avance,
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonsoir,

    pour ce qui est du probléme de mot de passe la seule solution qu'il me semble avoir vu passé... été à base de l'instruction "SendKey" qui permet de simuler l'action sur les touches du clavier....


    sinon pour la modification du code tu as un tutoriel qui pourrait t'aider :
    Visual Basic Editor: Manipuler l'éditeur de macros ... par macro


  3. #3
    Membre expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Merci beaucoup pour cette réponse rapide, je vais bouquiner tout cela.
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    bonsoir
    Je prend le relais sur ce poste, les exemples que j'ai vu avec le message SendKey deprotege le classeur protege a la sauvegarde, j'ai d'ailleurs poste ces exemples a Sunchaser, seulement c'est l'acces au code VBE qu'il faut deproteger par programme et la je n'ai rien trouve je pense qu'il doit etre possible d'executer par programme la deprotection du code VBE Quelqu'un a t'il une piste?
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par blondelle
    ...les exemples que j'ai vu avec le message SendKey deprotege le classeur protege a la sauvegarde...
    tu est sur de cela ...? on n'as pas besoin de Sendkeys.. pour protéger/déprotéger le classeur..!

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    salut bbil:
    Et merci pour ta reponse.
    Si le classeur est protege par mot de passe a la sauvegarde, on utilise Sendkeys et la j'ai un code qui deprotege tres bien (a condition d'avoir le mot de passe), par contre le probleme de Sunchaser est de deproteger le code VBE, avec mes poste precedents je comprend un peu comment ca fonctionne je sais me mettre sur la feuille VBE mais je vois pas comment appeler par code soit la boite de dialogue pour inscrire le mot de passe, soit d'une autre facon.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Non..!
    pour ouvrir un classeur protègé par un mot de passe pas besoin de bricoler avec SendKey.... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub OuvreAvecMotDepasse()
      Workbooks.Open Filename:=ThisWorkbook.Path & "\ClasseurAvecMotDePasse", Password:="motdepasse"
    End Sub
    par contre pour déprotéger le code ... je sais pas ..? s'il y à moyen de se passer de ces sendkeys...

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci bbil pour ta reponse:
    Ta fonction marche effectivement pour un classeur protege par mot de passe, mais la c'est le code VBE que l'on veut deproteger (en connaissant le mot de passe), mais connaissances ne me permettent pas d'y arriver.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    si tu as un début de code on peu voir.. si on peu "bricoler"..

  10. #10
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Tous les morceaux de codes que j'ai reussi a trouver sont pour deproteger le classeur.
    La seule chose que j'arrive a faire ouvrir l'acces a l'editeur VBE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub ouvre_VBE()
    Application.VBE.MainWindows.Visible = true ' ou false pour refermer
    End Sub
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tiens, une adresse qui devrait pouvoir te servir http://www.developpez.net/forums/sho...7&postcount=11
    Tu regardes et tu dis

  12. #12
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour ta reponse ouskel'n'or:
    C'est quelque chose de similaire que nous cherchons, le code du lien lui protege le code VBE, ce que l'on cherche c'est pouvoir acceder au code proteger executer un traitement puis refermer VBE.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    As-tu jeté un oeil là où Nils.engot a trouvé ses infos...
    Si tu trouve une réponse, merci de nous aiguiller.
    A+

  14. #14
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut ouskel'n'or:

    j'ai trouve cela, je ne l'ai pas encore teste.
    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
    35
    36
    37
    38
    39
     
    Sub TestProtect() 
    ProtectVBProject Workbooks("Proteger_deproteger.xls"), "motdepasse" 
    End Sub 
     
    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 
     
    Sub ProtectVBProject(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 "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _ 
    Password & "~" 
     
      Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute 
     
      WB.Save 
    End Sub
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  15. #15
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    ouskel'n'or je viens de comprendre le code de Nils.engot il a donne toutes les infos (si on compare avec le code que j'ai poste precedement) les partie en commentaires sont donnees pour la deprotection il n'a pas reecrit le code proteger/deproteger, je teste et je vois ce que cela donne.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  16. #16
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Je confirme le dernier code fournis fonctionne quand on le lance depuis la feuille d'un classeur, mais pas en pas a pas la je ne sais pas pourquoi si quelqu'un peut m'expliquer j'aimerais comprendre.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Les sendkeys ?
    au lieu de faire du pas à pas, as-tu essayé les point d'arrêts ?
    Tu sautes une instruction, puis une autre... Tu devrais pouvoir trouver la raison du phénomène...
    Je ne te demande pas pourquoi tu tiens au pas à pas

  18. #18
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    C'est juste que j'aime comprendre comment cela marche, quels sont les valeurs recuperees, comment elles sont passees, j'aurais peut etre besoin de ces renseignements pour essayer de le traduire en OleExcel BCB6.

    J'ai deja poste dans le Forum, et les codes recuperes a l'issue des discutions on ete convertis en OleExcel, et seront disponibles dans la FAQ Builder a la prochaine mise a jour, j'ai demande a Ricky81 que les moderateurs de votre Forum soient remercies.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  19. #19
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci ouskel'n'or merci bbil:
    Les tentatives pour tester le code avec des points d'arret bloque le code, mais bon ca marche, je verrais cela plus tard a tete reposee.
    Alors le code ci dessous fonctionne pour deproteger/proteger le code VBE.
    Pour l'utiliser
    - 1 - on ouvre le classeur1 dont le code VBE est protege
    - 2 - on ouvre le classeur2 qui contient les macros protect/deprotect
    - 3 - a partir d'une feuille du classeur2 on lance la macro deprotect
    - 4 - on effectue la manipulation souhaitee sur le code
    - 5 - a partir d'une feuille du classeur2 on lance la macro protect
    Je n'ai pas essaye a partir d'une fonction Run -> deprotect ou protect, peut etre a voir?
    Le code qui est complet et fonctionnel :

    [/QUOTE]
    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
    35
    36
    37
    38
    39
     
    Sub TestProtect() 
    ProtectVBProject Workbooks("Proteger_deproteger.xls"), "motdepasse" 
    End Sub 
     
    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 
     
    Sub ProtectVBProject(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 "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _ 
    Password & "~" 
     
      Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute 
     
      WB.Save 
    End Sub
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok, un topic à se souvenir. Si tu pouvais ajouter la bibliothèque nécessaire et les déclarations, ce serait complet et on pourrait garder l'adresse dans un coin
    Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/06/2010, 09h32
  2. Piloter Microsoft Excel 2003 avec Interop
    Par marcolet.pierre dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 20/02/2008, 22h27
  3. [Ole Excel]OLE Error avec numberformat
    Par ired dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 13/03/2006, 20h55
  4. Comment créer un lien hypertexte avec une liaison OLE Excel ?
    Par vieuxsinge dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 08/12/2005, 17h16
  5. Petit prob avec l'OLE EXCELL sous builder
    Par vladi dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/03/2005, 19h30

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