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) :

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
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.

J'ai résolu le problème en ajoutant avant la deuxième copie la ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Classeur_Valeur.Sheets("backtest").Activate
J'aimerais donc comprendre d'où ça peut venir.


Merci de votre aide, j'espère avoir été clair dans ma description.


Jodko.