Bonjour Daniel,
vu sous cet angle ... qu'on appelle d'urgence une équipe de réanimation !
;-))
Salutations!
"Daniel.M" a écrit dans le message de
news:
Bonjour Denis,Est-ce possible que tu tentes de noyer le poisson ? Ça va être
difficile avec JPS, il ne supporte pas l'eau !
;-))
:-))
Il commence déjà à caler. :-)Je pensais que la fonction Rechercher-Remplacer de la barre des
menus "Édition" de la fenêtre VBE aurait pu faire l'affaire
Rechercher : Range("A12")
Remplacer : [A12]
Avec l'option appropriée cochée :
procédure en cours ou module en cours ou le projet en cours
Ça fonctionne si tu cherches pour A12 mais si tu cherches pour 40 ou 50
adresses
de cellules différentes (dans quelques modules de code)?
Et 30 autres pour un autre fichier (parce que JPS, il voit grand!).
Donc, je pense que ça te prend un système qui identifie le texte à
l'intérieur
de l'instruction Range et qui reconnaît s'il s'agit d'une adresse simple
(ou
d'un mot qui réfère à un NOM défini dans Excel), auquel cas, il peut la
remplacer par [adresse].
S'il y a un tel système de détection (général, pas seulement pour A12) de
remplacement qui n'oblige pas à l'utilisation des expressions régulières
('regular expressions'), je suis preneur mais j'ai pas trouvé.
Salutations,
Daniel M.
Bonjour Daniel,
vu sous cet angle ... qu'on appelle d'urgence une équipe de réanimation !
;-))
Salutations!
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news:ul76MTyfEHA.1356@TK2MSFTNGP09.phx.gbl...
Bonjour Denis,
Est-ce possible que tu tentes de noyer le poisson ? Ça va être
difficile avec JPS, il ne supporte pas l'eau !
;-))
:-))
Il commence déjà à caler. :-)
Je pensais que la fonction Rechercher-Remplacer de la barre des
menus "Édition" de la fenêtre VBE aurait pu faire l'affaire
Rechercher : Range("A12")
Remplacer : [A12]
Avec l'option appropriée cochée :
procédure en cours ou module en cours ou le projet en cours
Ça fonctionne si tu cherches pour A12 mais si tu cherches pour 40 ou 50
adresses
de cellules différentes (dans quelques modules de code)?
Et 30 autres pour un autre fichier (parce que JPS, il voit grand!).
Donc, je pense que ça te prend un système qui identifie le texte à
l'intérieur
de l'instruction Range et qui reconnaît s'il s'agit d'une adresse simple
(ou
d'un mot qui réfère à un NOM défini dans Excel), auquel cas, il peut la
remplacer par [adresse].
S'il y a un tel système de détection (général, pas seulement pour A12) de
remplacement qui n'oblige pas à l'utilisation des expressions régulières
('regular expressions'), je suis preneur mais j'ai pas trouvé.
Salutations,
Daniel M.
Bonjour Daniel,
vu sous cet angle ... qu'on appelle d'urgence une équipe de réanimation !
;-))
Salutations!
"Daniel.M" a écrit dans le message de
news:
Bonjour Denis,Est-ce possible que tu tentes de noyer le poisson ? Ça va être
difficile avec JPS, il ne supporte pas l'eau !
;-))
:-))
Il commence déjà à caler. :-)Je pensais que la fonction Rechercher-Remplacer de la barre des
menus "Édition" de la fenêtre VBE aurait pu faire l'affaire
Rechercher : Range("A12")
Remplacer : [A12]
Avec l'option appropriée cochée :
procédure en cours ou module en cours ou le projet en cours
Ça fonctionne si tu cherches pour A12 mais si tu cherches pour 40 ou 50
adresses
de cellules différentes (dans quelques modules de code)?
Et 30 autres pour un autre fichier (parce que JPS, il voit grand!).
Donc, je pense que ça te prend un système qui identifie le texte à
l'intérieur
de l'instruction Range et qui reconnaît s'il s'agit d'une adresse simple
(ou
d'un mot qui réfère à un NOM défini dans Excel), auquel cas, il peut la
remplacer par [adresse].
S'il y a un tel système de détection (général, pas seulement pour A12) de
remplacement qui n'oblige pas à l'utilisation des expressions régulières
('regular expressions'), je suis preneur mais j'ai pas trouvé.
Salutations,
Daniel M.
tu m'avais demandé de te tenir au courant et je viens donc au rapport :
une première chose qui n'a rien à voir avec ta fonction : si tu copies une
ligne du module commençant par des ", celui en tête de ligne ne se copie pas
dans la feuille du classeur, pas plus que celui qui "referme" la chaîne de
caractères ; je ne vois pas pourquoi mais toi, si, je pense...
une seconde chose qui elle, concerne la fonction : celle-ci convertit
Selection.Range("A1:F1").Select en
Selection.[A1:F1].Select et ça va faire boguer mais peut-être que la phrase
au départ n'est pas terrible...
tu m'avais demandé de te tenir au courant et je viens donc au rapport :
une première chose qui n'a rien à voir avec ta fonction : si tu copies une
ligne du module commençant par des ", celui en tête de ligne ne se copie pas
dans la feuille du classeur, pas plus que celui qui "referme" la chaîne de
caractères ; je ne vois pas pourquoi mais toi, si, je pense...
une seconde chose qui elle, concerne la fonction : celle-ci convertit
Selection.Range("A1:F1").Select en
Selection.[A1:F1].Select et ça va faire boguer mais peut-être que la phrase
au départ n'est pas terrible...
tu m'avais demandé de te tenir au courant et je viens donc au rapport :
une première chose qui n'a rien à voir avec ta fonction : si tu copies une
ligne du module commençant par des ", celui en tête de ligne ne se copie pas
dans la feuille du classeur, pas plus que celui qui "referme" la chaîne de
caractères ; je ne vois pas pourquoi mais toi, si, je pense...
une seconde chose qui elle, concerne la fonction : celle-ci convertit
Selection.Range("A1:F1").Select en
Selection.[A1:F1].Select et ça va faire boguer mais peut-être que la phrase
au départ n'est pas terrible...
Merci pour le feedback.
' **********************************tu m'avais demandé de te tenir au courant et je viens donc au rapport :
une première chose qui n'a rien à voir avec ta fonction : si tu copies
une
ligne du module commençant par des ", celui en tête de ligne ne se copie
pas
dans la feuille du classeur, pas plus que celui qui "referme" la chaîne
de
caractères ; je ne vois pas pourquoi mais toi, si, je pense...
Oui. Excel 'résoud' cette chaîne lors de l'opération de copie (comme le
logiciel
résoud également les saisies qui ont l'air de dates).
Quelquefois, on apprécie beaucoup; d'autres fois, un peu moins.
Alternative 1:
============= > Mettre tout ton code en commentaire.
Ça se fait en une manip:
Sélectionner le code
Dans VBE, Activer le Menu Edit par clique droit sur une barre de menu et
cocher
le Menu Edition (pas celui des Menus traditionnels mais celui de la
nouvelle
barre de menus)
Il y a un bouton "Commenter le bloc" (ou quelque chose du genre)
Juste à côté, il y a un autre bouton (enlever les commentaires, "UnComment
Block" en anglais) que tu invoqueras lorsque tu auras recopier le code
transformé dans le module.
En passant, il n'y a aucune commande associée à ces boutons: ils
représentent
une fonctionnalité uniquement disponible à partir de l'interface (barre de
menu
Edit) ce qui est plutôt rare dans Excel : habituellement, toutes les
manipulations qu'on fait peuvent se programmer et retrouvent leur
équivalent
dans les Menus traditionnels Fichier/Édition/Vue/Format/etc.
Alternative 2:
============= >
Se passer de la copie vers les cellules et récupérer directement le code
(par
l'interface VBE Extensibility), le passer dans la fonction CodeObfuscator,
puis
le retourner en remplacement dans le module. C'est nettement la solution à
privilégier. Si tu as besoin d'aide ici, avise.
' **********************************une seconde chose qui elle, concerne la fonction : celle-ci convertit
Selection.Range("A1:F1").Select en
Selection.[A1:F1].Select et ça va faire boguer mais peut-être que la
phrase
au départ n'est pas terrible...
C'est une limite des crochets. Utilisés seuls, ils sont l'équivalent de
Range()
mais ils ne peuvent pas être des méthodes sur d'AUTRES objets Range (or
Selection est un tel objet Range).
AMA, il n'y a pas de parade qui vaudra en tout temps et je ne peux pas
savoir
dans quels cas il faut transformer ou non.
Ainsi, ici on peut transformer :
With Sheets(1)
.Range("A10") = "x"
End With
Et ici, on ne peut pas:
With Sheets(1).Range("B1")
.Range("A10") = "x"
End With
Malgré le fait que l'analyseur lexicographique verra la même ligne.
C'est donc une bonne raison de privilégier la méthode universelle Range().
:-)
Dernière remarque: Si vraiment ton code est une usine à gaz (comme tu
dis), tu
peux en publier des parties qui illustrent les carences en lisibilité. On
pourrait peut-être donner des conseils précis pour l'alléger (juste une
offre,
tu en fais ce que tu veux).
Merci pour le feedback.
' **********************************
tu m'avais demandé de te tenir au courant et je viens donc au rapport :
une première chose qui n'a rien à voir avec ta fonction : si tu copies
une
ligne du module commençant par des ", celui en tête de ligne ne se copie
pas
dans la feuille du classeur, pas plus que celui qui "referme" la chaîne
de
caractères ; je ne vois pas pourquoi mais toi, si, je pense...
Oui. Excel 'résoud' cette chaîne lors de l'opération de copie (comme le
logiciel
résoud également les saisies qui ont l'air de dates).
Quelquefois, on apprécie beaucoup; d'autres fois, un peu moins.
Alternative 1:
============= > Mettre tout ton code en commentaire.
Ça se fait en une manip:
Sélectionner le code
Dans VBE, Activer le Menu Edit par clique droit sur une barre de menu et
cocher
le Menu Edition (pas celui des Menus traditionnels mais celui de la
nouvelle
barre de menus)
Il y a un bouton "Commenter le bloc" (ou quelque chose du genre)
Juste à côté, il y a un autre bouton (enlever les commentaires, "UnComment
Block" en anglais) que tu invoqueras lorsque tu auras recopier le code
transformé dans le module.
En passant, il n'y a aucune commande associée à ces boutons: ils
représentent
une fonctionnalité uniquement disponible à partir de l'interface (barre de
menu
Edit) ce qui est plutôt rare dans Excel : habituellement, toutes les
manipulations qu'on fait peuvent se programmer et retrouvent leur
équivalent
dans les Menus traditionnels Fichier/Édition/Vue/Format/etc.
Alternative 2:
============= >
Se passer de la copie vers les cellules et récupérer directement le code
(par
l'interface VBE Extensibility), le passer dans la fonction CodeObfuscator,
puis
le retourner en remplacement dans le module. C'est nettement la solution à
privilégier. Si tu as besoin d'aide ici, avise.
' **********************************
une seconde chose qui elle, concerne la fonction : celle-ci convertit
Selection.Range("A1:F1").Select en
Selection.[A1:F1].Select et ça va faire boguer mais peut-être que la
phrase
au départ n'est pas terrible...
C'est une limite des crochets. Utilisés seuls, ils sont l'équivalent de
Range()
mais ils ne peuvent pas être des méthodes sur d'AUTRES objets Range (or
Selection est un tel objet Range).
AMA, il n'y a pas de parade qui vaudra en tout temps et je ne peux pas
savoir
dans quels cas il faut transformer ou non.
Ainsi, ici on peut transformer :
With Sheets(1)
.Range("A10") = "x"
End With
Et ici, on ne peut pas:
With Sheets(1).Range("B1")
.Range("A10") = "x"
End With
Malgré le fait que l'analyseur lexicographique verra la même ligne.
C'est donc une bonne raison de privilégier la méthode universelle Range().
:-)
Dernière remarque: Si vraiment ton code est une usine à gaz (comme tu
dis), tu
peux en publier des parties qui illustrent les carences en lisibilité. On
pourrait peut-être donner des conseils précis pour l'alléger (juste une
offre,
tu en fais ce que tu veux).
Merci pour le feedback.
' **********************************tu m'avais demandé de te tenir au courant et je viens donc au rapport :
une première chose qui n'a rien à voir avec ta fonction : si tu copies
une
ligne du module commençant par des ", celui en tête de ligne ne se copie
pas
dans la feuille du classeur, pas plus que celui qui "referme" la chaîne
de
caractères ; je ne vois pas pourquoi mais toi, si, je pense...
Oui. Excel 'résoud' cette chaîne lors de l'opération de copie (comme le
logiciel
résoud également les saisies qui ont l'air de dates).
Quelquefois, on apprécie beaucoup; d'autres fois, un peu moins.
Alternative 1:
============= > Mettre tout ton code en commentaire.
Ça se fait en une manip:
Sélectionner le code
Dans VBE, Activer le Menu Edit par clique droit sur une barre de menu et
cocher
le Menu Edition (pas celui des Menus traditionnels mais celui de la
nouvelle
barre de menus)
Il y a un bouton "Commenter le bloc" (ou quelque chose du genre)
Juste à côté, il y a un autre bouton (enlever les commentaires, "UnComment
Block" en anglais) que tu invoqueras lorsque tu auras recopier le code
transformé dans le module.
En passant, il n'y a aucune commande associée à ces boutons: ils
représentent
une fonctionnalité uniquement disponible à partir de l'interface (barre de
menu
Edit) ce qui est plutôt rare dans Excel : habituellement, toutes les
manipulations qu'on fait peuvent se programmer et retrouvent leur
équivalent
dans les Menus traditionnels Fichier/Édition/Vue/Format/etc.
Alternative 2:
============= >
Se passer de la copie vers les cellules et récupérer directement le code
(par
l'interface VBE Extensibility), le passer dans la fonction CodeObfuscator,
puis
le retourner en remplacement dans le module. C'est nettement la solution à
privilégier. Si tu as besoin d'aide ici, avise.
' **********************************une seconde chose qui elle, concerne la fonction : celle-ci convertit
Selection.Range("A1:F1").Select en
Selection.[A1:F1].Select et ça va faire boguer mais peut-être que la
phrase
au départ n'est pas terrible...
C'est une limite des crochets. Utilisés seuls, ils sont l'équivalent de
Range()
mais ils ne peuvent pas être des méthodes sur d'AUTRES objets Range (or
Selection est un tel objet Range).
AMA, il n'y a pas de parade qui vaudra en tout temps et je ne peux pas
savoir
dans quels cas il faut transformer ou non.
Ainsi, ici on peut transformer :
With Sheets(1)
.Range("A10") = "x"
End With
Et ici, on ne peut pas:
With Sheets(1).Range("B1")
.Range("A10") = "x"
End With
Malgré le fait que l'analyseur lexicographique verra la même ligne.
C'est donc une bonne raison de privilégier la méthode universelle Range().
:-)
Dernière remarque: Si vraiment ton code est une usine à gaz (comme tu
dis), tu
peux en publier des parties qui illustrent les carences en lisibilité. On
pourrait peut-être donner des conseils précis pour l'alléger (juste une
offre,
tu en fais ce que tu veux).
Alternative 2:
============= > >
Se passer de la copie vers les cellules et récupérer directement le code
(par l'interface VBE Extensibility), le passer dans la fonction
CodeObfuscator,
puis le retourner en remplacement dans le module. C'est nettement la solution
à
privilégier. Si tu as besoin d'aide ici, avise.
ach! was ist das, daniel? si c'est à privilégier et si ça ne doit pas trop
te "prendre le chou", moi je veux bien bénéficier encore d'une petite leçon,
c'est gentil à toi ; tu te doutes bien qu'après avoir beaucoup utilisé
l'enregistreur de macros, je n'ai pas mis, dans le perso.xls et autres VBA
projects de classeurs divers, des procs comme le beurre de ma femme
(comprends "allégées) ; les seuls passages concentrés sont ceux pour
lesquels j'ai honteusement profité de l'aide du sus-nommé MVP (qui ne
l'était d'ailleurs pas encore à l'époque et tu auras déjà compris que je
n'ai pas été étranger à sa nomination grâce à mes nombreuses relations du
côté de Redmond)...
petit extrait de ce qui, avec beaucoup de temps (trop, je crois) pourrait
subir un régime weightwatcher car je doute que pour cela tu puisses sortir
de ton chapeau une autre Function miracle...
Application.ScreenUpdating = False
Windows("FACTUREEUROS.XLS").Activate
Range("D6").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone,
SkipBlanks:úlse _
, Transpose:=True
Range("F57").Select
Selection.Copy
Windows("FICHCLTS.XLS").Activate
ActiveCell.Offset(0, 7).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:úlse
ActiveCell.Offset(0, 2).Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=INT(SUM(RC[-2]:RC[-1]))"
ActiveCell.Select
Selection.Copy
en tous cas, merci encore, daniel, pour toute la peine que tu t'es donnée...
Alternative 2:
============= > >
Se passer de la copie vers les cellules et récupérer directement le code
(par l'interface VBE Extensibility), le passer dans la fonction
CodeObfuscator,
puis le retourner en remplacement dans le module. C'est nettement la solution
à
privilégier. Si tu as besoin d'aide ici, avise.
ach! was ist das, daniel? si c'est à privilégier et si ça ne doit pas trop
te "prendre le chou", moi je veux bien bénéficier encore d'une petite leçon,
c'est gentil à toi ; tu te doutes bien qu'après avoir beaucoup utilisé
l'enregistreur de macros, je n'ai pas mis, dans le perso.xls et autres VBA
projects de classeurs divers, des procs comme le beurre de ma femme
(comprends "allégées) ; les seuls passages concentrés sont ceux pour
lesquels j'ai honteusement profité de l'aide du sus-nommé MVP (qui ne
l'était d'ailleurs pas encore à l'époque et tu auras déjà compris que je
n'ai pas été étranger à sa nomination grâce à mes nombreuses relations du
côté de Redmond)...
petit extrait de ce qui, avec beaucoup de temps (trop, je crois) pourrait
subir un régime weightwatcher car je doute que pour cela tu puisses sortir
de ton chapeau une autre Function miracle...
Application.ScreenUpdating = False
Windows("FACTUREEUROS.XLS").Activate
Range("D6").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone,
SkipBlanks:úlse _
, Transpose:=True
Range("F57").Select
Selection.Copy
Windows("FICHCLTS.XLS").Activate
ActiveCell.Offset(0, 7).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:úlse
ActiveCell.Offset(0, 2).Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=INT(SUM(RC[-2]:RC[-1]))"
ActiveCell.Select
Selection.Copy
en tous cas, merci encore, daniel, pour toute la peine que tu t'es donnée...
Alternative 2:
============= > >
Se passer de la copie vers les cellules et récupérer directement le code
(par l'interface VBE Extensibility), le passer dans la fonction
CodeObfuscator,
puis le retourner en remplacement dans le module. C'est nettement la solution
à
privilégier. Si tu as besoin d'aide ici, avise.
ach! was ist das, daniel? si c'est à privilégier et si ça ne doit pas trop
te "prendre le chou", moi je veux bien bénéficier encore d'une petite leçon,
c'est gentil à toi ; tu te doutes bien qu'après avoir beaucoup utilisé
l'enregistreur de macros, je n'ai pas mis, dans le perso.xls et autres VBA
projects de classeurs divers, des procs comme le beurre de ma femme
(comprends "allégées) ; les seuls passages concentrés sont ceux pour
lesquels j'ai honteusement profité de l'aide du sus-nommé MVP (qui ne
l'était d'ailleurs pas encore à l'époque et tu auras déjà compris que je
n'ai pas été étranger à sa nomination grâce à mes nombreuses relations du
côté de Redmond)...
petit extrait de ce qui, avec beaucoup de temps (trop, je crois) pourrait
subir un régime weightwatcher car je doute que pour cela tu puisses sortir
de ton chapeau une autre Function miracle...
Application.ScreenUpdating = False
Windows("FACTUREEUROS.XLS").Activate
Range("D6").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone,
SkipBlanks:úlse _
, Transpose:=True
Range("F57").Select
Selection.Copy
Windows("FICHCLTS.XLS").Activate
ActiveCell.Offset(0, 7).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:úlse
ActiveCell.Offset(0, 2).Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=INT(SUM(RC[-2]:RC[-1]))"
ActiveCell.Select
Selection.Copy
en tous cas, merci encore, daniel, pour toute la peine que tu t'es donnée...
Moi j'ai rien dit... mais je n'en pense pas moins !
[AV]
Moi j'ai rien dit... mais je n'en pense pas moins !
[AV]
Moi j'ai rien dit... mais je n'en pense pas moins !
[AV]
'*******************************Alternative 2:
============= > > >
Se passer de la copie vers les cellules et récupérer directement le
code
(par l'interface VBE Extensibility), le passer dans la fonction
CodeObfuscator,puis le retourner en remplacement dans le module. C'est nettement la
solution
àprivilégier. Si tu as besoin d'aide ici, avise.
ach! was ist das, daniel? si c'est à privilégier et si ça ne doit pas
trop
te "prendre le chou", moi je veux bien bénéficier encore d'une petite
leçon,
Chez Frédéric, il y a quelques exemples où on récupère dans une string le
code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps d'ici
là).
'*******************************
Alternative 2:
============= > > >
Se passer de la copie vers les cellules et récupérer directement le
code
(par l'interface VBE Extensibility), le passer dans la fonction
CodeObfuscator,
puis le retourner en remplacement dans le module. C'est nettement la
solution
à
privilégier. Si tu as besoin d'aide ici, avise.
ach! was ist das, daniel? si c'est à privilégier et si ça ne doit pas
trop
te "prendre le chou", moi je veux bien bénéficier encore d'une petite
leçon,
Chez Frédéric, il y a quelques exemples où on récupère dans une string le
code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps d'ici
là).
'*******************************Alternative 2:
============= > > >
Se passer de la copie vers les cellules et récupérer directement le
code
(par l'interface VBE Extensibility), le passer dans la fonction
CodeObfuscator,puis le retourner en remplacement dans le module. C'est nettement la
solution
àprivilégier. Si tu as besoin d'aide ici, avise.
ach! was ist das, daniel? si c'est à privilégier et si ça ne doit pas
trop
te "prendre le chou", moi je veux bien bénéficier encore d'une petite
leçon,
Chez Frédéric, il y a quelques exemples où on récupère dans une string le
code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps d'ici
là).
Chez Frédéric, il y a quelques exemples où on récupère dans une string le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps d'ici là).
Chez Frédéric, il y a quelques exemples où on récupère dans une string le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps d'ici là).
Chez Frédéric, il y a quelques exemples où on récupère dans une string le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps d'ici là).
G'Day JPS,Chez Frédéric, il y a quelques exemples où on récupère dans une string
le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici
ce
soir,je te fournirais un exemple (à moins qu'un autre brave ait le temps
d'ici là).
Voici 2 petits exemples de ce que je te racontais.
Le premier (EssaiTransformeMultiClasseurs) effectue le changement en
prenant
tous les modules standard des classeurs ouverts (pas ceux des feuilles ou
du
workbook) et en créant de nouveaux modules JPS+ancienNom.
Le deuxième (EssaiTransformeUNModule) effectue le changement en changeant
pour
un module précis dans un classeur précis (assure-toi qu'ils existent).
Dans TransformeCode (c'est le coeur du traitement), on pourrait effectuer
le
changement de code 'in situ' sans créer de nouveaux modules, mais avec
tous les
dangers que cela suppose si la procédure va mal ==> risque de perte de
code.
Avise si ça t'intéresse.
Je ne t'ai pas recopié les fonctions CodeObfuscator et Subst : elle n'ont
pas
changé.
Salutations,
Daniel M.
P.S.: Tu sais pas le plaisir que j'ai pris à détruire autant de modules
JPS_
;-))
' ****************** LE CODE *****************
Sub EssaiTransformeMultiClasseurs()
Dim Wk As Workbook
Dim i As Integer
For Each Wk In Workbooks
If Wk.Name <> ThisWorkbook.Name Then
For i = 1 To Wk.VBProject.VBComponents.Count
With Wk.VBProject.VBComponents(i)
'Debug.Print .Name, .Type
If .Type = vbext_ct_StdModule Then ' module standard
TransformeCode Wk, .Name, Wk, "JPS_" & .Name
End If
End With
Next i '(NomModuleSrc).CodeModule
End If
Next Wk
End Sub
Sub EssaiTransformeUNModule()
TransformeCode Workbooks("FACTUREEUROS.XLS"), "Daniel", _
Workbooks("FACTUREEUROS.XLS"), "JPS"
End Sub
' Moteur de remplacement qui emprunte au module
' "AjouterDuCodeDansUnModule" disponible sur le site
' de Frédéric Sigonneau --
'
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouterDuCodeDansUnModule.txt
' et de quelques autres routines du site (section VBE)
' Daniel M. Août 2004
Sub TransformeCode(ClasseurSrc As Workbook, NomModuleSrc As String, _
ClasseurDest As Workbook, NomModuleDest As String)
Dim sSrc As String, sDest As String, rep As Variant
If ClasseurDest.Name = ThisWorkbook.Name Or _
ClasseurSrc.Name = ThisWorkbook.Name Then
' On ne touche pas à ce classeur-ci. Point final!
MsgBox "On n'entre pas le nom de ce classeur (" & _
ThisWorkbook.Name & ") comme source ou destination.", _
vbCritical + vbOKOnly, "Erreur"
Exit Sub
End If
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines -
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
rep = MsgBox("Nous allons détruire le module " & NomModuleDest & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code
transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest)
End With
Err.Clear
sDest = CodeObfuscator(sSrc) ' LA TRANSFORMATION
ClasseurDest.VBProject.VBComponents.Add(1).Name = NomModuleDest ' ajout du
module standard
If Err.Number <> 0 Then ' si problème ==> avise et sort
MsgBox "Incapable d'ajouter un module au classeur " & _
ClasseurDest.Name & ".", vbExclamation + vbOKOnly, "Arrêt de
la
procédure"
Exit Sub
End If
On Error GoTo 0
ClasseurDest.VBProject.VBComponents(NomModuleDest).CodeModule.AddFromString
sDest
End Sub
G'Day JPS,
Chez Frédéric, il y a quelques exemples où on récupère dans une string
le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici
ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps
d'ici là).
Voici 2 petits exemples de ce que je te racontais.
Le premier (EssaiTransformeMultiClasseurs) effectue le changement en
prenant
tous les modules standard des classeurs ouverts (pas ceux des feuilles ou
du
workbook) et en créant de nouveaux modules JPS+ancienNom.
Le deuxième (EssaiTransformeUNModule) effectue le changement en changeant
pour
un module précis dans un classeur précis (assure-toi qu'ils existent).
Dans TransformeCode (c'est le coeur du traitement), on pourrait effectuer
le
changement de code 'in situ' sans créer de nouveaux modules, mais avec
tous les
dangers que cela suppose si la procédure va mal ==> risque de perte de
code.
Avise si ça t'intéresse.
Je ne t'ai pas recopié les fonctions CodeObfuscator et Subst : elle n'ont
pas
changé.
Salutations,
Daniel M.
P.S.: Tu sais pas le plaisir que j'ai pris à détruire autant de modules
JPS_
;-))
' ****************** LE CODE *****************
Sub EssaiTransformeMultiClasseurs()
Dim Wk As Workbook
Dim i As Integer
For Each Wk In Workbooks
If Wk.Name <> ThisWorkbook.Name Then
For i = 1 To Wk.VBProject.VBComponents.Count
With Wk.VBProject.VBComponents(i)
'Debug.Print .Name, .Type
If .Type = vbext_ct_StdModule Then ' module standard
TransformeCode Wk, .Name, Wk, "JPS_" & .Name
End If
End With
Next i '(NomModuleSrc).CodeModule
End If
Next Wk
End Sub
Sub EssaiTransformeUNModule()
TransformeCode Workbooks("FACTUREEUROS.XLS"), "Daniel", _
Workbooks("FACTUREEUROS.XLS"), "JPS"
End Sub
' Moteur de remplacement qui emprunte au module
' "AjouterDuCodeDansUnModule" disponible sur le site
' de Frédéric Sigonneau --
'
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouterDuCodeDansUnModule.txt
' et de quelques autres routines du site (section VBE)
' Daniel M. Août 2004
Sub TransformeCode(ClasseurSrc As Workbook, NomModuleSrc As String, _
ClasseurDest As Workbook, NomModuleDest As String)
Dim sSrc As String, sDest As String, rep As Variant
If ClasseurDest.Name = ThisWorkbook.Name Or _
ClasseurSrc.Name = ThisWorkbook.Name Then
' On ne touche pas à ce classeur-ci. Point final!
MsgBox "On n'entre pas le nom de ce classeur (" & _
ThisWorkbook.Name & ") comme source ou destination.", _
vbCritical + vbOKOnly, "Erreur"
Exit Sub
End If
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines -
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
rep = MsgBox("Nous allons détruire le module " & NomModuleDest & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code
transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest)
End With
Err.Clear
sDest = CodeObfuscator(sSrc) ' LA TRANSFORMATION
ClasseurDest.VBProject.VBComponents.Add(1).Name = NomModuleDest ' ajout du
module standard
If Err.Number <> 0 Then ' si problème ==> avise et sort
MsgBox "Incapable d'ajouter un module au classeur " & _
ClasseurDest.Name & ".", vbExclamation + vbOKOnly, "Arrêt de
la
procédure"
Exit Sub
End If
On Error GoTo 0
ClasseurDest.VBProject.VBComponents(NomModuleDest).CodeModule.AddFromString
sDest
End Sub
G'Day JPS,Chez Frédéric, il y a quelques exemples où on récupère dans une string
le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici
ce
soir,je te fournirais un exemple (à moins qu'un autre brave ait le temps
d'ici là).
Voici 2 petits exemples de ce que je te racontais.
Le premier (EssaiTransformeMultiClasseurs) effectue le changement en
prenant
tous les modules standard des classeurs ouverts (pas ceux des feuilles ou
du
workbook) et en créant de nouveaux modules JPS+ancienNom.
Le deuxième (EssaiTransformeUNModule) effectue le changement en changeant
pour
un module précis dans un classeur précis (assure-toi qu'ils existent).
Dans TransformeCode (c'est le coeur du traitement), on pourrait effectuer
le
changement de code 'in situ' sans créer de nouveaux modules, mais avec
tous les
dangers que cela suppose si la procédure va mal ==> risque de perte de
code.
Avise si ça t'intéresse.
Je ne t'ai pas recopié les fonctions CodeObfuscator et Subst : elle n'ont
pas
changé.
Salutations,
Daniel M.
P.S.: Tu sais pas le plaisir que j'ai pris à détruire autant de modules
JPS_
;-))
' ****************** LE CODE *****************
Sub EssaiTransformeMultiClasseurs()
Dim Wk As Workbook
Dim i As Integer
For Each Wk In Workbooks
If Wk.Name <> ThisWorkbook.Name Then
For i = 1 To Wk.VBProject.VBComponents.Count
With Wk.VBProject.VBComponents(i)
'Debug.Print .Name, .Type
If .Type = vbext_ct_StdModule Then ' module standard
TransformeCode Wk, .Name, Wk, "JPS_" & .Name
End If
End With
Next i '(NomModuleSrc).CodeModule
End If
Next Wk
End Sub
Sub EssaiTransformeUNModule()
TransformeCode Workbooks("FACTUREEUROS.XLS"), "Daniel", _
Workbooks("FACTUREEUROS.XLS"), "JPS"
End Sub
' Moteur de remplacement qui emprunte au module
' "AjouterDuCodeDansUnModule" disponible sur le site
' de Frédéric Sigonneau --
'
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouterDuCodeDansUnModule.txt
' et de quelques autres routines du site (section VBE)
' Daniel M. Août 2004
Sub TransformeCode(ClasseurSrc As Workbook, NomModuleSrc As String, _
ClasseurDest As Workbook, NomModuleDest As String)
Dim sSrc As String, sDest As String, rep As Variant
If ClasseurDest.Name = ThisWorkbook.Name Or _
ClasseurSrc.Name = ThisWorkbook.Name Then
' On ne touche pas à ce classeur-ci. Point final!
MsgBox "On n'entre pas le nom de ce classeur (" & _
ThisWorkbook.Name & ") comme source ou destination.", _
vbCritical + vbOKOnly, "Erreur"
Exit Sub
End If
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines -
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
rep = MsgBox("Nous allons détruire le module " & NomModuleDest & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code
transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest)
End With
Err.Clear
sDest = CodeObfuscator(sSrc) ' LA TRANSFORMATION
ClasseurDest.VBProject.VBComponents.Add(1).Name = NomModuleDest ' ajout du
module standard
If Err.Number <> 0 Then ' si problème ==> avise et sort
MsgBox "Incapable d'ajouter un module au classeur " & _
ClasseurDest.Name & ".", vbExclamation + vbOKOnly, "Arrêt de
la
procédure"
Exit Sub
End If
On Error GoTo 0
ClasseurDest.VBProject.VBComponents(NomModuleDest).CodeModule.AddFromString
sDest
End Sub
de toutes façons, si grâce à (ou plutôt à cause de) tout cela, je kill mon
usine à gaz, je viens de te mettre sous pli mon code bancaire, mes papiers
d'identité, la clé de mon bureau...ah! j'oubliais : tu veilleras aussi sur
ma femme...
de toutes façons, si grâce à (ou plutôt à cause de) tout cela, je kill mon
usine à gaz, je viens de te mettre sous pli mon code bancaire, mes papiers
d'identité, la clé de mon bureau...ah! j'oubliais : tu veilleras aussi sur
ma femme...
de toutes façons, si grâce à (ou plutôt à cause de) tout cela, je kill mon
usine à gaz, je viens de te mettre sous pli mon code bancaire, mes papiers
d'identité, la clé de mon bureau...ah! j'oubliais : tu veilleras aussi sur
ma femme...