XL 2010 Copier coller bouton avec code VBA sur autres classeurs excel

Stedemart

XLDnaute Nouveau
Bonjour,

Nous utilisons un code vba issu d'un bouton sur un classeur excel que nous collons dans un autre fichier, la procédure fonctionne normalement sur mon pc, Le collage de l'objet comprend bien le code + le bouton dans le nouveau classeur sur mon pc.
Cependant lorsque ma collègue essaie la meme chose, le bouton est seulement coller sans affectation de code vba derrière) seul l'objet est collé dans son classeur.
Cela doit venir des sécurités excel mais je ne trouve pas quelqu'un peut m'aider svp ?

D'avance merci pour votre aide
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonsoir @Stedemart

J'ai l'impression à te lire que dans:
Le 1er cas copie sur ton PC qu'en fait tu fais une copie avec liaison et donc quand tu ouvres ton 2eme fichier la "liaison" opère et que tu as l'illusion d'avoir tout dans ton nouveau fichier.(Bouton + code du bouton alors que tu n'as que le bouton et la liaison avec ton 1eme fichier)

Le 2eme cas il n'y a pas de liaison vu que le PC est distant

Une copie de bouton ne copie que le bouton mais pas le code VBA qui lui est associé.
Il faut faire cela en 2 temps (Copie du bouton et copie du code)

Si mon explication ne correspond pas merci de joindre les 2 fichiers (le tien et celui de ta collègue) pour vérifier de visu.

@Phil69970
 

Stedemart

XLDnaute Nouveau
Oui j'ai le bouton avec la liaison exactement sur mon nouvel objet collé on peut le voir dans le nom de la macro associée à mon objet mais cela fonctionne bien comme ça.
Elle de son coté en faisant la même chose, elle a juste le bouton tout simple. comme une image sur lequel elle doit réaffecter sa macro que je lui ai envoyé par mail.
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour
hum ... bizarre tout ça
si ton bouton est un activX et non un control formulaire avec macro affectée dans module
quand tu copie la feuille tu copie son code avec
maintenant si tu ne copie que le bouton effectivement il te faut copier le code ensuite

problème :
pour faire ça on s'attaque aux vbcomponents ce qui implique le retrait de la sécurité "acces approuvés" dans les options excel en cochant l'option pour un fichier qui est sensé se balader entre X pc distants ou non c'est BOF!!!

perso je ferait un bouton dynamique en subclassant le bouton si dans la feuille il n'existe pas dans le thisworkbook c'est suffisant pas la peine de faire une classe
à l'ouverture le bouton se crée et son event est géré par le subclassing
bref le bouton qui n'existe pas existerais toujours en fait ( c'est rigolo non ??);)

et même encore plus simple finalement c'est d'ajouter un controls formulaire avec affectation de macro
et pas de copie pas de blablabla


exemple prends un fichier vierge et colle ça dans le thisworkbook module
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On error Resume Next
Feuil1.Shapes("bouton1").Delete
End Sub

Private Sub Workbook_Open()
 Set BT = Feuil1.Buttons.Add(126, 0, 192.6, 22.8)
    BT.Name = "bouton1"
    BT.OnAction = "ThisWorkbook.bouton_Click"

 End Sub
Public Sub bouton_Click()
MsgBox " je clique sur le bouton " & Application.Caller & " créée dynamiquement "
'tu peux même appeler une autre sub ici
End Sub
enregistre le fichier et ferme le
ouvre le maintenant ton bouton est en place et operationel
il est supprimé a chaque fermeture du fichier et ajouté a chaque ouverture


ou que le fichier se trouve tu aurais toujours ton bouton

tu peux copier autant de fois le fichier sous le nom que tu veux a l'ouverture tu aurais toujours ton bouton
c'est simple ;)

maintenant on peut arranger selon le contexte si tu copie le fichier ou une feuille
mais comme tel le bouton sera toujours là
 

Stedemart

XLDnaute Nouveau
je n'ai pas tout compris dans ta réponse et le soucis vient de revenir chez ma collègue... alors que ce matin j'avais réussi sur son pc...je ne comprend pas.

Alors le code de bouton est le suivant, il avait été réalisé par un stagiaire, il sert à recupérer sur plusieurs fichiers de controle de mesure poids excel toujours dans le meme format, des données pour les copier coller dans un fichier de compil appelé ecart type et de mettre une date sur le fichier de base pour noter que l'export a bien été réalisé :

Function FichOuvert(F As String) As Boolean

On Error Resume Next
FichOuvert = Not Workbooks(F) Is Nothing
End Function


Sub VBA_Test()

