Bonjour à tous,
Je possède la procédure suivante :
Elle me permet en substance de récupérer des données d'un fichier dans un classeur modèle, puis d'enregistrer ce classeur modèle à la place du fichier de données. Ainsi je conserve intact mon classeur modèle, et j'ai une copie des données puisque la manipulation doit être effectuée chaque semaine.
Cela fonctionne très bien. Cependant, j'ai ensuite le code suivant :
Qui me permet d'insérer du code vba dans chaque page du classeur (une vingtaine au total). Ces pages sont créées en vba juste avant dans la même procédure.
Ce code me renvoi une erreur d'exécution 9 : Cet indice n'appartient pas à la sélection sur cette ligne :
Pourtant en posant un espion sur mes variables, elles contiennent les bonnes données.
De plus, lorsque je ferme le classeur nouvellement créé grâce au vba puis que je l'ouvre à nouveau, à ce moment là la procédure s'exécute correctement.
Erratum : La première fois que je lance la procédure elle plante, mais si je la relance ensuite elle fonctionne. :/
C'est comme si le fait d'enregistrer sous en vba et de lancer la seconde procédure directement après provoquait un conflit dans mes vba projects.
Mais là je sèche un peu pour comprendre pourquoi.
Merci d'avance pour toute aide sur la question,
Sardaucar
Je possède la procédure suivante :
VB:
Sub copie_données()
Dim chemf As String
Dim nomf As String
'Sélection du fichier contenant les données
chemf = Application.GetOpenFilename("Fichiers Excel, *.xlsx", , "Sélectionnez le fichier de données", "Importer")
Application.ScreenUpdating = False
'Ouverture du fichier et récupération des variables
Workbooks.Open (chemf)
nomf = ActiveWorkbook.Name
pos = InStr(ActiveWorkbook.Name, ".xls")
chem = Left(nomf, pos - 1)
'Copie des données dans le classeur "Suivi base horaire" et fermeture/suppression du fichier de données
Workbooks("Suivi base horaire.xlsm").Sheets("Données").Range("A1:Z5000") = Workbooks(nomf).Sheets("sheet1").Range("A1:Z5000").Value
Workbooks(nomf).Close
Kill chemf
'Sauvegarde du classeur à la place du fichier de données, avec le même nom que ce dernier
ActiveWorkbook.SaveAs Filename:="M:\Administration\Secrétariat RH\LOGICIELS RH\CHARLES\KELIO\Suivi base horaire\2017\" & chem & ".xlsm"
Application.ScreenUpdating = True
ActiveSheet.Range("D8").Font.ColorIndex = 10
End Sub
Elle me permet en substance de récupérer des données d'un fichier dans un classeur modèle, puis d'enregistrer ce classeur modèle à la place du fichier de données. Ainsi je conserve intact mon classeur modèle, et j'ai une copie des données puisque la manipulation doit être effectuée chaque semaine.
Cela fonctionne très bien. Cependant, j'ai ensuite le code suivant :
VB:
Dim Ws As Worksheet
For i = 1 To Nbresp
cFeuil = Worksheets("Modèle").Cells(i, 1).Value
Set Ws = ThisWorkbook.Worksheets(cFeuil)
With ThisWorkbook
With .VBProject.VBComponents(Ws.CodeName).CodeModule 'Copie l'onglet sans les macro de la feuille
.AddFromString "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" & vbLf & _
"If Not Application.Intersect(Target, Range(""A1"")) Is Nothing Then" & vbLf & _
"Worksheets(""Modèle"").Activate" & vbLf & _
"End If" & vbLf & _
"End Sub"
End With
End With
Next
Qui me permet d'insérer du code vba dans chaque page du classeur (une vingtaine au total). Ces pages sont créées en vba juste avant dans la même procédure.
Ce code me renvoi une erreur d'exécution 9 : Cet indice n'appartient pas à la sélection sur cette ligne :
VB:
With .VBProject.VBComponents(Ws.CodeName).CodeModule 'Copie l'onglet sans les macro de la feuille
Pourtant en posant un espion sur mes variables, elles contiennent les bonnes données.
De plus, lorsque je ferme le classeur nouvellement créé grâce au vba puis que je l'ouvre à nouveau, à ce moment là la procédure s'exécute correctement.
Erratum : La première fois que je lance la procédure elle plante, mais si je la relance ensuite elle fonctionne. :/
C'est comme si le fait d'enregistrer sous en vba et de lancer la seconde procédure directement après provoquait un conflit dans mes vba projects.
Mais là je sèche un peu pour comprendre pourquoi.
Merci d'avance pour toute aide sur la question,
Sardaucar