IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Gestion de classeurs Excel indépendants


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut Gestion de classeurs Excel indépendants
    Salut,
    je développe en ce moment une macro VBA qui, via un .cmd, ouvre un nouveau classeur excel.
    Le problème est que je n'arrive pas à récupérer la main sur le nouveau classeur. Plus généralement, je n'arrive pas à passer d'un classeur à l'autre, vu que les deux Excel sont "indépendants".
    Par exemple, je n'arrive pas, à partir du code du classeur "père", à écrire qqch ds un onglet du fichier du classeur "fils".
    Quelqu'un a t il déjà été confronté à ce problème ?
    Merci bcp

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En effet, pour faire "ce que tu semble vouloir faire" tu dois créer une seconde instance d'excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim CL1 as Workbook
    Dim FL1 as worksheet
    Dim XlAppli
    Dim XlCl
    Dim Xlfl
    Set CL1 = ThisWorkbook 'le classeur qui contient cette macro
    Set FL1 = CL1.worksheets("Feuil1") 'la feuille
    Chemin = "C:\LeRep\" 'Nom du second classeur
    NomFich = "Le Classeur.xls" 'feuille du second classeur
        Set XlAppli = CreateObject("Excel.Application") '< L'appli Excel
        Set XlCl = XlAppli.Workbooks.Open(Chemin & NomFich) '< le classeur
        Set Xlfl = XlCl.Worksheets("feuil1") '< la feuille
    Ensuite tu peux travailler tantôt sur Xlfl, tantôt sur FL1 du classeur contenant les macros.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    merci bcp pr ton retour

    le problème est que j'ouvre le classeur via un .cmd (Shell(path & "launch.cmd", 1)) ce qui fait que je ne sais pas comment faire pour nommer ou récupérer le nom de l'appli excel qui a été instanciée.
    Et (bien sur) je suis obligé de lancer le fichier via ce .cmd, sinon ca serait trop facile.
    sais tu comment faire ?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour activer le second classeur de façon à écrire dedans c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        XlAppli.Visible = True
        XlCl.Activate
    mais dans ce cas, la macro poursuit son exécution dans le classeur principal. Et si tu fermes le second Excel depuis son instance, tu ne reviendras pas automatiquement dans ton premier fichier... mais il existe une solution consistant à mettre un msgbox après les deux lignes ci-dessus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox "Travail sur le classeur 2 terminé" 'ou ce que tu veux
    Quand tu fermeras le second Excel, un clic sur ok te ramèneras sur le fichier principal et la macro pourra se poursuivre.

    En fin de macro, n'oublie pas de supprimer les instances
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set XlAppli = Nothing
    Set XlCl = Nthing
    Set etc.

  5. #5
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    oui mais quand tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set XlAppli = CreateObject("Excel.Application") '< L'appli Excel
        Set XlCl = XlAppli.Workbooks.Open(Chemin & NomFich) '< le classeur
    ca crée un nouveau classeur et ouvre dans celui ci ton fichier. mais c'est déjà fait par le .cmd. dc le pb est de récupérer le nom de l'appli pour pouvoir l'utiliser par la suite.

    je sais pas si je suis bien clair

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    mais c'est déjà fait par le .cmd. dc
    PS donc...
    Et bien sûr, tu supprimes ton cmd qui ouvre ton classeur, classeur avec lequel aucun lien n'est possible depuis ton code.
    Teste mon code en mettant le cmd en remarque.

  7. #7
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    le pb c que si je ne lance pas le fichier avec le cmd, il ne marche pas (le .cmd met à jour des éléments qui, si ils ne sont pas updatés, ne permettent pas le fonctionnement du fichier et notamment des macros qui sont dedans).
    j'en conclus que mon cas est désespéré ?

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    le .cmd met à jour des éléments qui, si ils ne sont pas updatés, ne permettent pas le fonctionnement du fichier et notamment des macros qui sont dedans
    Simple curiosité, que peut faire un .cmd à un fichier excel qu'Excel ne pourrait pas faire?

    Si tu nous en dis plus on trouvera peut etre quelque chose.

    Cordialement,

    Tirex28/

  9. #9
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    en fait le fichier excel contient une macro d'insertion dans un soft, et le fichier cmd met à jour la version d'Oracle. j'ai essayé de mettre à jour Oracle manuellement mais la macro ne marche pas.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ne peux-tu pas séparer cette mise à jour de l'ouverture du fichier Excel en la plaçant seule dans une commande dos, puis ouvrir le classeur concerné ?
    Parce que si c'est dans une macro Excel que s'effectue cette mise à jour, alors je ne vois pas ce qui l'empêcherait de s'exécuter en ouvrant ton fichier comme je te l'ai indiqué...
    Et de toute façon, pour établir un lien entre deux applis Excel, je ne vois pas d'autre manière de procéder.
    Explique-nous tout

  11. #11
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    bonne idée, j'avoue que je n'y avais pas songé. maintenant ca marche. merci beaucoup.
    encore une petite question : est il possible de lancer à partir d'un fichier A une macro contenue ds un fichier B dont le code est protégé par mot de passe si l'on connait juste le nom de la procédure ?

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,


    Dans le fichier A:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Application.Run "FichierB.xls!NomMacro", Argument1, Argument2
    Le fait que FichierB soit protégé ne pose pas de problème.

    Cordialement,

    Tirex28/

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En l'occurence, et comme je ne l'ai jamais fait, je suppose que tu devras utiliser l'instance du classeur (XlCl) à la place de FichierB.xls de même que l'instance de l'application (XlAppli) puisque la macro se trouve dans une autre application Excel... Sinon ce serait trop simple
    Dis-nous ce qui fonctionne, c'est intéressant à savoir

    Edit
    Comme j'étais curieux, je suis allé voir
    Donc, j'ai testé ça
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub SecondeSession()
    Dim CL1 As Workbook
    Dim FL1 As Worksheet
    Dim XlAppli 'Appli Excel créée
    Dim XlCl    'L'instance du classeur
    Dim Xlfl    'la feuille ds ce classeur
    Set CL1 = ThisWorkbook              'le classeur qui contient cette macro
    Set FL1 = CL1.Worksheets("Feuil1")  'la feuille dans ce classeur
    Chemin = "D:\xls\"                  'Chemin du second classeur
    NomFich = "NomDuClasseur.xls"   'Nom du second classeur
        Set XlAppli = CreateObject("Excel.Application")     '< L'appli Excel
        DoEvents
        Set XlCl = XlAppli.Workbooks.Open(Chemin & NomFich) '< le classeur
        DoEvents
        Set Xlfl = XlCl.Worksheets("feuil1")                '< la feuille
        XlCl.Activate
     
        '************************* Tes options *********************
        'Ensuite, tu as deux solutions :
        '1  ou tu veux voir ce qu'il se passe dans l'objet,
        '   alors valide la ligne suivante
        'XlAppli.Visible = True
        '   et tu fermes directement l'appli créée une fois dedans
        DoEvents
        '2  ou tu ne souhaites pas voir l'appli créé...
        '   et c'est cette macro qui la ferme.
     
        'Si 1 alors tu valides les deux lignes suivantes
        'Msgbox "Retour de " & NomFich
        'goto fin
        'Le Msgbox n'est là que pour empêcher la macro de se poursuivre...
        '... le temps d'aller voir dans NomFich... ce que tu veux voir ^^^
        'Ok supprimera les instances du fichier et de l'appli
     
        'Si 2, pas de message ni de "goto fin"
        '***********************************************************
     
        XlAppli.Run (NomFich & "!NomDeLaMacro")
        XlCl.Close False 'ou true si tu veux enregistrer le fichier
        XlAppli.Quit
    Fin::
        Set XlAppli = Nothing
        Set XlCl = Nothing
        Set Xlfl = Nothing
        Set CL1 = Nothing
        Set FL1 = Nothing
     
    End Sub

  14. #14
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    ca marche nickel. merci beaucoup pr votre réactivité et vos explications claires.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion de classeurs Excel
    Par cosinus5 dans le forum VSTO
    Réponses: 5
    Dernier message: 27/11/2010, 18h17
  2. Changer de feuille dans un classeur Excel
    Par couiss dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 09/05/2005, 10h05
  3. Ouverture classeur excel en VBSCRIPT
    Par coeur74 dans le forum ASP
    Réponses: 6
    Dernier message: 20/01/2005, 15h53
  4. Ouverture classeur excel en VBSCRIPT
    Par coeur74 dans le forum ASP
    Réponses: 2
    Dernier message: 20/01/2005, 09h11
  5. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo