OVH Cloud OVH Cloud

Affectation macro à un rectangle

15 réponses
Avatar
Régis MATHIEU
Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU

10 réponses

1 2
Avatar
SilkRoad
bonsoir

pour l'affectation de la macro , tu peux essayer

Selection.OnAction = "TEST_COPIE_MAC.xls!Copie_Colonnes"

cordialement
michel


"Régis MATHIEU" wrote:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU





Avatar
michdenis
Bonjour Mathieu,

Tu peux m'expliquer cette façon de faire :

| Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
| dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
| suivant dans Module1 du fichier Test1.xls :

Pourquoi écrire ta macro dans un classeur qui n'est pas le bon ?



Salutations!




"Régis MATHIEU" a écrit dans le message de news:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU
Avatar
Régis MATHIEU
Bonjour,
C'est parceque je dois mettre ce rectangle dans + de 1000 fichiers !! Alors
à la main...... bonjour !!


Bonjour Mathieu,

Tu peux m'expliquer cette façon de faire :

| Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
| dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
| suivant dans Module1 du fichier Test1.xls :

Pourquoi écrire ta macro dans un classeur qui n'est pas le bon ?



Salutations!




"Régis MATHIEU" a écrit dans le message de news:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU







Avatar
michdenis
Je sais, les macros c'est pratique, mais pourquoi inscrire la macro dans un autre classeur que le classeur où est ton rectangle

Ton texte stipule que ton rectangle est dans une feuille du fichier TEST_COPIE_MAC" et tu écris ta macro dans un autre fichier
Test1.xls . Là j'avoue ne pas comprendre pourquoi choisir UN AUTRE CLASSEUR pour y mettre sa macro.

Voilà le sens de mon propos


Salutations!



"Régis MATHIEU" a écrit dans le message de news:

Bonjour,
C'est parceque je dois mettre ce rectangle dans + de 1000 fichiers !! Alors
à la main...... bonjour !!


Bonjour Mathieu,

Tu peux m'expliquer cette façon de faire :

| Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
| dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
| suivant dans Module1 du fichier Test1.xls :

Pourquoi écrire ta macro dans un classeur qui n'est pas le bon ?



Salutations!




"Régis MATHIEU" a écrit dans le message de news:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU







Avatar
Régis MATHIEU
En fait : je dois mettre dans + de 1000 fichiers les choses suivantes :
- 1 "Module1" avec du code
- sur chacune des 15 feuilles que comportent les 1000 fichiers je veux
lancer le code du "Module1" à partir d'un bouton ou d'un rectangle auquel
j'affecte la macro du "Module1" !
Ai-je été suffisemment clair ?

Je sais, les macros c'est pratique, mais pourquoi inscrire la macro dans un autre classeur que le classeur où est ton rectangle

Ton texte stipule que ton rectangle est dans une feuille du fichier TEST_COPIE_MAC" et tu écris ta macro dans un autre fichier
Test1.xls . Là j'avoue ne pas comprendre pourquoi choisir UN AUTRE CLASSEUR pour y mettre sa macro.

Voilà le sens de mon propos


Salutations!



"Régis MATHIEU" a écrit dans le message de news:

Bonjour,
C'est parceque je dois mettre ce rectangle dans + de 1000 fichiers !! Alors
à la main...... bonjour !!


Bonjour Mathieu,

Tu peux m'expliquer cette façon de faire :

| Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
| dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
| suivant dans Module1 du fichier Test1.xls :

Pourquoi écrire ta macro dans un classeur qui n'est pas le bon ?



Salutations!




"Régis MATHIEU" a écrit dans le message de news:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU












Avatar
michdenis
Bonjour Régis,

Ai-je été suffisemment clair ? Pas du tout !

A )
As-tu répondu à ma question de mon message précédent ?

B ) Tu ajoutes des nouveaux éléments dans ta réponse qui étaient absents à tes premiers messages.

C ) Où est ton problème ?
- savoir comment attaché une macro à un rectangle dans une feuille de calcul
(un clic droit sur ton rectangle - Menu contextuel - affecter une macro - choix de la macro dans la liste proposée)

- vouloir automatiser cette tâche pour tes 15 feuilles pour tes 1000 fichiers. Si c'est le cas, il manque beaucoup
d'informations pour même envisager un début de réponse.


