Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Incorporer contenu de macro automatique dans macro ordinaire ?

12 réponses
Avatar
Statisticien
Est-ce possible, à partir d'une macro rédigée manuellement, d'incorporer le
contenu copié-collé d'une macro automatique construite à partir de Outils,
Marcro ?
Je ne pige pas très bien le langage Visual Basic Applictions. C'est
pourquoi, à partir d'une macro déjà bâtie et convenant à une situation ou
événement approprié, j'aimerais pouvoir incorporer le contenu d'une macro
automatique dont normallement je ne pourrais pas (manque de connaissance)
rédiger moi-même le code.

10 réponses

1 2
Avatar
Philippe.R
Bonsoir à toi aussi,
On peut, bien sur, à priori, incorporer du code issu d'un enregistrement de
macro à un autre code et réciproquement.
Il faut cependant le faire avec discernement et mieux vaut quand même
comprendre ce qu'on demande au logiciel de faire.
Bref, avant de se lancer sur un projet compliqué, il faut s'armer de
patience et se frotter d'abord à des projets moins ambitieux.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Statisticien" a écrit dans le
message de news:
Est-ce possible, à partir d'une macro rédigée manuellement, d'incorporer
le
contenu copié-collé d'une macro automatique construite à partir de Outils,
Marcro ?
Je ne pige pas très bien le langage Visual Basic Applictions. C'est
pourquoi, à partir d'une macro déjà bâtie et convenant à une situation ou
événement approprié, j'aimerais pouvoir incorporer le contenu d'une macro
automatique dont normallement je ne pourrais pas (manque de connaissance)
rédiger moi-même le code.


Avatar
Statisticien
Merci beaucoup, Philippe.
Ta réponse me donne de l'espoir. Est-ce que je peux conclure que la macro
automatique utilise exactement le même langage que la macro rédigée
manuellement ?
Si oui, je vais me hâter de faire l'acquisition de littérature qui enseigne
le langage Visual Basis. Auriez-vous un titre particulier à suggérer à un
débutant.
Bonne journée
Statisticien

"Philippe.R" wrote:

Bonsoir à toi aussi,
On peut, bien sur, à priori, incorporer du code issu d'un enregistrement de
macro à un autre code et réciproquement.
Il faut cependant le faire avec discernement et mieux vaut quand même
comprendre ce qu'on demande au logiciel de faire.
Bref, avant de se lancer sur un projet compliqué, il faut s'armer de
patience et se frotter d'abord à des projets moins ambitieux.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Statisticien" a écrit dans le
message de news:
> Est-ce possible, à partir d'une macro rédigée manuellement, d'incorporer
> le
> contenu copié-collé d'une macro automatique construite à partir de Outils,
> Marcro ?
> Je ne pige pas très bien le langage Visual Basic Applictions. C'est
> pourquoi, à partir d'une macro déjà bâtie et convenant à une situation ou
> événement approprié, j'aimerais pouvoir incorporer le contenu d'une macro
> automatique dont normallement je ne pourrais pas (manque de connaissance)
> rédiger moi-même le code.




Avatar
Papyjac
Bonjour Statisticien,

Non, on ne peut pas conclure cela,
Tu dois t'approprié complètement le code généré, enlever le superflu,
veiller au positionnement, documenter le code... bref en général après ce
travail, le code ne ressemble plus à l'original


--
P a p y j a c
"Statisticien" a écrit dans le
message de news:
Merci beaucoup, Philippe.
Ta réponse me donne de l'espoir. Est-ce que je peux conclure que la macro
automatique utilise exactement le même langage que la macro rédigée
manuellement ?
Si oui, je vais me hâter de faire l'acquisition de littérature qui
enseigne
le langage Visual Basis. Auriez-vous un titre particulier à suggérer à un
débutant.
Bonne journée
Statisticien

"Philippe.R" wrote:

