Comment dupliquer une macro?

Bonjour,

Je travaille sur la mise en place de formulaires de saisies dans excel. Je vais utiliser des boutons sur lesquels seront affectés des macros.

J'ai besoin de créer des macros qui seront très semblables les unes aux autres.

Par exemple, le contenu de mes macros sera du type :

1. select la case A1 du feuillet X

2. saisis la valeur "10%"

3. select la case A1 du feuillet Y

Et je dois créer une macro similaire pour d'autres valeurs : 20%, 30%, 40%, etc... à la place de "10%".

Au total, j'ai des centaines de macros à créer.

Donc au lieu d'enregistrer à chaque fois chaque macro "from scratch", je souhaite créer une macro type, et je souhaite ensuite copier ma macro type en modifiant la valeur au sein de la nouvelle macro.

Problème : je suppose que cela est possible, mais je ne sais pas le faire.

Merci de votre aide

Bonjour,

Pour pouvoir vous aider et trouver la solution la plus adaptée, il est préférable d'avoir un fichier d'exemple avec le résultat souhaité.

Bonjour, une macro c'est trsè personnalisé donc il nous faut un peu plus de détail sur les sources et les destinations des %...


Salutation Fred35 désolé pour le doublon )

je n'ai peut-être pas été assez claire dans ma question.

Je ne demande pas de conseil pour rédiger le contenu de la macro type ou pour enregistrer une macro.

