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 Sub

eric

PS : utilise l'icône </> pour coller un code, qu'il reste bien lisible et indenté.

Rechercher des sujets similaires à "activer classeur deja ouvert"