Bonsoir à toi aussi,
On peut, bien sur, à priori, incorporer du code issu d'un enregistrement
de
macro à un autre code et réciproquement.
Il faut cependant le faire avec discernement et mieux vaut quand même
comprendre ce qu'on demande au logiciel de faire.
Bref, avant de se lancer sur un projet compliqué, il faut s'armer de
patience et se frotter d'abord à des projets moins ambitieux.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Statisticien" a écrit dans le
message de news:
> Est-ce possible, à partir d'une macro rédigée manuellement,
> d'incorporer
> le
> contenu copié-collé d'une macro automatique construite à partir de
> Outils,
> Marcro ?
> Je ne pige pas très bien le langage Visual Basic Applictions. C'est
> pourquoi, à partir d'une macro déjà bâtie et convenant à une situation
> ou
> événement approprié, j'aimerais pouvoir incorporer le contenu d'une
> macro
> automatique dont normallement je ne pourrais pas (manque de
> connaissance)
> rédiger moi-même le code.







Avatar
Philippe.R
Bonjour,
Oui, le langage des macros d'Excel, au moins depuis Office 97, est le VBA en
anglais, qu'elles soient produites par l'enregistreur ou codées directement.
Toutefois, comme le souligne Papyjac, l'enregistreur de macros est (très)
bavard et code toutes les actions ou presque, d'où la nécessité d'un élagage
soigné pour produire un code lisible et maintenable.
Une bibliographie à cette adresse :
http://dj.joss.free.fr/faq.htm#lecteur
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Statisticien" a écrit dans le
message de news:
Merci beaucoup, Philippe.
Ta réponse me donne de l'espoir. Est-ce que je peux conclure que la macro
automatique utilise exactement le même langage que la macro rédigée
manuellement ?
Si oui, je vais me hâter de faire l'acquisition de littérature qui
enseigne
le langage Visual Basis. Auriez-vous un titre particulier à suggérer à un
débutant.
Bonne journée
Statisticien

"Philippe.R" wrote:

Bonsoir à toi aussi,
On peut, bien sur, à priori, incorporer du code issu d'un enregistrement
de
macro à un autre code et réciproquement.
Il faut cependant le faire avec discernement et mieux vaut quand même
comprendre ce qu'on demande au logiciel de faire.
Bref, avant de se lancer sur un projet compliqué, il faut s'armer de
patience et se frotter d'abord à des projets moins ambitieux.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Statisticien" a écrit dans le
message de news:
> Est-ce possible, à partir d'une macro rédigée manuellement,
> d'incorporer
> le
> contenu copié-collé d'une macro automatique construite à partir de
> Outils,
> Marcro ?
> Je ne pige pas très bien le langage Visual Basic Applictions. C'est
> pourquoi, à partir d'une macro déjà bâtie et convenant à une situation
> ou
> événement approprié, j'aimerais pouvoir incorporer le contenu d'une
> macro
> automatique dont normallement je ne pourrais pas (manque de
> connaissance)
> rédiger moi-même le code.






Avatar
Francois L
Statisticien a écrit :

Bonjour,

Petite tentative de pédagogie :o)

L'enregistreur de macro utilise VBA comme les macros codées à la main.
Donc théoriquement pas de problème pour insérer du code créé par
l'enregistreur dans une macro écrite à la mano. C'est d'ailleurs un truc
que j'utilise souvent pour retrouver des noms d'objets ou de propriétés
que j'ai oubliées, des syntaxes.

Mais...

L'enregistreur de macro est verbeux : il définit systématiquement des
propriétés auxquelles la macro ne touche pas, utilise (ce qui est
logique quand on comprend comment il fonctionne) la méthode select et
l'objet sélection, ce qui alourdit le code et ralentit parfois
l'exécution, utilise systématiquement pour les couleurs la propriété
colorindex ce qui pose problème quand on utilise des palettes de couleur
personnalisées, etc.

Donc, comment souvent conseillé ici, il ne faut pas hésiter à l'utiliser
mais il faut savoir ensuite nettoyer le code généré, l'améliorer pour le
rendre plus lisible et plus efficace et surtout réorganiser la macro
complète pour la rendre cohérente. Le copier-coller de macros
enregistrées successivement aboutit en général à des résultats assez
beurk et qui ne fonctionnent pas toujours.

Un petit exemple simplissime
Mettre la cellule A1 d'une feuille avec un fond rouge

Macro enregistrée
'-------------------------------------------
Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 05/07/2008 par FFFFF
'

