Activer un classeur déjà ouvert
Bonjour,
Je ne suis pas très avancé dans VBA et je bloque sur un problème. J'ai un fichier Excel principal source à partir duquel je complète plusieurs fichiers cibles avec les informations que je souhaite.
J'ai déja créé la macro de traitement permettant de compléter mon fichier cible et elle fonctionne bien à condition que le fichier cible soit ouvert au préalable:
Sub MacroODZ7MR()
Windows("ODZ-7-HISTO-MR.xlsx").Activate ==> ' Cest le nom de mon fichier cible sur lequel je veux travailler
Range("A6").Select
ActiveCell.FormulaR1C1 = _ "=IF('[Historique-Debit-Pression.xlsm]ODZ-7'!R[-4]C[1]<='[Historique-Debit-Pression.xlsm]ODZ-7'!R2C13,'[Historique-Debit-Pression.xlsm]ODZ-7'!R[-4]C[11],""UNDEF"")"
Range("C6").Select
etc......et ainsi de suite
J'ai voulu améliorer mon programme est ajoutant une routine qui va chercher le fichier cible dans son arborescence pour l'ouvrir . Cette routine, quand elle est exécutée seule marche bien:
Sub OuvertureODZ7MR()
On Error GoTo OuvertureFichierErreur
Dim MonApplication As Object
Dim MonFichier As String
Dim MonLien As String
Set MonApplication = CreateObject("Shell.Application")
Sheets("MAIN").Select MonLien = Cells(2, 2).Value
MonFichier = MonLien & "\" & "ODZ-7-HISTO-MR.xlsx"
MonApplication.Open (MonFichier)
Set MonApplication = Nothing
Exit Sub
End Sub
Lorsque j'exécute cette Macro, le fichier cible s'ouvre bien et je peux séparément exécuter la seconde Macro présentée plus haut.
Par contre, je me casse les dents lorsque j'imbrique les lignes de l'ouverture du fichier cible à l'intérieur de la macro de traitement. En effet, ça bloque arrivé à la ligne Windows("ODZ-7-HISTO-MR.xlsx").Activate
Voici le code que j'ai créé en imbriquant les deux macros :
Sub MacroODZ7MR()
Dim MonApplication As Object
Dim MonFichier As String
Dim MonLien As String
Set MonApplication = CreateObject("Shell.Application")
Sheets("MAIN").Select MonLien = Cells(2, 2).Value
MonFichier = MonLien & "\" & "ODZ-7-HISTO-MR.xlsx"
MonApplication.Open (MonFichier)
Set MonApplication = Nothing
Windows("ODZ-7-HISTO-MR.xlsx").Activate ==> ' Cest le nom de mon fichier cible sur lequel je veux travailler
Range("A6").Select
ActiveCell.FormulaR1C1 = _ "=IF('[Historique-Debit-Pression.xlsm]ODZ-7'!R[-4]C[1]<='[Historique-Debit-Pression.xlsm]ODZ-7'!R2C13,'[Historique-Debit-Pression.xlsm]ODZ-7'!R[-4]C[11],""UNDEF"")"
Range("C6").Select
etc.....
J'ai besoin de vos conseils. Exécutées indépendamment ça marche mais en imbrication ça plante . Je veux juste qu'il continue de travailler sur le fichier qu'il vient d'ouvrir.
HK
Bonjour,
Houlalaaa... C'est bien, tu as cherché à faire, mais manifestement tu n'as pas regardé où il fallait.
1) ouvrir un fichier est beaucoup plus simple
2) tant qu'on peut il faut se passer d'activer classeur, feuille et référence pour lire ou écrire dedans.
Il suffit de les utiliser en tant qu'objets :
workbooks("machin").worksheets("truc").cells("B5").value = 123
Sub exemple()
Dim wk As Workbook
Set wk = Workbooks.Open("E:\tmp\111.xlsm")
wk.Worksheets("Feuil1").[A1] = "Bonjour"
' wk.Close
End Suberic
PS : utilise l'icône </> pour coller un code, qu'il reste bien lisible et indenté.