Bonjour à tous,
J'aimerais comprendre le phénomène suivant :
J'ai fait une macro ultra-basique pour faire des opérations sur des données de classeurs.
J'ai moults classeurs concernant des "valeurs" -> Classeur_Valeur, qui ont un onglet "cours" et un onglet "backtest"
J'ai un classeur concernant le "backtest" -> Classeur_Backtest, qui a un onglet "backtest" qui contient des formules et un onglet "Résultats" qui contient des résultalts.
Il s'agit, pour chaque Classeur_Valeur, de recopier la formule qui va bien dans Classeur_Backtest\"backtest" dans une colonne de Classeur_Valeur\"cours" puis de recopier une ligne de Classeur_Valeur\"backtest" dans la dernière ligne du tableau présent dans Classeur_Backtest\"Résultats".
Comme le donneur d'ordre m'a demandé de pouvoir modifier le nombre de colonnes à copier, j'ai mis des Ranges relatifs (je précise que le problème n'est pas là).
Voilà la macro (le problème est décrit après) :
Sur mon PC, ça marche, mais sur le sien, ça ne marche pas, dans le sens où le second "paste" colle le contenu de la copie d'avant. En d'autres termes, la seconde copie n'a pas lieu. D'ailleurs, quand je l'exécute en mode pas à pas, au moment ou la copie est sensée avoir eu lieu et que je regarde l'onglet en question, il n'y a pas l'aspect visuel d'une sélection copiée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Nom_Classeur_Valeur = Dir(Dossier_En_Cours & "*.xlsx") Do While Nom_Classeur_Valeur <> "" 'Ouvre le classeur de valeur Workbooks.Open Filename:=Dossier_En_Cours & Nom_Classeur_Valeur Set Classeur_Valeur = ActiveWorkbook 'Vérifie que c'est bien un classeur de valeur 'définition de la dernière ligne de l'onglet des cours '/!\ il doit y avoir au moins deux lignes remplies au debut et il ne doit pas y avoir de ligne vide Derniere_Ligne_Cours = Classeur_Valeur.Sheets("cours").Range("H3").End(xlDown).Row 'Copie les formules Classeur_Backtest.Sheets("Paramètres").Range("Z4:AA4").Copy 'Colle les formules Classeur_Valeur.Sheets("cours").Range("Z4:AA" & Derniere_Ligne_Cours).PasteSpecial xlPasteFormulas 'Copie du résultat Classeur_Valeur.Sheets("backtest").Range(Cells(3, 1), Classeur_Valeur.Sheets("backtest").Cells(3, Classeur_Valeur.Sheets("backtest").Range("A3").End(xlToRight).Column)).Copy 'Colle le résultat Classeur_Backtest.Sheets("Résultats").Range("A" & Classeur_Backtest.Sheets("Résultats").Range("A1").End(xlDown).Row + 1).PasteSpecial xlValues 'Sauve les classeurs Classeur_Valeur.Save Classeur_Backtest.Save 'Ferme le classeur de valeurs Classeur_Valeur.Close Nom_Classeur_Valeur = Dir() Loop
J'ai résolu le problème en ajoutant avant la deuxième copie la ligne :
J'aimerais donc comprendre d'où ça peut venir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Classeur_Valeur.Sheets("backtest").Activate
Merci de votre aide, j'espère avoir été clair dans ma description.
Jodko.
Partager