Je demande comment il est possible de dupliquer une macro A (après l'avoir enregistrée) pour en faire une macro B, une macro C, une macro D, etc...

Ensuite je souhaite modifier le contenu des macros dupliquées pour remplacer "10%" par "20%" dans B, par "30%" dans C, par "40%" dans D, etc...

Ainsi, je pense pouvoir gagner du temps (au lieu de devoir réenregistrer à chaque fois l'intégralité des macros B, C, D en partant de zéro...).

Je ne pense pas que fournir un fichier exemple serve à quoi que ce soit, puisque le contenu de la macro A importe peu. C'est le process permettant la duplication qui est l'objet de ma question.

Merci d'avance

Force rouge a écrit :

Salutation Fred35 désolé pour le doublon )

C'est pas grave, ça m'arrive aussi

Voici une piste pour créer 5 macros dans un nouveau module

Sub Nouvelles_Macros()
Set NouveauModule = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
NouveauModule.Name = "MonNouveauModule"
For i = 5 To 1 Step -1
    NouveauModule.CodeModule.InsertLines 1, "Sub MaMacro" & i & "()"
    NouveauModule.CodeModule.InsertLines 2, "'Première ligne de code"
    NouveauModule.CodeModule.InsertLines 3, "'2nd ligne de code"
    NouveauModule.CodeModule.InsertLines 4, "'3ème ligne de code"
    NouveauModule.CodeModule.InsertLines 5, "'4ème ligne de code"
    NouveauModule.CodeModule.InsertLines 6, "'5ème ligne de code"
    NouveauModule.CodeModule.InsertLines 7, "end sub"
Next i
End Sub

pour 100 il suffit de changer le nombre dans la boucle.

Pour adapter le contenu automatiquement, il faudrait connaitre le code vba que tu compte utiliser.

Bon, j'ai compris comment on peut copier une macro :

http://fr.wingwit.com/Logiciel/microsoft-access/137909.html

Cela répond à mon besoin.

J'ai une autre question : dans ma macro, je souhaite ajouter une valeur à une colonne D contenant déjà N cellules avec des valeurs dans ces N cellules.

Ma nouvelle valeur doit donc être insérée dans cette colonne D, à la ligne N+1.

A chaque fois que j'utiliserai ma macro, N sera différent donc je ne peux pas utiliser :

Range("DN").Select

J'ai pensé utiliser :

Selection.End(xlDown).Select

pour accéder en bas de la liste, mais cela m'amène à la ligne N, et non à la ligne N+1.

Quelqu'un sait-il quel code VB utiliser pour arriver à mes fins?

Merci

Pour ma part je pense que j'aurai complètement automatisé la tâche compte tenu du nombre de macro à modifier.

Après c'est vous qui voyez...

Pour la seconde question:

Range("D" & Rows.Count).End(xlUp).Row + 1

Je ne sais pas ce que vous comptez faire avec des select mais il est préférable de s'en passer.

Fred35 a écrit :

Pour ma part je pense que j'aurai complètement automatisé la tâche compte tenu du nombre de macro à modifier.

Après c'est vous qui voyez....

Merci Fred35 pour ton aide!

Dans le pire des cas, je n'aurai qu'une quinzaine de macros strictement identiques à dupliquer, donc les cop-coll devraient être satisfaisants.

Fred35 a écrit :

Pour la seconde question:

Range("D" & Rows.Count).End(xlUp).Row + 1

Je ne sais pas ce que vous comptez faire avec des select mais il est préférable de s'en passer.

Apparemment, excel n'accepte pas le "+" : "Row + 1" est transformé en "Row 1".

Et évidemment, quand je lance la macro, excel me sort un message d'erreur.

Pour info, voici ma macro (qui contient le problème mentionné à la question n°2) :

Sheets("DATA").Select

Range("D2").Select

ActiveCell.FormulaR1C1 = "MP"

Range("D117").Select

Selection.End(xlDown).Select

Selection.End(xlUp).Select

ActiveCell.FormulaR1C1 = "1"

Sheets("OPR").Select

Range("C6").Select

Calculate

Sais-tu comment modifier cette macro pour résoudre le problème posé à la question n°2 en faisant en sorte qu'il y ait le moins de "select" possible (pour que la macro soit le + rapide possible)?

Bonjour,

Pour revenir à la question initiale tu peux aussi passer un paramètre (ou plusieurs bien entendu) à une macro qui sera donc unique.

C'est lors de l'appel que la distinction sera faite :

Sub test()
    test2 0.1
End Sub

Sub test2(pourcent As Double)
MsgBox pourcent
End Sub

eric

nicopat a écrit :

Sheets("DATA").Select

Range("D2").Select

ActiveCell.FormulaR1C1 = "MP"

Range("D117").Select

Selection.End(xlDown).Select

Selection.End(xlUp).Select

ActiveCell.FormulaR1C1 = "1"

Sheets("OPR").Select

Range("C6").Select

Calculate

Sais-tu comment modifier cette macro pour résoudre le problème posé à la question n°2 en faisant en sorte qu'il y ait le moins de "select" possible (pour que la macro soit le + rapide possible)?

Et bien je ne comprend pas du tout ce que vous souhaitez faire avec cette macro.

Votre code dit de mettre le texte MP en D2 via une formule, ensuite vous sélectionnez D17 et vous revenez en D2 mettre 1.

Quel est le résultat souhaité ?

Un exemple mais je doute que ce sois ça vu qu'on marche en aveugle...

Sub test()
Dim DerLgn As Long

With Sheets("DATA")
    DerLgn = .Range("D" & Rows.Count).End(xlUp).Row + 1 'n° de la dernière ligne de la colonne D
    .Cells(2, 4) = "MP" ' Cellule D2 = "MP"
    .Cells(DerLgn, 4) = 1 'Première cellule vide de la colonne D=1
End With
End Sub

Si je vous demandais un fichier c'est justement pour vous proposer une solution "simple" qui éviterai d'avoir X macros.

Super, ça fonctionne.

Le but de ma macro est bien d'insérer un texte en D2, et ensuite d'insérer du texte en bas de la colonne (sachant qu'il y a des cellules non vides sous D2).

Merci de ton aide!

eriiic a écrit :

Bonjour,

Pour revenir à la question initiale tu peux aussi passer un paramètre (ou plusieurs bien entendu) à une macro qui sera donc unique.

C'est lors de l'appel que la distinction sera faite :

Sub test()
    test2 0.1
End Sub

Sub test2(pourcent As Double)
MsgBox pourcent
End Sub

eric

Bonjour Eriiic,

Je ne comprends pas comment fonctionne cette macro (j'ai l'impression qu'il y en a 2)?

Je l'ai insérée dans un fichier excel, et cela ouvre une boite de dialogue.

Ce que je crois comprendre de l'intention de cette macro m'amène à une question :

Est-il possible de créer une macro qui insère dans la cellule "A1" d'une feuille nommée "DATA" le contenu de la zone de texte du bouton auquel est affectée la macro?

Ainsi, si je tape "10%" dans la zone de texte d'un bouton, celui-ci insèrera "10%" dans la dite cellule, et si j'affecte la même macro à un bouton avec "20%" dans la zone de texte, celui-ci insèrera "20%" dans la cellule, etc...

C'est un exemple de macro qui reçoit un paramètre pour t'expliquer le principe.

La macro principale (test2) est unique et fait le boulot que tu lui demandes mais s'adapte en fonction du paramètre que tu lui passes.

Chaque bouton aura donc une macro d'1 seule ligne qui lui passe le % à appliquer (et éventuellement aussi le nom des feuilles si elle n'est pas capable de les déterminer).

Private Sub CommandButton1_Click()
    test2 0.1 ' passe 10% en paramètre
End Sub

Private Sub CommandButton2_Click()
    test2 0.2 ' passe 20% en paramètre
End Sub

Private Sub CommandButton3_Click()
    test2 0.3 'passe 30% en paramètre
End Sub
' etc

Ici test2 ne fait qu'afficher la valeur reçue pour te montrer comment on l'utilise, tu mets ton code à la place.

Mais comme dit Fred tu ferais mieux d'expliquer en détail ta problématique. Car créer des dizaines (centaine ?) de boutons n'est sans doute pas la bonne solution.

eric

Rechercher des sujets similaires à "comment dupliquer macro"