'
Range("A1").Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
'--------------------------------------------

Macro écrite
'--------------------------------------------
Sub rouge()
With ActiveSheet.Range("A1")
.Interior.Color = RGB(255, 0, 0)
End With
End Sub
'--------------------------------------------

La deuxième est évidemment plus courte, a l'avantage de ne pas modifier
la sélection en cours, et cherchera dans la palette du classeur la
couleur la plus proche du rouge alors que la première prendra la couleur
avec index = 3 même si c'est un bleu, un vert ou un jaune.

Pour apprendre... vas déjà passer du temps sur les excellents sites
souvent cités ici : excelabo, xlwiki, le site de JB, celui de Daniel,
etc... et dans l'aide de VBA qui est plutôt bien faite et pleine
d'exemples récupérables.

--
François L

Merci beaucoup, Philippe.
Ta réponse me donne de l'espoir. Est-ce que je peux conclure que la macro
automatique utilise exactement le même langage que la macro rédigée
manuellement ?
Si oui, je vais me hâter de faire l'acquisition de littérature qui enseigne
le langage Visual Basis. Auriez-vous un titre particulier à suggérer à un
débutant.
Bonne journée
Statisticien

"Philippe.R" wrote:

Bonsoir à toi aussi,
On peut, bien sur, à priori, incorporer du code issu d'un enregistrement de
macro à un autre code et réciproquement.
Il faut cependant le faire avec discernement et mieux vaut quand même
comprendre ce qu'on demande au logiciel de faire.
Bref, avant de se lancer sur un projet compliqué, il faut s'armer de
patience et se frotter d'abord à des projets moins ambitieux.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Statisticien" a écrit dans le
message de news:
Est-ce possible, à partir d'une macro rédigée manuellement, d'incorporer
le
contenu copié-collé d'une macro automatique construite à partir de Outils,
Marcro ?
Je ne pige pas très bien le langage Visual Basic Applictions. C'est
pourquoi, à partir d'une macro déjà bâtie et convenant à une situation ou
événement approprié, j'aimerais pouvoir incorporer le contenu d'une macro
automatique dont normallement je ne pourrais pas (manque de connaissance)
rédiger moi-même le code.







Avatar
Modeste
Bonsour® Francois L avec ferveur ;o))) vous nous disiez :

Macro écrite
'--------------------------------------------
Sub rouge()
With ActiveSheet.Range("A1")
.Interior.Color = RGB(255, 0, 0)
End With
End Sub
'--------------------------------------------



With ActiveSheet.
[A1].Interior.Color = vbRed
End With


--
@+
;o)))
Avatar
Francois L
Modeste a écrit :

Bonjour Modeste,

:o))

Mais je te laisse expliquer le "[A1]"

--
François L


Bonsour® Francois L avec ferveur ;o))) vous nous disiez :

Macro écrite
'--------------------------------------------
Sub rouge()
With ActiveSheet.Range("A1")
.Interior.Color = RGB(255, 0, 0)
End With
End Sub
'--------------------------------------------



With ActiveSheet.
[A1].Interior.Color = vbRed
End With




Avatar
Modeste
Bonsour® Francois L avec ferveur ;o))) vous nous disiez :

Mais je te laisse expliquer le "[A1]"



L'utilisation des crochets droits (par exemple, "[A1:C5]") revient à appeler la méthode Evaluate avec un argument sous la forme d'une chaîne de caractères. Les exemples suivants sont équivalents dans chaque couple d'expression.

[a1].Value = 25
Evaluate("A1").Value = 25

L'avantage des crochets droits réside dans la plus grande concision du code.
Celui résultant de l'utilisation de la méthode Evaluate est que l'argument est une chaîne de caractères,
ce qui vous permet d'élaborer la chaîne de caractères dans votre code ou d'utiliser une variable Visual Basic.

Worksheets("Sheet1").Activate
Application.[A1].Font.Bold = True

Attention petit inconvénient Majeur ;o)))

Application.[A1].Font.Bold = True
ne s'applique qu'a la feuille active !!!!
d'ou la nécessité de : Worksheets("Sheet1").Activate
ce qui peut paraitre redondant si la Sheet1 est déja sélectionnée
mais déterminant si c'est la Sheet2 qui est sélectionnée précédement
(difference entre mode Manuel et VBA, VBA permet de travailler sur une feuille autre que la feuille affichée)


