Créer une version-client sans VBA

Roukkeus

XLDnaute Nouveau
Bonjour à tous,

J'ai créé un fichier Excel que mon utilisateur peut configurer (selon sa langue etc...). Après config, il clique sur un bouton, ce qui déclenche une macro. Cette macro (que nous appellerons "bob") lui génère une version "propre" du fichier pour son client et l'enregistre sous un nouveau nom :
- les feuilles contenant les éléments à configurer sont définies en VeryHidden
- les feuilles utilisables par le client sont protégées (sauf certaines plages)
- etc...

Mes questions sont maintenant de savoir s'il est possible :
1. d'empêcher le client de changer le statut des feuilles cachées (XlSheetVisible)
2. d'auto-supprimer la macro "bob", qui ne sert à rien au client
3. de n'exécuter les deux points précédents qu'après la macro "bob" (pour permettre à l'utilisateur d'avoir encore accès au code) ?

Merci par avance !:D
++
 
C

Compte Supprimé 979

Guest
Re : Créer une version-client sans VBA

Bonjour Roukkeus,

1) Pour empêcher le client de changer les statuts des feuilles
il suffit de protéger le projet VBA
Dans l'éditeur VBA -> Menu Outils -> Propriété de VBA Project
Onglet "Protection"

2) Pour supprimer du code selon l'objet
Code:
Sub EffaceCodeFeuille(NomFeuille As String)
  With ActiveWorkbook.VBProject.VBComponents _
      (ActiveWorkbook.Sheets(NomFeuille).CodeName).CodeModule
    .DeleteLines 1, .CountOfLines
    .CodePane.Window.Close
  End With
End Sub

Sub EffaceCodeThisWbk()
  With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
    .DeleteLines 1, .CountOfLines
    .CodePane.Window.Close
  End With
End Sub

Sub EffaceUserForm(MonUserForm As String)
ActiveWorkbook.VBProject.VBComponents.Remove _
    ActiveWorkbook.VBProject.VBComponents(MonUserForm)
End Sub

Sub EffaceModule(MonModule As String)
ActiveWorkbook.VBProject.VBComponents.Remove _
    ActiveWorkbook.VBProject.VBComponents(MonModule)
End Sub

3) il suffit de lancer une des procédures après Bob

A+
 

Roukkeus

XLDnaute Nouveau
Re : Créer une version-client sans VBA

Re-bonjour,

J'essaye de coder ce que tu m'as proposé, Bruno, en ajoutant une condition relative au nom du fichier.
Code:
Sub EffaceModule(MonModule As String)
ActiveWorkbook.VBProject.VBComponents.Remove _
    ActiveWorkbook.VBProject.VBComponents(MonModule)
End Sub

Ce qui donne :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Filename = Sheets("Translation").Range("B20").Value Then
ActiveWorkbook.VBProject.VBComponents.Remove _
    ActiveWorkbook.VBProject.VBComponents("Module11")
Else: Exit Sub
End If
End Sub

J'ai essayé de placer ce code dans ThisWorkbook ou dans le module11 lui-même mais je n'arrive pas à tuer ce fichu module ! Grrrr!

Une idée, un conseil, un mouchoir ? Merci ! ++
 
C

Compte Supprimé 979

Guest
Re : Créer une version-client sans VBA

Re,

Si tu mets le code dans ThisWorkbook et que le nom du classeur ACTIF est égal à la valeur de la cellule B20 dans la feuille "Translation", il n'y a pas de raison !

Pour moi, cela fonctionne bien ;)

A+
 

Roukkeus

XLDnaute Nouveau
Re : Créer une version-client sans VBA

Bonjour,

Résolu :D!
En fait, il m'affichait "l'accès au Virtual Basic par programme n'est pas fiable". Sur Google, j'ai vu que pour résoudre ce pb il fallait certifier ses macros, ou demander à Excel de leur faire confiance (qqch comme ça).
Ceci ne répondait pas à mon objectif puisque l'utilisateur de mon fichier n'a pas forcément les même paramètre Excel que moi. J'aurais donc été obligé de fournir un Readme etc...==> pour l'automatisation c'est pas terrible...

Donc pour contourner tout ça, j'ai simplement demandé à ma macro de dupliquer les onglets qui m'intéressent dans un nouveau classeur.
Je me retrouve donc avec un fichier client sans macro tout en préservant la version "utilisateur"...

Pour info, le code (au cas où) :
Code:
Sheets(Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5", "Feuil6")).Select
    Sheets("Feuil1").Activate
    Application.CutCopyMode = False
    Sheets(Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5", "Feuil6")).Copy

Merci pour tout !
++
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 677
Messages
2 090 825
Membres
104 677
dernier inscrit
soufiane12