Salutations!


"Régis MATHIEU" a écrit dans le message de news:

En fait : je dois mettre dans + de 1000 fichiers les choses suivantes :
- 1 "Module1" avec du code
- sur chacune des 15 feuilles que comportent les 1000 fichiers je veux
lancer le code du "Module1" à partir d'un bouton ou d'un rectangle auquel
j'affecte la macro du "Module1" !
Ai-je été suffisemment clair ?

Je sais, les macros c'est pratique, mais pourquoi inscrire la macro dans un autre classeur que le classeur où est ton rectangle

Ton texte stipule que ton rectangle est dans une feuille du fichier TEST_COPIE_MAC" et tu écris ta macro dans un autre fichier
Test1.xls . Là j'avoue ne pas comprendre pourquoi choisir UN AUTRE CLASSEUR pour y mettre sa macro.

Voilà le sens de mon propos


Salutations!



"Régis MATHIEU" a écrit dans le message de news:

Bonjour,
C'est parceque je dois mettre ce rectangle dans + de 1000 fichiers !! Alors
à la main...... bonjour !!


Bonjour Mathieu,

Tu peux m'expliquer cette façon de faire :

| Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
| dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
| suivant dans Module1 du fichier Test1.xls :

Pourquoi écrire ta macro dans un classeur qui n'est pas le bon ?



Salutations!




"Régis MATHIEU" a écrit dans le message de news:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU












Avatar
Régis MATHIEU
Bonjour,

Suis désolé de mes mauvaises explications. Il s'agit en effet d'automatiser
la tache pour les 15 feuilles des 1000 fichiers. En fait je veux placer un
bouton ou autre sur les 15 feuilles de chaque fichier . En cliquant sur le
bouton dans chacune des 15 feuilles, la macro doit être lancée.
Veux-tu le code écrit jusqu'à maintenant ?


Bonjour Régis,

Ai-je été suffisemment clair ? Pas du tout !

A )
As-tu répondu à ma question de mon message précédent ?

B ) Tu ajoutes des nouveaux éléments dans ta réponse qui étaient absents à tes premiers messages.

C ) Où est ton problème ?
- savoir comment attaché une macro à un rectangle dans une feuille de calcul
(un clic droit sur ton rectangle - Menu contextuel - affecter une macro - choix de la macro dans la liste proposée)

- vouloir automatiser cette tâche pour tes 15 feuilles pour tes 1000 fichiers. Si c'est le cas, il manque beaucoup
d'informations pour même envisager un début de réponse.


Salutations!


"Régis MATHIEU" a écrit dans le message de news:

En fait : je dois mettre dans + de 1000 fichiers les choses suivantes :
- 1 "Module1" avec du code
- sur chacune des 15 feuilles que comportent les 1000 fichiers je veux
lancer le code du "Module1" à partir d'un bouton ou d'un rectangle auquel
j'affecte la macro du "Module1" !
Ai-je été suffisemment clair ?

Je sais, les macros c'est pratique, mais pourquoi inscrire la macro dans un autre classeur que le classeur où est ton rectangle

Ton texte stipule que ton rectangle est dans une feuille du fichier TEST_COPIE_MAC" et tu écris ta macro dans un autre fichier
Test1.xls . Là j'avoue ne pas comprendre pourquoi choisir UN AUTRE CLASSEUR pour y mettre sa macro.

Voilà le sens de mon propos


Salutations!



"Régis MATHIEU" a écrit dans le message de news:

Bonjour,
C'est parceque je dois mettre ce rectangle dans + de 1000 fichiers !! Alors
à la main...... bonjour !!


Bonjour Mathieu,

Tu peux m'expliquer cette façon de faire :

| Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
| dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
| suivant dans Module1 du fichier Test1.xls :

Pourquoi écrire ta macro dans un classeur qui n'est pas le bon ?



Salutations!




"Régis MATHIEU" a écrit dans le message de news:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU

















Avatar
michdenis
Bonjour Régis,

15 feuilles dans chaque fichier : Est-ce que tes fichiers contiennent seulement 15 feuilles ? Si oui, comment reconnaître seulement
les feuilles qui ont besoin de ce bouton et de la macro associée ?