'Private Sub ET_Click()
Dim dl As Integer, derlig As Integer
Dim madate As Date
Dim poids_sachet As Integer, tare_sachet As Integer
Dim TU1 As Integer, TU2 As Integer
Dim produit_emballé As String, code_article, numéro_lot As String, OF
Dim A As String, intitulé_B As String, C As String, D As String, E As String, F As String, G As String, L As String, M As String, N As String, O As String
Dim tablo, tabloR(), k%, i%

'affiche un message d'erreur si la valeur de la tare n'est pas rentrée

If Worksheets("Contrôles sachets").Cells(8, 3).Value = "" Then

MsgBox ("La valeur de la TARE n'a pas été indiquée, veuillez la saisir. ")

End If

'affiche la date et l'heure à laquelle la personne a cliqué sur le bouton, la date est placée en L7. Il faut donc placer le bouton juste au dessus ou au dessous.

With [L7]
.Value = Now
.NumberFormat = "dd/mm/yyyy hh:mm"
End With


'copie les valeurs de "Contrôles sachets"

With Sheets("Contrôles sachets")
dl = .Range("C" & Rows.Count).End(xlUp).Row 'last line
'-------------------- ENTÊTES -- Not useful --------------------------------
' A = .Range("A5")
' B = .Range("G6")
' C = .Range("I6")
' D = .Range("D8")
' E = .Range("A8")
' F = .Range("A10")
' G = .Range("B11")
' L = .Range("G8")
' M = .Range("I8")
' N = .Range("A7")
' O = .Range("A6")

'-------------------- INFORMATIONS DES ENTÊTES--------------------------

madate = .Range("C5")
poids_sachet = .Range("F8")
tare_sachet = .Range("C8")
TU1 = .Range("H8")
TU2 = .Range("J8")
produit_emballé = .Range("C6")
code_article = .Range("C7")
numéro_lot = .Range("H6")
OF = .Range("J6")

'-------------------- BDD---------------------------------------------

tablo = .Range("A11:G" & dl)
k = 0

'colle les valeurs dans auto2

For i = 1 To UBound(tablo, 1) Step 4
If tablo(i, 3) <> "" Then
ReDim Preserve tabloR(1 To 16, 1 To k + 2)
tabloR(2, 2 + k) = DateValue(madate)
tabloR(3, 2 + k) = numéro_lot
tabloR(4, 2 + k) = OF
tabloR(5, 2 + k) = poids_sachet
tabloR(6, 2 + k) = tare_sachet
tabloR(7, 2 + k) = tablo(i, 1)
tabloR(8, 2 + k) = tablo(i, 3)
tabloR(9, 2 + k) = tablo(i, 4)
tabloR(10, 2 + k) = tablo(i, 5)
tabloR(11, 2 + k) = tablo(i, 6)
tabloR(12, 2 + k) = tablo(i, 7)
tabloR(13, 2 + k) = TU1
tabloR(14, 2 + k) = TU2
tabloR(15, 2 + k) = code_article
tabloR(16, 2 + k) = produit_emballé
k = 1 + k
'colle les intitulés des valeurs
tabloR(2, 1) = A
tabloR(3, 1) = B
tabloR(4, 1) = C
tabloR(5, 1) = D
tabloR(6, 1) = E
tabloR(7, 1) = F
tabloR(8, 1) = G
tabloR(9, 1) = G
tabloR(10, 1) = G
tabloR(11, 1) = G
tabloR(12, 1) = G
tabloR(13, 1) = L
tabloR(14, 1) = M
tabloR(15, 1) = N
tabloR(16, 1) = O



End If



Next i

If FichOuvert("ecart-type.xlsx") Then
'Workbooks("ecart-type.xlsx").Sheets("auto2").Range("A2").CurrentRegion.Offset(1, 0).ClearContents

derlig = Workbooks("ecart-type.xlsx").Sheets("auto2").Range("b" & Rows.Count).End(xlUp).Row + 1



On Error Resume Next
Workbooks("ecart-type.xlsx").Sheets("auto2").Range("A" & derlig).Resize(UBound(tabloR, 2), 15) = Application.Transpose(tabloR)
Erase tablo: Erase tabloR

Else
MsgBox "Le classeur ecart-type.xlsx n'est pas ouvert, " & Chr(10) & Chr(10) & "Transfert des données impossible.": Exit Sub
End If
End With



End Sub

----------------------------------------------
Déjà de base, elle a le message d'erreur comme quoi son fichier ecart type n'est pas ouvert.

Elle ouvre pourtant le fameux fichier ecart-type.xlsx...et le transfert des données est impossible.

Cette macro fonctionne bien sur mon pc.
 

Discussions similaires

Réponses
8
Affichages
458
Réponses
6
Affichages
623