!!!!


--
@+
;o)))
Avatar
Modeste
Bonsour® michdenis avec ferveur ;o))) vous nous disiez :

Le plus court n'est pas nécessaire le meilleur !
Ça requiert donc du discernement !



N'est-ce pas cela que l'on appelle : Analyse et Optimisation
;o)))

--
@+
;o)))
Avatar
Statisticien
Merci et merci à...
Philippe R, Papyhac, François L et Modeste
Vous êtes de vrais et dévoués missionnaires.
Un jour, après avoir bien digéré mon gruau, je pourrai me joindre à vous et
partager mon expertise avec les démunis comme moi
Bonne journée
Statisticien

"michdenis" wrote:

| L'avantage des crochets droits réside dans la plus grande concision du code.

Excel permet d'utiliser des variables ayant 255 caractères afin que nous puissions
leur donner un "sens" facilitant l'encodage. Le plus court n'est pas nécessaire le meilleur !

Cette façon de coder ne permet pas d'utiliser la liste déroulante des propriétés
et méthodes...à mon avis beaucoup plus importante que quelques caractères.

On ne peut pas substituer systématiquement dans tous les cas de figures la syntaxe
des crochets pour la désignation d'un objet "Range". Ça requiert donc du discernement !

Je crois que l'utilisation de cette syntaxe est source de plus de confusion qu'autre chose

| Application.[A1].Font.Bold = True
| ne s'applique qu'a la feuille active !!!!

C'est vrai aussi pour la désignation d'un objet range
Application.Range.Font.Bold = True

D'ailleurs, comment pourrions-nous utiliser dans le code
d'un module standard un objet "Range" dans désigner
la feuille à laquelle il est attaché. En pratique, cela veut
dire qu'aucune utilisation d'un objet Range (comme c'est si
souvent le cas dans une procédure) ne pourrait être faite
sans désignation de la feuille...Et ça, ce serait un sérieux
désavantage pour bien du monde ...;-)

Exemples : Dans un module feuille, comme les objets sont
"sensés appartenir" à la feuille, on peut écrire :
Shapes("MonTextbox")....
ou Range("A1")....

Mais dans un module standard, pour utiliser Shapes(), il faut désigner
le nom de la feuille à laquelle elle appartient.
worksheets("Feuil1").Shapes()....
Nous serions obligés de faire la même chose avec l'objet "Range"
Worksheets("Feuil1").Range()....
si l'objet "Range" n'était pas une "propriété" de l'objet Application.
C'est cela qui nous permet de taire la référence à l'objet "application"
ou à l'objet "worksheet" dans la manière d'encoder dans un module standard.





"Modeste" a écrit dans le message de news:
Bonsour® Francois L avec ferveur ;o))) vous nous disiez :

> Mais je te laisse expliquer le "[A1]"

L'utilisation des crochets droits (par exemple, "[A1:C5]") revient à appeler la méthode Evaluate avec un argument sous la forme d'une chaîne de caractères. Les exemples suivants sont équivalents dans chaque couple d'expression.

[a1].Value = 25
Evaluate("A1").Value = 25

L'avantage des crochets droits réside dans la plus grande concision du code.
Celui résultant de l'utilisation de la méthode Evaluate est que l'argument est une chaîne de caractères,
ce qui vous permet d'élaborer la chaîne de caractères dans votre code ou d'utiliser une variable Visual Basic.

Worksheets("Sheet1").Activate
Application.[A1].Font.Bold = True

Attention petit inconvénient Majeur ;o)))

Application.[A1].Font.Bold = True
ne s'applique qu'a la feuille active !!!!
d'ou la nécessité de : Worksheets("Sheet1").Activate
ce qui peut paraitre redondant si la Sheet1 est déja sélectionnée
mais déterminant si c'est la Sheet2 qui est sélectionnée précédement
(difference entre mode Manuel et VBA, VBA permet de travailler sur une feuille autre que la feuille affichée)


!!!!


--
@+
;o)))


1 2