Est-ce que ton rectangle ou bouton de commande existe-t-il déjà dans tes feuilles ? Ta préférence : Un rectangle ou un bouton de
commande ?

Ce bouton doit-il ou peut-il être situé au même endroit dans chacune des feuilles ? si non, comment faire pour trouver le meilleur
endroit où placer ce bouton de commande dans tes feuilles ?

Est-ce que la macro existe déjà ? Et le module qui la contient est déjà présent dans ton classeur ?

Tes 1000 fichiers sont dans le même répertoire ? Tous les fichiers sans exception de ce répertoire doivent être traité ?

Voilà quelques unes des questions laissées sans réponse dans ta demande.


Salutations!



"Régis MATHIEU" a écrit dans le message de news:

Bonjour,

Suis désolé de mes mauvaises explications. Il s'agit en effet d'automatiser
la tache pour les 15 feuilles des 1000 fichiers. En fait je veux placer un
bouton ou autre sur les 15 feuilles de chaque fichier . En cliquant sur le
bouton dans chacune des 15 feuilles, la macro doit être lancée.
Veux-tu le code écrit jusqu'à maintenant ?


Bonjour Régis,

Ai-je été suffisemment clair ? Pas du tout !

A )
As-tu répondu à ma question de mon message précédent ?

B ) Tu ajoutes des nouveaux éléments dans ta réponse qui étaient absents à tes premiers messages.

C ) Où est ton problème ?
- savoir comment attaché une macro à un rectangle dans une feuille de calcul
(un clic droit sur ton rectangle - Menu contextuel - affecter une macro - choix de la macro dans la liste proposée)

- vouloir automatiser cette tâche pour tes 15 feuilles pour tes 1000 fichiers. Si c'est le cas, il manque beaucoup
d'informations pour même envisager un début de réponse.


Salutations!


"Régis MATHIEU" a écrit dans le message de news:

En fait : je dois mettre dans + de 1000 fichiers les choses suivantes :
- 1 "Module1" avec du code
- sur chacune des 15 feuilles que comportent les 1000 fichiers je veux
lancer le code du "Module1" à partir d'un bouton ou d'un rectangle auquel
j'affecte la macro du "Module1" !
Ai-je été suffisemment clair ?

Je sais, les macros c'est pratique, mais pourquoi inscrire la macro dans un autre classeur que le classeur où est ton rectangle

Ton texte stipule que ton rectangle est dans une feuille du fichier TEST_COPIE_MAC" et tu écris ta macro dans un autre fichier
Test1.xls . Là j'avoue ne pas comprendre pourquoi choisir UN AUTRE CLASSEUR pour y mettre sa macro.

Voilà le sens de mon propos


Salutations!



"Régis MATHIEU" a écrit dans le message de news:

Bonjour,
C'est parceque je dois mettre ce rectangle dans + de 1000 fichiers !! Alors
à la main...... bonjour !!


Bonjour Mathieu,

Tu peux m'expliquer cette façon de faire :

| Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
| dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
| suivant dans Module1 du fichier Test1.xls :

Pourquoi écrire ta macro dans un classeur qui n'est pas le bon ?



Salutations!




"Régis MATHIEU" a écrit dans le message de news:

Bonjour à tous,

Je veux affecter une macro "Sub Copie_Colonnes()" à un rectangle dessiné
dans la feuille1 du fichier "TEST_COPIE_MAC" . J'ai donc écrit le code
suivant dans Module1 du fichier Test1.xls :

Le rectangle étant selectionné

Selection.OnAction = "Copie_Colonnes"
Lorsque je clique sur le rectangle de la feuille1 du fichier
"TEST_COPIE_MAC", il me lance la macro "Copie_Colonnes" mais il cherche cette
macro dans le fichier "Test1.xls"

Comment faire pour que la macro affectée soit bien celle du fichier
"TEST_COPIE_MAC" et non pas celle du fichier "Test1.xls" ?

Merci de votre aide à tous.

Régis MATHIEU

















Avatar
Régis MATHIEU
Re Bonjour,

Voici les réponses aux questions :
- Il y a plus de 15 feuilles dans chaque fichier mais je fais une boucle :
For compteur = 4 To 15
ActiveWorkbook.Sheets(compteur).Select
bla bla...
Next compteur

