Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en xslx

boniteprobtp

XLDnaute Nouveau
Je recopie des feuilles à partir d'un classeur sans macro (.xlsx), comment puis-je définir les traitements "Activate" et "Deactivate" pour effectuer des traitements spécifiques lors de l'activation et de la desactivation des feuilles puisque ce code semble être attaché à la feuille et non à l'applicatif ?
Merci pour votre aide
 

boniteprobtp

XLDnaute Nouveau
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Cela je le sais mais je suis dans un classeur .xlsm qui va récupérer des feuilles dans un classeur .xlsx pour les recopier dans le classeur récepteur en .xlsm.
C'est dans ce nouveau classeur que je voudrai pouvoir gérer les événements "Activate" et "Deactivate" pour certaines des feuilles qui auront été chargées.
 

tototiti2008

XLDnaute Barbatruc
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Re-bonjour,

et tu peux mettre le code des évènements Activate et DeActivate à l'avance dans les feuilles qui réceptionneront les données ?
Si oui, je ne vois pas le soucis...
 

boniteprobtp

XLDnaute Nouveau
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Comment veux-tu mettre du code dans un classeur xlsx ?

Le classeur .xlsm ne posséde pas les feuilles avant le chargement donc ce n'est pas à ce niveau que je peux y adjoindre le code.
 

boniteprobtp

XLDnaute Nouveau
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Merci, il me reste à tester bien que je ne sais comment charger "'Microsoft Visual Basic For Applications Extensibility 5.3" mais je pense qu'il doit l'être d'Office.
 

kjin

XLDnaute Barbatruc
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Bonjour le fil,
Sans
Code:
Dim Txt$, wb1 As Workbook, wb2 As Workbook, cn$
'-----le code à insérer dans les nouvelles feuilles--------
Txt = "Private Sub Worksheet_Activate()" & vbCrLf
Txt = Txt & "'...." & vbCrLf
Txt = Txt & "End Sub" & vbCrLf
Txt = Txt & "Private Sub Worksheet_Deactivate()" & vbCrLf
Txt = Txt & "'...." & vbCrLf
Txt = Txt & "End Sub" & vbCrLf
'----------------------------------------------------------
Set wb1 = ActiveWorkbook
Set wb2 = Workbooks.Open("X:\...\xxx.xlx")
Sheets("???").Copy After:=wb1.Sheets(wb1.Sheets.Count)
cn = ActiveSheet.CodeName
wb2.Close False
With ThisWorkbook.VBProject.VBComponents(cn).CodeModule
    .InsertLines .CountOfLines + 1, Txt
End With
A+
kjin
 

bonite

XLDnaute Nouveau
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Impossible de passer sur le
ThisWorkbook.VBProject.VBComponents(cn).CodeModule
Résultat :
Erreur : 13-incompatibilité de type

Mon code
Code:
Public wk1 As Workbook

Sub main()
    Set wk1 = ActiveWorkbook
    Call addEventToModule("Evol")
End Sub

Sub addEventToModule(Feuille)
    Dim texte As String
    Dim cn As String
    On Error GoTo errAddEventToModule
    '-----le code à insérer dans les nouvelles feuilles--------
    texte = "Private Sub Worksheet_Activate()" & vbCrLf
    texte = texte & "    Call affichageFeuille(True)" & vbCrLf
    texte = texte & "End Sub" & vbCrLf
    texte = texte & "Private Sub Worksheet_Deactivate()" & vbCrLf
    texte = texte & "   " & vbCrLf
    texte = texte & "End Sub" & vbCrLf
    '----------------------------------------------------------
    Set wk1 = ActiveWorkbook
    'cn = ActiveSheet.CodeName
    With ThisWorkbook.VBProject.VBComponents(Feuille).CodeModule
        .InsertLines .CountOfLines + 1, texte
    End With
    GoTo exitAddEventToModule
errAddEventToModule:
    MsgBox "Code erreur : " + Err + " en " + Erl + " - " + Error, 0, "Erreur"
    Resume exitAddEventToModule
exitAddEventToModule:
End Sub
 

kjin

XLDnaute Barbatruc
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Bonsoir,
Oui parce que tu ne respectes pas ce qui est écrit !
Code:
Sub main()
    Set wk1 = ActiveWorkbook
    Call addEventToModule(Sheets("Evol").CodeName)
End Sub
...fonctionnera sans doute mieux
A+
kjin
 

bonite

XLDnaute Nouveau
Re : Definir des evenements sur des feuilles chargée par VBA à partir d'un classeu en

Hélas, rien n'a changé
voici le nouveau code
Code:
Sub addEventToModule(Feuille)
    Dim texte As String
    Dim cn As String
    On Error GoTo errAddEventToModule
    '-----le code à insérer dans les nouvelles feuilles--------
    texte = "Private Sub Worksheet_Activate()" & vbCrLf
    texte = texte & "    Call affichageFeuille(True)" & vbCrLf
    texte = texte & "End Sub" & vbCrLf
    texte = texte & "Private Sub Worksheet_Deactivate()" & vbCrLf
    texte = texte & "   " & vbCrLf
    texte = texte & "End Sub" & vbCrLf
    '----------------------------------------------------------
    MsgBox ActiveSheet.CodeName
    cn = Sheets(Feuille).CodeName
    MsgBox cn
    With ThisWorkbook.VBProject.VBComponents(cn).CodeModule
        .InsertLines .CountOfLines + 1, texte
    End With
    GoTo exitAddEventToModule
errAddEventToModule:
    MsgBox "Code erreur : " + Err + " en " + Erl + " - " + Error, 0, "Erreur"
    Resume exitAddEventToModule
exitAddEventToModule:
End Sub

Dans le Main l'appel est fait par Call addEventToModule(feuille) et dans le module, je reproduis ta préconisation à savoir cn = sheets(feuille).CodeName.

Le résultat est identique. Les 2 messages avant l'anomalie qui se produit dans la ligne with donnent le même résultat.

Encore merci
 

bonite

XLDnaute Nouveau
[terminé] : Definir des evenements sur des feuilles chargée par VBA

Bonjour à tous

Je vous prie de m'excuser mais ce n'est pas par impolitesse si j'ai omis le Bonjour mais par étourderie.

Je n'ai pas changé de compte mais j'en ai créé un professionnel et un personnel qui n'aboutisse pas sur le même mail.

Aussi, j'espère que vous ne m'en tiendrez pas rigueur, je n'avais pas lu en totalité les consignes mais je vais m'y employer.

Encore Merci si vous reprenez la discussion.

A+++
 
Dernière édition:

Statistiques des forums

Discussions
312 503
Messages
2 089 053
Membres
104 013
dernier inscrit
VELONDAHY Mickaël