Utilisation unique d'une macro

  • Initiateur de la discussion Nicko
  • Date de début
N

Nicko

Guest
Salut le forum,

Je voudrais savoir s'il est possible de bloquer l'utilisation d'une macro, je m'explique :

j'ai affecté à une image une macro et je voudrais que l'utilisateur ne puisse appuyer, et donc lancer la macro, qu'une seule fois et qu'il soit bloqué s'il lance une deuxième fois la macro ? C'est en fait une utilisation unique de la macro mais uniquement pour ce fichier car je voudrais qu'il puisse l'utiliser s'il copie le fichier et qu'il change le nom du fichier.

Ca a l'air compliqué comme ça mais si quelqu'un comprend merci de me faire signe :))

Longue vie au forum...
 
@

@Christophe@

Guest
Bonsoir

Pourquoi ne pas implanter une macro dans ta macro su efface cette fameuse macro

Je m'explique, tu clique sur ton bouton, ta macro s'execute et en fin de macro elle s'auto dédruit.

Quand penses tu

@Christophe@
 
F

fabrice

Guest
bonjour à vous deux,

je me permet de rentrer dans votre conversation car je suis interressé par cette histoire.
En ce qui me concerne, je cherche à faire une version démo de mon programme.

Pour moi, ce que tu proposes @Christophe@ me va parfaitement.

voila, je suis désolé de m'immisser dans votre conversation,
FAb
 
@

@Christophe@

Guest
Re

Voici un exemple d'une macro qui supprime tous ce qui touche a VBA dans un fichier ( userform, module, macro )

Sub EffaceMacro ()
Dim VBC As Object

With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
End Sub


Et voici une macro qui supprime uniquement le macro d'une feuille au choix:

With ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Sheets("NomFeuille").CodeName).CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With


NomFeuille dans le code doit être remplacé par le nom de ta feuille

Bonne soirée a tous

@Christophe@
 
@

@+Thierry

Guest
Salut @Xtof@, Fabrice, Nicko et le Forum

Cher ami @Xtof@

Premièrement je dois mettre en garde ceux/celles qui essaieraient ce code "EffaceMacro"... C'est un radical !!!!!!!!! [/b] Il n'y aura plus rien !!! Tout votre Projet est éradiqué[/b]... ATTENTION DONC ! à tester sur un fichier bidon avant, ou alors sauver votre travail, car il n'y aura pas de "Undo" ...

Humm, pour ce qui est de ton interprétation à la question de Nicko, je me permets de diverger un tant soit peu.

Est-il vraiment nécessaire de virer le macro ? enfin çà me parait bien compliquer pour faire suite à la demande de Nicko..... Pour Fab peut-être... Dans lequel cas il y a aussi toute la panoplie des instructions pour "jongler" dans les modules en suivant le guide :

Fil de Discussion Recencé pour Database XLD Numéro 21649
(connaissant Fab çà évitera des questions !! lol)


Mais revenos à Nicko, disons que moi je verrai bien plus simple puisque Nicko veut simplement éviter que le User active une deuxième fois cette macro...

Il suffit d'écrire quelque part... Même un Label caché, ou une cellule IV65536 d'une feuille "VeryHidden" une condition True ou False...

La macro qui devra ne s'éxécuter qu'une fois aura un test dans ce style à l'ouverture :

Sub LaMacroOneTime ()
Dim Test As Boolean

Test = Sheets("X").Range("IV65536")

If Test = True Then Exit Sub 'ou on peut coller un MsgBox...

Sheets("X").Range("IV65536") = False
ThisWorBook.Save

Blah Blah blah la macro...........

End Sub

Of Course, on aura pris soin de sauver la première fois le classeur avec la Sheets("X").Range("IV65536") avec la valeur False...

Voilà c'est une autre approche...

D'ailleurs Nicko n'explique pas tout à fait clairement si il veut ceci "temporairement" ce bloquage, ... Pendant l'usage... Alors à ce moment là il y a aussi la possibilité de mettre cette vraiable en Publique et pas l'écrire en dur sur IV65536... Bon on part du principe qu'il le veut en dûr ! (plus c'est dûr plus c'est bon comme dirait l'autre !!)

Mais ensuite, là où çà diverge totalement, et où (je me demande) va finir ce pauvre Nicko si il a détruit toutes les macros... C'est qu'il veut récupérer la possibilité de cette macro si on fait un SaveAs sous un autre nom....

Dis nous un peu comment qu'il fait après avoir fait tourné ton truc de destruction pire qu'Atila ??? lol

Moi je sais !! lol

Il met ceci dans le Private Module de ThisWorkBook...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then
Sheets("X").Range("IV65536").Formula = True
End If
End Sub

Et hop !! :)))

Bonne Soirée à toi @Xtof@ et à vous Fab et Nicko et le Forum !!

@+Thierry
 
@

@+Thierry

Guest
Humm en écrivant je me suis mélangé les pinceau avec mon Boolean !!

Si on met la condition à True pour autoriser la macro... faut évidemment changer cette ligne :

If Test = True Then Exit Sub 'ou on peut coller un MsgBox...

par if Test = False Then Exit Sub...


C'était juste pour voir si il y a quelqu'un qui suit Mdrr !!!

@+Thierry
 
@

@+Thierry

Guest
Salut STéphane,

Dans un nom caché... Pourquoi pas... Mais en fait je ne suis pas sûr de saisir.

Tu veux nommer un objet au lieu d'écrire dans une cellule ? et pouvoir récupérer sa valeur, oui ce doit être réalisable, mais par contre je ne pense pas qu'on puisse nommer directement un Objet True ou False, il ne faudra donc pas passer directement par une variable de type boolean. Mais on doit pouvoir le faire.

Bon App
@+Thierry
 

Discussions similaires

Réponses
16
Affichages
582
Réponses
2
Affichages
586
Réponses
6
Affichages
193

Statistiques des forums

Discussions
314 653
Messages
2 111 579
Membres
111 206
dernier inscrit
Dante76