- Au lieu de mettre le code dans chaque feuille, je préfère le mettre une
seule fois et que chaque bouton y fasse référence.

- Le rectangle ou bouton ou zone de texte n'existe pas et il faut le créer
(Peu importe entre la zone de texte ou le rectangle (pour le bouton je crois
qu'il faut un truc du genre "quandclic" dans chaque feuille, donc je voudrais
éviter)

- Les rectangles ou zone de texte ds chaque feuille peuvent être au meme
endroit et je sais comment les placer.

- La macro existe déjà dans "Module1" présent dans chaque fichier

- les 1000 fichiers sont dans le même repertoire et tous sans exception sont
à modifier (Il n'y a que ces 1000 fichiers dans le répertoire et que ceux là)

Salutations et merci de ton aide.

Régis
Avatar
michdenis
Bonjour Régis,

Voilà ce que pourrait avoir l'air ta macro :

Il y a un certain nombre de variables à définir selon
ton application. Prend le temps de lire et de tester
à plus petite échelle avant de la lancer sur 1000 fichiers.

'------------------------------------
Sub InsererUnboutonDansFeuilles()

Dim Chemin As String
Dim Fichier As String
Dim A As Integer
Dim Xl As Object
Dim Wk As Workbook
Dim LeCode As String
Dim VComp As Object

'Exemple comment affecter la variable du code
'de ta macro qui sera copié dans le nouveau module
LeCode = "Sub MaMacro()" & vbCrLf
LeCode = LeCode & "Msgbox ""Bonsoir""" & vbCrLf
LeCode = LeCode & "End Sub"

'Chemin du répertoire où se trouve les fichiers
Chemin = "c:Atravail"
Fichier = Dir(Chemin & "*.xls")

Application.ScreenUpdating = False
Set Xl = CreateObject("Excel.application")
Xl.Visible = True
Do While Fichier <> ""
Set Wk = Xl.Workbooks.Open(Chemin & Fichier)
'Ajouter un module
With Wk
'Ajoute un module
Set vbcomp = .VBProject.VBComponents.Add(1)
'ajoute le code au module
vbcomp.CodeModule.AddFromString LeCode
'Ajoute au feuille 4 a 15, un bouton de commande
'et le lie au code du nouveau module
'Boucle de la l'index du worksheet 4 à 15
For A = 4 To 15
With .Worksheets(A)
'Ajout du bouton de commande
'issu de la barre d'outils formulaire
With .Shapes.AddFormControl _
(xlButtonControl, 121.5, 14.25, 118.5, 24.75) _
.OLEFormat.Object
'L'intitulé du bouton
.Caption = "Lancer La macro"
.Font.Size = 10
.Font.Name = "Arial"
'MaMacro = Nom dela macro ajouté au nouveau module.
.OnAction = Wk.Name & "!" & vbcomp.Name & ".MaMacro"
End With
End With
Next
End With
Application.DisplayAlerts = True
'Ferme le classeur et l'enregistre
Wk.Close True
Application.DisplayAlerts = False
Fichier = Dir()
Loop
Xl.Quit
Set Wk = Nothing: Set VComp = Nothing: Set Xl = Nothing

End Sub
'---------------------------------


Salutations!



"Régis MATHIEU" a écrit dans le message de news:

Re Bonjour,

Voici les réponses aux questions :
- Il y a plus de 15 feuilles dans chaque fichier mais je fais une boucle :
For compteur = 4 To 15
ActiveWorkbook.Sheets(compteur).Select
bla bla...
Next compteur

- Au lieu de mettre le code dans chaque feuille, je préfère le mettre une
seule fois et que chaque bouton y fasse référence.

- Le rectangle ou bouton ou zone de texte n'existe pas et il faut le créer
(Peu importe entre la zone de texte ou le rectangle (pour le bouton je crois
qu'il faut un truc du genre "quandclic" dans chaque feuille, donc je voudrais
éviter)

- Les rectangles ou zone de texte ds chaque feuille peuvent être au meme
endroit et je sais comment les placer.

- La macro existe déjà dans "Module1" présent dans chaque fichier

- les 1000 fichiers sont dans le même repertoire et tous sans exception sont
à modifier (Il n'y a que ces 1000 fichiers dans le répertoire et que ceux là)

Salutations et merci de ton aide.

Régis
1 2