OVH Cloud OVH Cloud

Public / private autoprogrammable

3 réponses
Avatar
M41
Bonjour

Objet : auto programmation de VBA :
une macro doit transformer des "Private Sub..." en "Public Sub..." et
inversement
ce qui permet de changer la liste des macros accessibles à l'utilisateur qui
travaille sur une feuille Excel

Comment écrire le code de cette macro qui doit :

1/ Détecter le nom SonNom de la routine sub : Sub SonNom ()
dans :
un module,
un programme de feuille,
le code d'un Userform,
le code de ThisWorkBook

2/ Changer son mode de fonctionnement public en private et inversement

Merci
@+
M41

3 réponses

Avatar
michdenis
Bonjour M41,


Tu peux essayer ce qui suit :

Tu renseignes adéquatement selon ce que tu désires
faire, les variables
ChaineRecherchée et ChaineRemplace
'-----------------------------------
Sub ChangeAppelSub()

Dim ChaineRecherchée As String
Dim ChaineRemplace As String
Dim Trouver As Integer
Dim I As Integer
Dim Module As Object

ChaineRecherchée = "Public Sub"
ChaineRemplace = "Private Sub"
For Each Module In ActiveWorkbook.VBProject.VBComponents
With Module.CodeModule
'Si le module ou est mis cette proc se nomme "Module1"
For I = .CountOfLines To 1 Step -1
Trouver = InStr(.Lines(I, 1), ChaineRecherchée)
If Trouver <> 0 Then
.ReplaceLine I, Left(.Lines(I, 1) _
, Trouver - 1) & ChaineRemplace & _
Mid(.Lines(I, 1), Trouver + Len(ChaineRecherchée) _
, Len(.Lines(I, 1)))
End If
Next I
End With
Next
Set Module = Nothing
End Sub
'-----------------------------------


Salutations!




"M41" a écrit dans le message de news: 43d243fe$0$6651$
Bonjour

Objet : auto programmation de VBA :
une macro doit transformer des "Private Sub..." en "Public Sub..." et
inversement
ce qui permet de changer la liste des macros accessibles à l'utilisateur qui
travaille sur une feuille Excel

Comment écrire le code de cette macro qui doit :

1/ Détecter le nom SonNom de la routine sub : Sub SonNom ()
dans :
un module,
un programme de feuille,
le code d'un Userform,
le code de ThisWorkBook

2/ Changer son mode de fonctionnement public en private et inversement

Merci
@+
M41
Avatar
michdenis
Bonjour M41,

Une variante de la procédure précédente,
Tu la copie intégralement sans aucune modification.

à chaque exécution, toutes les procédures déclarées
Public Sub deviendront Private Sub et celles déclarées
Private Sub deviendront Public sub.

'---------------------------------------
Private Sub ChangeAppelSub()

Dim ChaineRecherchée As String
Dim ChaineRemplace As String
Dim Trouver As Integer
Dim I As Integer
Dim Module As Object

Const x = "Private Sub"
Const y = "Public sub"

For Each Module In ActiveWorkbook.VBProject.VBComponents
With Module.CodeModule
For I = .CountOfLines To 1 Step -1
Trouver = InStr(.Lines(I, 1), ChaineRecherchée)
sss = .Lines(I, 1)
If Trouver <> 0 Then
If Mid(.Lines(I, 1), 1, 6) = "Public" Then
ChaineRecherchée = "Public Sub"
ChaineRemplace = x
ElseIf Mid(.Lines(I, 1), 1, 7) = "Private" Then
ChaineRecherchée = "Private Sub"
ChaineRemplace = y
End If
If ChaineRemplace <> "" Then
.ReplaceLine I, Left(.Lines(I, 1) _
, Trouver - 1) & ChaineRemplace & _
Mid(.Lines(I, 1), Trouver + Len(ChaineRecherchée) _
, Len(.Lines(I, 1)))
ChaineRecherchée = ""
ChaineRemplace = ""
End If
End If
Next I
End With
Next
Set Module = Nothing
End Sub
'---------------------------------------


Salutations!


"M41" a écrit dans le message de news: 43d243fe$0$6651$
Bonjour

Objet : auto programmation de VBA :
une macro doit transformer des "Private Sub..." en "Public Sub..." et
inversement
ce qui permet de changer la liste des macros accessibles à l'utilisateur qui
travaille sur une feuille Excel

Comment écrire le code de cette macro qui doit :

1/ Détecter le nom SonNom de la routine sub : Sub SonNom ()
dans :
un module,
un programme de feuille,
le code d'un Userform,
le code de ThisWorkBook

2/ Changer son mode de fonctionnement public en private et inversement

Merci
@+
M41
Avatar
Michel41
Bonjour et merci
@+ M41
"michdenis" a écrit dans le message de news:

Bonjour M41,

Une variante de la procédure précédente,
Tu la copie intégralement sans aucune modification.

à chaque exécution, toutes les procédures déclarées
Public Sub deviendront Private Sub et celles déclarées
Private Sub deviendront Public sub.

'---------------------------------------
Private Sub ChangeAppelSub()

Dim ChaineRecherchée As String
Dim ChaineRemplace As String
Dim Trouver As Integer
Dim I As Integer
Dim Module As Object

Const x = "Private Sub"
Const y = "Public sub"

For Each Module In ActiveWorkbook.VBProject.VBComponents
With Module.CodeModule
For I = .CountOfLines To 1 Step -1
Trouver = InStr(.Lines(I, 1), ChaineRecherchée)
sss = .Lines(I, 1)
If Trouver <> 0 Then
If Mid(.Lines(I, 1), 1, 6) = "Public" Then
ChaineRecherchée = "Public Sub"
ChaineRemplace = x
ElseIf Mid(.Lines(I, 1), 1, 7) = "Private" Then
ChaineRecherchée = "Private Sub"
ChaineRemplace = y
End If
If ChaineRemplace <> "" Then
.ReplaceLine I, Left(.Lines(I, 1) _
, Trouver - 1) & ChaineRemplace & _
Mid(.Lines(I, 1), Trouver + Len(ChaineRecherchée) _
, Len(.Lines(I, 1)))
ChaineRecherchée = ""
ChaineRemplace = ""
End If
End If
Next I
End With
Next
Set Module = Nothing
End Sub
'---------------------------------------


Salutations!


"M41" a écrit dans le message de news:
43d243fe$0$6651$
Bonjour

Objet : auto programmation de VBA :
une macro doit transformer des "Private Sub..." en "Public Sub..." et
inversement
ce qui permet de changer la liste des macros accessibles à l'utilisateur
qui
travaille sur une feuille Excel

Comment écrire le code de cette macro qui doit :

1/ Détecter le nom SonNom de la routine sub : Sub SonNom ()
dans :
un module,
un programme de feuille,
le code d'un Userform,
le code de ThisWorkBook

2/ Changer son mode de fonctionnement public en private et inversement

Merci
@+
M41