Fonction utilisant plusieur fichier excel

micpiscine -  
Zoul67 Messages postés 2001 Statut Membre -
Bonjour,

jaurais une question pour vous je voudrais faire une fonction simple (somme dans mon cas) reliant plusieurs fichier excel

dans mon cas se sont des facture je voudrais additionner une case (A1 par exemple) de plusieurs fichier (disons 50) tous répertorier dans le même dossier

3 réponses

  1. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Une solution simple consiste à reporter chaque valeur dans une colonne dédiée.

    Exemple :
    En A1 : ='C:\Users\Toto\Documents\[Classeur1.xlsm]Feuil1'!$A$1
    En A2 : ='C:\Users\Toto\Documents\[Classeur2.xlsm]Feuil1'!$A$1
    ...
    En A50 : ='C:\Users\Toto\Documents\[Classeur50.xlsm]Feuil1'!$A$1

    En A51 : =SOMME(A1:A50)

    A+
    0
    1. micpiscine
       
      il y a moyen de ne pas le faire manuellement? sachant que me noms de fichier se suivent?
      0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bonjour,

      Merci de ne pas ouvrir plusieurs fils pour la même question.
      =INDIRECT("'C:\Users\Toto\Documents\[Classeur" & (1000+ LIGNE()) & ".xlsm]Feuil1'!$F$36")
      et tu tires la formule vers le bas.

      A+
      0
    3. micpiscine
       
      dès que j'utilise la fonction indirect un #REF! apparait
      0
      1. Zoul67 Messages postés 2001 Statut Membre 149 > micpiscine
         
        Condition Nécessaire et Suffisante : que le nom du fichier soit bon et que la feuille existe.
        0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    pour le faire "automatiquement par VBA

    cellules additionnées en B1, somme restituée en A2, macro dans classeur "cible" feuil1

    Sub additionner()
    Dim Somme As Double
    Dim recap As String, chemin As String, onglet As String
    Dim fich As String

    recap = ThisWorkbook.Name
    onglet = "feuil1" ' A ADAPTER
    chemin = ThisWorkbook.Path ' A ADAPTER
    Application.ScreenUpdating = False
    Range("A2:A100").ClearContents

    ChDir chemin
    fich = Dir("*.xls") 'si XL>=2007 xlsx ou xlsm
    While fich <> ""
    If fich <> recap Then
    'source: instruction dite de "Walkenbach"
    Somme = Somme + ExecuteExcel4Macro("'" & chemin & "\[" & fich & "]" & onglet & "'!R1C2") 'R1C2<==> B1
    End If
    fich = Dir
    Wend
    Range("A2") = Somme
    End Sub

    0
    1. micpiscine
       
      Merci :) mais je me pers un peu dans le code pourrait tu le commenter pour que je sache ou écrire mes variables et mes nom de fichiers ? :)
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    Tu as demandé:
    je voudrais faire une fonction simple (somme dans mon cas) reliant plusieurs fichier excel
    et
    mes nom de fichiers ?


    me fiant là dessus, je t'ai écris une macros qui parcourt le dossiers où on trouve tes 50 classeurs: on rend ce dossier actif (ch dir) et la boucle donne au fur et à mesure le nom des classeurs (tu n'as pas besoin de savoir le nom)
    ChDir chemin
    fich = Dir("*.xls") 'si XL>=2007 xlsx ou xlsm
    While fich <> ""
    ....
    fich = Dir
    Wend
    --
    La fonction "dir" renvoie le nom du fichier en cours (variable "fich")

    on emploie une ligne qui permet de ne pas ouvrir et refermer chaque classeur(gain de temps)et qui renvoie la valeur du classeur en cours cellule B1 de la feuille donnée par la variable "onglet" vers le classeur nommé par la variable "recap " qui additionne au fur et à mesure les valeurs des 50 classeurs

    sans précision de ta part j'ai considéré que le classeur "cible" (recap) était dans le même dossier que les 50; sinon tu adaptes le chemin vers tes 50
    et tu supprimes le if -end if

    je te joins un petit exemple ou on collecte des dates au lieu de faire une somme

    http://www.cjoint.com/c/EJcgTVdEhwq

    Michel
    0