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 :

Insérer une formule dans un autre classeur


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Insérer une formule dans un autre classeur
    Bonjour,

    j'exécute une macro dans un classeur A. Cette macro doit insérer une formule dans une cellule d'un classeur B.
    La formule a insérer fait référence à une valeur contenue dans une cellule du classeur A.

    Comment faire ?

    Voici le code :

    ' le classeur A s'appelle "date_ref.xls"
    ' le classeur dans lequel il faut insérer la formule se nomme ici "sem10.xls"

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub MAJDate()
     
        ' compteur de nombre de semaine
        Dim x As Integer
     
        ' Pour chaque fichier
        For x = 10 To 10
     
            ' Ouverture des classeurs excel à mettre àjour
            Dim NumSem As String
            If x < 10 Then
                NumSem = "0" & x
            Else
                NumSem = x
            End If
     
            Dim NomFich As String
            NomFich = "C:\mon_chemin\sem" & NumSem & ".xls"
     
            Dim appExcel As Excel.Application 'Application Excel
            Dim wbExcel As Excel.Workbook 'Classeur Excel
            Dim wsExcel As Excel.Worksheet 'Feuille Excel
     
            'Ouverture de l'application
            Set appExcel = CreateObject("Excel.Application")
            'Ouverture d'un fichier Excel
            Set wbExcel = appExcel.Workbooks.Open(NomFich, 3, False)
            'wsExcel correspond à la première feuille du fichier
            Set wsExcel = wbExcel.Worksheets(1)
     
            MsgBox wsExcel.Cells(1, 2).Value
     
            Dim MaFormule As String
            Dim MonCoef As Integer
     
            MonCoef = 7 * (x - 1)
     
            MaFormule = "=[date_ref.xls]Feuil1!$A$1 + " & MonCoef
     
            ' pour debug
            ' ActiveCell.Formula = MaFormule
     
            wsExcel.Activate
            wsExcel.Cells(1, 2).Formula = MaFormule
            MsgBox wsExcel.Cells(1, 2).Value
     
            wbExcel.Close 'Fermeture du classeur Excel
            appExcel.Quit 'Fermeture de l'application Excel
     
            'Désallocation mémoire
            Set wsExcel = Nothing
            Set wbExcel = Nothing
            Set appExcel = Nothing
     
        Next x
     
    End Sub
    Merci de votre aide

    Y

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Je pense que ça marcherait mieux si tu ouvrais les fichiers dans le même Excel plutôt que d'utiliser une autre application à chaque fois.
    Si tu dois obligatoirement faire comme ça, il faut à mon avis utiliser le chemin complet du fichier source dans ta formule.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci de votre réponse,

    Concrètement pour "optimiser" mon code (ouvrir les fichiers dans le même excel) il faudrait que je déplace l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set appExcel = CreateObject("Excel.Application")
    avant mon itération, c'est cela ?

    Pendant que j'y suis, une fois que j'ai fait la modification de cellule dans mon classeur B, comment puis je le fermer en enregistrant la modification sans qu'il y ait la boîte de dialogue me demande de fournir un nom pour enregistrer mon fichier ?

    Cordialeme,t

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    En fait, ce que tu fais dans ton code, c'est que tu ouvres un nouvelle instance d'Excel pour chaque fichier.

    Tu peux tester sans code : quand tu ouvre un fichier à partir d'Excel ou en double cliquant dessus dans l'explorateur de fichier, il est ouvert dans le même Excel, par contre, tu peux relancer une nouvelle application Excel (via le menu démarrer par exemple ou un raccourci) et là tu ne retrouves pas les fichiers déjà ouverts, il n'y a aucun lien entre les différents fichier.
    Dans le premier cas, si dans Classeur1, tu choisis une cellule, que tu fais "=" et que tu cliques dans une cellule de Classeur2, ça va marcher.
    Dans le deuxième cas, ce sera pour lui comme si tu cliquais sur ton navigateur préféré, ton logiciel de messagerie... Il ne va pas reconnaître que tu lui indiques une cellules d'une feuille Excel.

    Mon idée était donc de travailler dans la même instance d'Excel. Pour cela, il ne faut pas déclarer ton appExcel :

    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
    49
    50
    51
    52
    Sub MAJDate()
     
        ' compteur de nombre de semaine
        Dim x As Integer
     
        ' Pour chaque fichier
        For x = 10 To 10
     
            ' Ouverture des classeurs excel à mettre àjour
            Dim NumSem As String
            If x < 10 Then
                NumSem = "0" & x
            Else
                NumSem = x
            End If
     
            Dim NomFich As String
            NomFich = "C:\mon_chemin\sem" & NumSem & ".xls"
     
            Dim wbExcel As Excel.Workbook 'Classeur Excel
            Dim wsExcel As Excel.Worksheet 'Feuille Excel
     
            'Ouverture d'un fichier Excel
            Set wbExcel = Workbooks.Open(NomFich, 3, False)
            'wsExcel correspond à la première feuille du fichier
            Set wsExcel = wbExcel.Worksheets(1)
     
            MsgBox wsExcel.Cells(1, 2).Value
     
            Dim MaFormule As String
            Dim MonCoef As Integer
     
            MonCoef = 7 * (x - 1)
     
            MaFormule = "=[date_ref.xls]Feuil1!$A$1 + " & MonCoef
     
            ' pour debug
            ' ActiveCell.Formula = MaFormule
     
            wsExcel.Activate
            wsExcel.Cells(1, 2).Formula = MaFormule
            MsgBox wsExcel.Cells(1, 2).Value
     
            wbExcel.Close 'Fermeture du classeur Excel
     
            'Désallocation mémoire
            Set wsExcel = Nothing
            Set wbExcel = Nothing
     
        Next x
     
    End Sub
    Pour ta question subsidiaire, regarde dans les options de la méthode Close de l'objet Workbook, tu y trouveras ton bonheur.

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci cela fonctionne parfaitement

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

Discussions similaires

  1. Insérer une formule dans une cellule Excel via VBA
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2020, 13h02
  2. Insérer une formule dans des classeurs fermés
    Par texas2607 dans le forum Excel
    Réponses: 8
    Dernier message: 19/01/2011, 16h55
  3. Insérer une formule dans une cellule
    Par sam_XIII dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/10/2007, 16h47
  4. Executer une macro dans un autre classeur
    Par nautygirl dans le forum Général VBA
    Réponses: 2
    Dernier message: 30/07/2007, 15h34
  5. [VBA-E] effectuer une recherche dans un autre classeur
    Par sebneb dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 07/01/2007, 11h47

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