Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de
ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module,
qu'il soit de classe ou standard), et pour chaque objet "VBComponent",
d'itérer sur les lignes du module et de remplacer une chaine de
caractères par une autre. Dans l'exemple ci-dessous, je remplace
systématiquement chaque ligne du module en utilisant la fonction
Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre"""
plutôt que de remplacer la chaine "pierre" pour ne remplacer que les
occurences qui concernent bien le mot de passe. Ce code est évidemment
à tester sur des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans
mon exemple) et d'exclure ce module de la boucle de remplacement, pour
ne pas modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2"
Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec
des Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir
recours à une variable publique, etc... mais je maintiens quand même
ma question ;-) Merci d'avance pour vos lumières ...
JP
Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de
ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module,
qu'il soit de classe ou standard), et pour chaque objet "VBComponent",
d'itérer sur les lignes du module et de remplacer une chaine de
caractères par une autre. Dans l'exemple ci-dessous, je remplace
systématiquement chaque ligne du module en utilisant la fonction
Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre"""
plutôt que de remplacer la chaine "pierre" pour ne remplacer que les
occurences qui concernent bien le mot de passe. Ce code est évidemment
à tester sur des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans
mon exemple) et d'exclure ce module de la boucle de remplacement, pour
ne pas modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2"
Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec
des Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir
recours à une variable publique, etc... mais je maintiens quand même
ma question ;-) Merci d'avance pour vos lumières ...
JP
Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de
ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module,
qu'il soit de classe ou standard), et pour chaque objet "VBComponent",
d'itérer sur les lignes du module et de remplacer une chaine de
caractères par une autre. Dans l'exemple ci-dessous, je remplace
systématiquement chaque ligne du module en utilisant la fonction
Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre"""
plutôt que de remplacer la chaine "pierre" pour ne remplacer que les
occurences qui concernent bien le mot de passe. Ce code est évidemment
à tester sur des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans
mon exemple) et d'exclure ce module de la boucle de remplacement, pour
ne pas modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2"
Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec
des Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir
recours à une variable publique, etc... mais je maintiens quand même
ma question ;-) Merci d'avance pour vos lumières ...
JP
Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" a écrit dans le message de news:
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" <nospam-j-pascal@free.fr> a écrit dans le message de news:
OAspu7mEIHA.5604@TK2MSFTNGP04.phx.gbl...
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" a écrit dans le message de news:
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
A la lecture de son texte, il semble qu'il prend le mot de passe comme
exemple (ie)... (c'était peut-être un mauvais exemple...)
L'utilité de le faire par VBA, c'est de pouvoir modifier un code déployé
sur plusieurs machines, sur lesquelles il n'a probablement pas la
main... Même s'il y a d'autres techniques à utiliser dans ce cas,
notamment les xla...
Mais si le projet est protégé, je suis d'accord avec toi... il faut le
déprotéger à la main, car il n'existe pas d'autre solution, à mon avis...Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" a écrit dans le message de news:
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours
à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
A la lecture de son texte, il semble qu'il prend le mot de passe comme
exemple (ie)... (c'était peut-être un mauvais exemple...)
L'utilité de le faire par VBA, c'est de pouvoir modifier un code déployé
sur plusieurs machines, sur lesquelles il n'a probablement pas la
main... Même s'il y a d'autres techniques à utiliser dans ce cas,
notamment les xla...
Mais si le projet est protégé, je suis d'accord avec toi... il faut le
déprotéger à la main, car il n'existe pas d'autre solution, à mon avis...
Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" <nospam-j-pascal@free.fr> a écrit dans le message de news:
OAspu7mEIHA.5604@TK2MSFTNGP04.phx.gbl...
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours
à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
A la lecture de son texte, il semble qu'il prend le mot de passe comme
exemple (ie)... (c'était peut-être un mauvais exemple...)
L'utilité de le faire par VBA, c'est de pouvoir modifier un code déployé
sur plusieurs machines, sur lesquelles il n'a probablement pas la
main... Même s'il y a d'autres techniques à utiliser dans ce cas,
notamment les xla...
Mais si le projet est protégé, je suis d'accord avec toi... il faut le
déprotéger à la main, car il n'existe pas d'autre solution, à mon avis...Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" a écrit dans le message de news:
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours
à une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module, qu'il
soit de classe ou standard), et pour chaque objet "VBComponent", d'itérer
sur les lignes du module et de remplacer une chaine de caractères par une
autre. Dans l'exemple ci-dessous, je remplace systématiquement chaque
ligne du module en utilisant la fonction Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre""" plutôt
que de remplacer la chaine "pierre" pour ne remplacer que les occurences
qui concernent bien le mot de passe. Ce code est évidemment à tester sur
des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans mon
exemple) et d'exclure ce module de la boucle de remplacement, pour ne pas
modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2" Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une variable publique, etc... mais je maintiens quand même ma question
;-)
Merci d'avance pour vos lumières ...
JP
--
Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")
Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module, qu'il
soit de classe ou standard), et pour chaque objet "VBComponent", d'itérer
sur les lignes du module et de remplacer une chaine de caractères par une
autre. Dans l'exemple ci-dessous, je remplace systématiquement chaque
ligne du module en utilisant la fonction Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre""" plutôt
que de remplacer la chaine "pierre" pour ne remplacer que les occurences
qui concernent bien le mot de passe. Ce code est évidemment à tester sur
des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans mon
exemple) et d'exclure ce module de la boucle de remplacement, pour ne pas
modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2" Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une variable publique, etc... mais je maintiens quand même ma question
;-)
Merci d'avance pour vos lumières ...
JP
--
Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")
Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module, qu'il
soit de classe ou standard), et pour chaque objet "VBComponent", d'itérer
sur les lignes du module et de remplacer une chaine de caractères par une
autre. Dans l'exemple ci-dessous, je remplace systématiquement chaque
ligne du module en utilisant la fonction Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre""" plutôt
que de remplacer la chaine "pierre" pour ne remplacer que les occurences
qui concernent bien le mot de passe. Ce code est évidemment à tester sur
des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans mon
exemple) et d'exclure ce module de la boucle de remplacement, pour ne pas
modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2" Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une variable publique, etc... mais je maintiens quand même ma question
;-)
Merci d'avance pour vos lumières ...
JP
--
Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")
Bonjour Pierre,
J'ai fait (je crois !) ce que tu as dit ...
Avant de lire ton second message, ça boguait sur :
"For i = 1 To ThisWorkbook.VBProject.VBComponents.Count"
Msg = "Erreur d'exécution 1004" "L'accès par programme au projet Visual Basic
n'est pas fiable" ...
Corrigé ;-)
Ca fonctionne à merveille(s) ! Merci ++
En fait, dans le cas présent (mais c'est un peu hors-sujet) ça me pose un
autre problème ...
A la fermeture du classeur, le nouveau MdP n'est pas reconnu !!
'--------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim réponse As Variant
Dim Sh As Worksheet
ThisWorkbook.Unprotect "toto" 'le BOGUE !!
Application.EnableEvents = False
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
réponse = MsgBox("Voulez-vous enregistrer une copie sous la forme : "
_
& "Date Heure Fichier.xls" & " ?", vbYesNo)
With ThisWorkbook
ChDrive "C"
ChDir .Path
If réponse = vbYes Then '6
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " &
.Name
Else
Cancel = True
End If
End With
End If
Application.EnableCancelKey = xlDisabled
Application.ScreenUpdating = False
Feuil15.Visible = True 'Feuil15.Visible = xlSheetVisible
For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil15" Then
Sh.Visible = xlSheetVeryHidden
End If
Next
End Sub
'----------------------------------------
Pour tout dire, j'avais fait du zèle en utilisant un MdP "dynamique" genre
"la date du jour + un signe" ... Tout fonctionnait bien le "jour J" jusqu'à
ce que je réalise que c'était la cata totale le "jour J + 1" !!! Le seul truc
que j'ai trouvé à l'époque a été de changer la date système !!!
Je pense que le pb n'est pas insoluble, mais pour l'instant, je sèche ...
En attendant, pouvoir changer tous les MdP d'un coup, c'est génial :o)
Mes MdP servent aussi bien à la protection des Feuilles que du Classeur ...
Je sais que Stéphane va me rappeler l'usage "salvateur" de UserInterfaceOnly
= True ... que je n'ai jamais su vraiment mettre en pratique ;-( J'ose à
peine reposter sur le sujet ...
Encore merci,
JP
"Pierre Fauconnier" a écrit dans le
message de news:Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module, qu'il
soit de classe ou standard), et pour chaque objet "VBComponent", d'itérer
sur les lignes du module et de remplacer une chaine de caractères par une
autre. Dans l'exemple ci-dessous, je remplace systématiquement chaque ligne
du module en utilisant la fonction Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre""" plutôt
que de remplacer la chaine "pierre" pour ne remplacer que les occurences
qui concernent bien le mot de passe. Ce code est évidemment à tester sur
des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans mon
exemple) et d'exclure ce module de la boucle de remplacement, pour ne pas
modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2" Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
-- Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du moment
présent")
Bonjour Pierre,
J'ai fait (je crois !) ce que tu as dit ...
Avant de lire ton second message, ça boguait sur :
"For i = 1 To ThisWorkbook.VBProject.VBComponents.Count"
Msg = "Erreur d'exécution 1004" "L'accès par programme au projet Visual Basic
n'est pas fiable" ...
Corrigé ;-)
Ca fonctionne à merveille(s) ! Merci ++
En fait, dans le cas présent (mais c'est un peu hors-sujet) ça me pose un
autre problème ...
A la fermeture du classeur, le nouveau MdP n'est pas reconnu !!
'--------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim réponse As Variant
Dim Sh As Worksheet
ThisWorkbook.Unprotect "toto" 'le BOGUE !!
Application.EnableEvents = False
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
réponse = MsgBox("Voulez-vous enregistrer une copie sous la forme : "
_
& "Date Heure Fichier.xls" & " ?", vbYesNo)
With ThisWorkbook
ChDrive "C"
ChDir .Path
If réponse = vbYes Then '6
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " &
.Name
Else
Cancel = True
End If
End With
End If
Application.EnableCancelKey = xlDisabled
Application.ScreenUpdating = False
Feuil15.Visible = True 'Feuil15.Visible = xlSheetVisible
For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil15" Then
Sh.Visible = xlSheetVeryHidden
End If
Next
End Sub
'----------------------------------------
Pour tout dire, j'avais fait du zèle en utilisant un MdP "dynamique" genre
"la date du jour + un signe" ... Tout fonctionnait bien le "jour J" jusqu'à
ce que je réalise que c'était la cata totale le "jour J + 1" !!! Le seul truc
que j'ai trouvé à l'époque a été de changer la date système !!!
Je pense que le pb n'est pas insoluble, mais pour l'instant, je sèche ...
En attendant, pouvoir changer tous les MdP d'un coup, c'est génial :o)
Mes MdP servent aussi bien à la protection des Feuilles que du Classeur ...
Je sais que Stéphane va me rappeler l'usage "salvateur" de UserInterfaceOnly
= True ... que je n'ai jamais su vraiment mettre en pratique ;-( J'ose à
peine reposter sur le sujet ...
Encore merci,
JP
"Pierre Fauconnier" <pierre.fauconnier@nospam.nospam.pfi.be> a écrit dans le
message de news: mn.9d057d7a6ec33141.74786@nospam.nospam.pfi.be...
Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module, qu'il
soit de classe ou standard), et pour chaque objet "VBComponent", d'itérer
sur les lignes du module et de remplacer une chaine de caractères par une
autre. Dans l'exemple ci-dessous, je remplace systématiquement chaque ligne
du module en utilisant la fonction Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre""" plutôt
que de remplacer la chaine "pierre" pour ne remplacer que les occurences
qui concernent bien le mot de passe. Ce code est évidemment à tester sur
des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans mon
exemple) et d'exclure ce module de la boucle de remplacement, pour ne pas
modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2" Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
-- Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du moment
présent")
Bonjour Pierre,
J'ai fait (je crois !) ce que tu as dit ...
Avant de lire ton second message, ça boguait sur :
"For i = 1 To ThisWorkbook.VBProject.VBComponents.Count"
Msg = "Erreur d'exécution 1004" "L'accès par programme au projet Visual Basic
n'est pas fiable" ...
Corrigé ;-)
Ca fonctionne à merveille(s) ! Merci ++
En fait, dans le cas présent (mais c'est un peu hors-sujet) ça me pose un
autre problème ...
A la fermeture du classeur, le nouveau MdP n'est pas reconnu !!
'--------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim réponse As Variant
Dim Sh As Worksheet
ThisWorkbook.Unprotect "toto" 'le BOGUE !!
Application.EnableEvents = False
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
réponse = MsgBox("Voulez-vous enregistrer une copie sous la forme : "
_
& "Date Heure Fichier.xls" & " ?", vbYesNo)
With ThisWorkbook
ChDrive "C"
ChDir .Path
If réponse = vbYes Then '6
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " &
.Name
Else
Cancel = True
End If
End With
End If
Application.EnableCancelKey = xlDisabled
Application.ScreenUpdating = False
Feuil15.Visible = True 'Feuil15.Visible = xlSheetVisible
For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil15" Then
Sh.Visible = xlSheetVeryHidden
End If
Next
End Sub
'----------------------------------------
Pour tout dire, j'avais fait du zèle en utilisant un MdP "dynamique" genre
"la date du jour + un signe" ... Tout fonctionnait bien le "jour J" jusqu'à
ce que je réalise que c'était la cata totale le "jour J + 1" !!! Le seul truc
que j'ai trouvé à l'époque a été de changer la date système !!!
Je pense que le pb n'est pas insoluble, mais pour l'instant, je sèche ...
En attendant, pouvoir changer tous les MdP d'un coup, c'est génial :o)
Mes MdP servent aussi bien à la protection des Feuilles que du Classeur ...
Je sais que Stéphane va me rappeler l'usage "salvateur" de UserInterfaceOnly
= True ... que je n'ai jamais su vraiment mettre en pratique ;-( J'ose à
peine reposter sur le sujet ...
Encore merci,
JP
"Pierre Fauconnier" a écrit dans le
message de news:Bonsoir
Oui, c'est possible en travaillant sur l'objet VBProject de ThisWorkbook.
Le principe est d'itérer sur chaque ""VBComponent" (chaque module, qu'il
soit de classe ou standard), et pour chaque objet "VBComponent", d'itérer
sur les lignes du module et de remplacer une chaine de caractères par une
autre. Dans l'exemple ci-dessous, je remplace systématiquement chaque ligne
du module en utilisant la fonction Replace sur le texte de la ligne.
Il est très important de choisir sa chaine avec soin. Dans l'exemple
ci-dessous, j'ai choisi de remplacer la chaine "mdp = ""pierre""" plutôt
que de remplacer la chaine "pierre" pour ne remplacer que les occurences
qui concernent bien le mot de passe. Ce code est évidemment à tester sur
des classeurs martyrs avant de le mettre en production.
Je conseille d'isoler la macro dans un module spécifique (module2 dans mon
exemple) et d'exclure ce module de la boucle de remplacement, pour ne pas
modifier le code de remplacement...
Sub RemplacerDansVba()
Dim i As Integer
Dim j As Integer
Dim TexteCherche As String
Dim TexteRemplacement As String
TexteCherche = "mdp = ""pierre"""
TexteRemplacement = "mdp = ""martine"""
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Name <> "Module2" Then
For j = 1 To _
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.CountOfLines
ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.ReplaceLine (j), _
Replace(ThisWorkbook.VBProject.VBComponents(i). _
CodeModule.Lines(j, 1), _
TexteCherche, TexteRemplacement)
Next j
End If
Next i
End Sub
Cela te convient?Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
-- Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du moment
présent")
Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" a écrit dans le message de news:
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" <nospam-j-pascal@free.fr> a écrit dans le message de news:
OAspu7mEIHA.5604@TK2MSFTNGP04.phx.gbl...
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP
Ben si ton projet VBA n'est pas verrouillé, tu peux facilement utiliser
la commande "Remplacer" du menu Édition de la barre de menu dans
la fenêtre de l'éditeur de code VBA Pourquoi créer une nouvelle
procédure à cet effet ? De plus, on peut se poser la question sur
l'utilité du mot de passe.
Si ton projet est verrouillé, il n'existe aucun moyen de faire ce que tu
demandes à moins de déverrouiller le code au préalable !
"j-pascal" a écrit dans le message de news:
Bonjour,
Est-il possible d'affecter une macro au code du projet ?
J'explique :
Peut-on créer une macro qui balayerait l'ensemble du code (Feuilles -
ThisWorkbook - UF - etc.) pour remplacer un mot de passe (ie) (avec des
Private Sub) ?
Dans le cas présent, vous allez peut-être me proposer d'avoir recours à
une
variable publique, etc... mais je maintiens quand même ma question ;-)
Merci d'avance pour vos lumières ...
JP