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.

2 réponses

1 2
Avatar
Frédéric Sigonneau
Autre exemple (classique) de "supériorité" de la main de l'homme sur celle de la
machine :)
Il s'agit de créer une macro qui entoure une sélection de cellules d'une bordure
double pour l'affecter à un bouton perso (aucun bouton 'tout fait' n'est prévu
pour ça).

Code fourni par l'enregistreur :

'====================== Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 05/07/2008 par blablabla
'
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
End Sub
'======================
Code produit "à la main" :

'====================== Sub Macro2()
Selection.BorderAround LineStyle:=xlDouble
End Sub
'======================
!

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Francois L a écrit :
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.



Avatar
Francois L
Frédéric Sigonneau a écrit :

Bonjour Frédéric,

Yep, net et sans bavure...
dans la bordure

--
François L


Autre exemple (classique) de "supériorité" de la main de l'homme sur
celle de la machine :)
Il s'agit de créer une macro qui entoure une sélection de cellules d'une
bordure double pour l'affecter à un bouton perso (aucun bouton 'tout
fait' n'est prévu pour ça).

Code fourni par l'enregistreur :

'====================== > Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 05/07/2008 par blablabla
'
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
End Sub
'====================== >
Code produit "à la main" :

'====================== > Sub Macro2()
Selection.BorderAround LineStyle:=xlDouble
End Sub
'====================== >
!

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Francois L a écrit :
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.





1 2