VBA -Windows Activate dans une procédure BeforeSave

Bonjour à tous,

J'ai créé une macro qui fonctionne très bien et qui vise à copier une partie de mon classeur dans une autre classeur au moment de la sauvegarde. Lorsque j'essaie d'activer cette macro dans l'event BeforeSave (donc dans ThisWorkbook), je reçois un message d'erreur Run-Time error '0': Subscript out if range et le Debug coince sur la ligne en rouge ci-dessous.

Cette macro fonctione cependant très bien dans un module standard.

Y-a-t'il des restrictions dans l'event BeforeSave ?

Merci d'avance.

CODE BEGIN-----------------------------

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'déclaration des variables :

Dim Trouve As Range, PlageDeRecherche As Range

Dim Valeur_Cherchee As String, AdresseTrouvee As String

Dim PlageCopy As Range, LastColumn As String

Dim Feuille As String, i As Integer

'Ouverture des classeurs

Workbooks.Open Filename:="F:\Planning Mgt.xlsx"

'Début de la boucle des tabs "Mois"

For i = 1 To 12

Select Case i

Case Is = 1

Feuille = "Jan"

LastColumn = "BK"

Case Is = 2

Feuille = "Feb"

LastColumn = "BE"

Case Is = 3

Feuille = "Mar"

LastColumn = "BK"

Case Is = 4

Feuille = "Apr"

LastColumn = "BI"

Case Is = 5

Feuille = "May"

LastColumn = "BK"

Case Is = 6

Feuille = "Jun"

LastColumn = "BI"

Case Is = 7

Feuille = "Jul"

LastColumn = "BK"

Case Is = 8

Feuille = "Aug"

LastColumn = "BK"

Case Is = 9

Feuille = "Sep"

LastColumn = "BI"

Case Is = 10

Feuille = "Oct"

LastColumn = "BK"

Case Is = 11

Feuille = "Nov"

LastColumn = "BI"

Case Is = 12

Feuille = "Dec"

LastColumn = "BK"

Case Else

Feuille = ""

End Select

'Activation du classeur et de la sheet active

Windows("Planning Transversal team.xlsm").Activate

Sheets(Feuille).Activate

'affectation de valeurs aux variables

Valeur_Cherchee = "*Mon_Texte*"

'Recherche dans la première colonne de la feuille active

Set PlageDeRecherche = ActiveSheet.Columns(1)

'Recherche la valeur exacte (LookAt:=xlWhole)

Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'Traitement de l'erreur possible : Si on ne trouve rien :

If Trouve Is Nothing Then

'ici, traitement pour le cas où la valeur n'est pas trouvée

AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address

Else

'ici, traitement pour le cas où la valeur est trouvée

AdresseTrouvee = Trouve.Address

End If

'Définition de la plage à copier et copie

Set PlageCopy = Range("$B$" & Trouve.Row & ":$" & LastColumn & "$" & Trouve.Row)

PlageCopy.Select

Selection.Copy

'Activation du classeur de destination

Windows("Planning Mgt.xlsx").Activate

Sheets(Feuille).Activate

Range("C13").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Range("A2").Select

Next

'vidage des variables

Set PlageDeRecherche = Nothing

Set Trouve = Nothing

Set PlageCopy = Nothing

'Retourne au Menu, sauve et ferme le classeur de destination

Windows("Planning Mgt.xlsx").Activate

Sheets("Menu").Select

Range("A3").Select

ActiveWorkbook.Save

ActiveWindow.Close

End Sub

CODE END -----------------------------

Bonjour,

Cette instruction n'existe pas. Ca serait plutôt :

Workbooks("Planning Transversal team.xlsm").Windows(1).Activate

Merci. Ca fonctionne très bien.

Rechercher des sujets similaires à "vba windows activate procedure beforesave"