![]() |
| |||||||
| S'inscrire | FAQ | Membres | Calendrier | Recherche | Messages du jour | Marquer les forums comme lus |
![]() |
| LinkBack | Outils de la discussion | Modes d'affichage |
| |||
| 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. |
| | ||||
| ||||
| |
| |||
| 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" <Statisticien***discussions.microsoft.com> a écrit dans le message de news:21F6BAEB-52EB-4840-AE0D-ED0B17F39577***microsoft.com... > 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. |
| |||
| 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" <Statisticien***discussions.microsoft.com> a écrit dans le > message de news:21F6BAEB-52EB-4840-AE0D-ED0B17F39577***microsoft.com... > > 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. > > |
| |||
| 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" <Statisticien***discussions.microsoft.com> a écrit dans le message de news:FDC9E4D1-E74A-45C9-845F-A1467F42AB0B***microsoft.com... > 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" <Statisticien***discussions.microsoft.com> a écrit dans le >> message de news:21F6BAEB-52EB-4840-AE0D-ED0B17F39577***microsoft.com... >> > 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. >> >> > |
| |||
| 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" <Statisticien***discussions.microsoft.com> a écrit dans le message de news:FDC9E4D1-E74A-45C9-845F-A1467F42AB0B***microsoft.com... > 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" <Statisticien***discussions.microsoft.com> a écrit dans le >> message de news:21F6BAEB-52EB-4840-AE0D-ED0B17F39577***microsoft.com... >> > 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. >> >> |
| |||
| Statisticien a écrit : Bonjour, Petite tentative de pédagogie )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" <Statisticien***discussions.microsoft.com> a écrit dans le >> message de news:21F6BAEB-52EB-4840-AE0D-ED0B17F39577***microsoft.com... >>> 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. >> |
| |||
| 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))) |
| |||
| Modeste a écrit : Bonjour Modeste, ))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 > > |
| |||
| 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))) |
| |||
| 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))) |
| |||
| 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" <nomail***nomail.net> a écrit dans le message de news: u8y6rIo3IHA.1420***TK2MSFTNGP06.phx.gbl... > 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))) |
| |||
| 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 )> > 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. > |
| |
| |
![]() |
| Tags: automatique, contenu, incorporer, macro, ordinaire |
| Outils de la discussion | |
| Modes d'affichage | |
| |
| ||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| Macro tri automatique àl'ouverture | Pijay | Newsgroup microsoft.public.fr.excel | 4 | 23/06/2008 20h06 |
| Un code ou macro automatique | Fan | Newsgroup microsoft.public.fr.excel | 0 | 18/06/2008 07h01 |
| Lire le contenu d'une macro | Jacques | Newsgroup microsoft.public.fr.excel | 2 | 19/03/2008 23h58 |
| Lire contenu d'une macro | Jacques | Newsgroup microsoft.public.fr.dotnet.vb | 0 | 19/03/2008 06h46 |
| macro automatique | AB | Newsgroup microsoft.public.fr.excel | 2 | 18/02/2008 16h10 |