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 :

Additionner des valeurs des plusieurs fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Excusez mon français, ce n'est pas ma langue de base
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Excusez mon français, ce n'est pas ma langue de base

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut Additionner des valeurs des plusieurs fichiers
    Bonjour le forume,

    J’ai 24 fichiers nommés BD_equipe_1.xls, BD_equipe_2.xls … BD_equipe_24.xls.
    Chaque fichier a l’onglet Recap1. Dans cet onglet il y a un tableau.
    J’ai cherché la possibilité de calculer la somme des cellules C4 des touts les 24 fichiers.
    La seule solution que j’ai trouvée et la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME([BD_equipe_1.xls]Recap1!$C$4+[BD_equipe_2.xls]Recap1!$C$4+...+[BD_equipe_24.xls]Recap1!$C$4)
    Si j'utilise cette formule, ça deviendra qqc immense pour additionner 24 fichiers.
    Pouvez-vous proposer qqc plus « modeste » ?

    Merci d’avance,
    Gogia

  2. #2
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 87
    Par défaut Peut-être...
    Bonjour Gogia,

    Si tes données sont positionnées de la même façon sur chacune de tes feuilles (cellule C4)

    tu peux peut-être essayer de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME([BD_equipe_1.xls]Recap1:[BD_equipe_24.xls]Recap1!C4)

    Pas sûre du tout !!!!

  3. #3
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Par défaut
    Puisqu'on est sur le forum macros , pourquoi ne pas développer une fontion Somme_Classeur
    ex ( je n'ai pas testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function Somme_Classeur ( ranger_ as string )
    dim somme_ as as double
     
    for N = 1 to 24
        somme_ = somme_ +  workbooks ("BD_equipe_" & N & ".xls").worksheets  (Recap1).range ( ranger_).value
     
    next
     
    Somme_Classeur  = somme_
     
    end function
    Ensuite tu peux utiliser cette fonction comme une fonction personnalisée

  4. #4
    Membre averti
    Profil pro
    Excusez mon français, ce n'est pas ma langue de base
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Excusez mon français, ce n'est pas ma langue de base

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut
    @ Cocotte278
    Merci pour ta reponse!
    Mais ça ne fonctionne pas. Le résultat obtenue est #NOM.
    J'ai essaié de jouer avec le syntax mais sans success.

    @CodeFacile
    Bonjour ,

    Je ne maîtrise pas le VB. Peux-tu preciser ou exactement il faudra mettre le code?

    Les plage des données sont C4:F35 , C37:F38 , K4:N35 et K37:N38

    Merci,
    Gogia

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Une petite adaptation d'une formule de Bob Phillips :
    =SOMMEPROD(N(INDIRECT("[BD_equipe_"&LIGNE(INDIRECT("1:24"))&".xls]Recap1!C4")))

    En fait, "[BD_equipe_" & LIGNE( INDIRECT("1:24")) & ".xls]Recap1!C4" est transformé en une matrice :
    [BD_equipe_1.xls]Recap1!$C$4;[BD_equipe_2.xls]Recap1!$C$4;[BD_equipe_3.xls]Recap1!$C$4; etc
    ou les numéros de BD_equipe_ sont donnés par LIGNE( INDIRECT("1:24"))

    Sommeprod traite ensuite la somme.........

  6. #6
    Membre averti
    Profil pro
    Excusez mon français, ce n'est pas ma langue de base
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Excusez mon français, ce n'est pas ma langue de base

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut
    Bonjour Franck,

    Si j'ai compris correctement pour 12 fichiers la formulle sera
    =SOMMEPROD(N(INDIRECT("[BD_equipe_"&LIGNE(INDIRECT("1:12"))&".xls]Recap1!C4")))

    et pour 24 fichiers
    =SOMMEPROD(N(INDIRECT("[BD_equipe_"&LIGNE(INDIRECT("1:24"))&".xls]Recap1!C4")))

    C'est correct?

    Quand même, j'imagine qui touts les fichiers, dans ce cas-là doivent être dans le même dosier? Ou on peut remplacer
    [BD_equipe_"&LIGNE(INDIRECT("1:12"))&".xls]

    par

    [F:dossier:Sous-dossier:BD_equipe_"&LIGNE(INDIRECT("1:12"))&".xls]
    Je travaille sur MAC et il faut utiliser : et pas le back-slash

    Merci d'avance pour ta clarification!

  7. #7
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Si j'ai compris correctement pour 12 fichiers la formulle sera
    =SOMMEPROD(N(INDIRECT("[BD_equipe_"&LIGNE(INDIRECT("1:12"))&".xls]Recap1!C4")))

    et pour 24 fichiers
    =SOMMEPROD(N(INDIRECT("[BD_equipe_"&LIGNE(INDIRECT("1:24"))&".xls]Recap1!C4")))

    C'est correct?
    Oui. Mais je suppose que cela tu as pu le tester...

    Quand même, j'imagine que tous les fichiers, dans ce cas-là doivent être dans le même dosier? Ou on peut remplacer
    [BD_equipe_"&LIGNE(INDIRECT("1:12"))&".xls]
    par
    [F:dossier:Sous-dossier:BD_equipe_"&LIGNE(INDIRECT("1:12"))&".xls]
    Hum...
    "[F:dossier:Sous-dossier:BD_equipe_" sous entends que tous les fichiers sont dans : "F:dossier:Sous-dossier:" non?
    Oui, sans tester, je suis presque sur en affirmant que tous les fichiers, y compris celui dans lequel tu fais la somme doivent être dans le même répertoire.
    Je vais essayer un petit test et reviens te voir après...

  8. #8
    Membre averti
    Profil pro
    Excusez mon français, ce n'est pas ma langue de base
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Excusez mon français, ce n'est pas ma langue de base

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut
    J'ai testé, mais ça ne fonctionne pas et la "réponse" est #REF!

    Mes fichiers se trouvent dans le même répertoire. La question a été posée pour mieux comprendre quoi il faut faire dans le cas quand ce n'est pas le cas.

  9. #9
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Je n'y suis pas parvenu non plus... Problème avec des "" et des '...
    Ou alors c'est tout bonnement impossible.

    Mais après tout ceci, la formule proposée fonctionne si tous les classeurs sont dans le même répertorie?

  10. #10
    Membre averti
    Profil pro
    Excusez mon français, ce n'est pas ma langue de base
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Excusez mon français, ce n'est pas ma langue de base

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut
    Franck,

    Ta formule fonctionne parfaitement. Merci !!!

    Le seul souci: touts les fichier doivent êrte ouverts.

    Help de l'Excel:
    Si le classeur source est fermé, la fonction INDIRECT renvoie la valeur d'erreur #REF!.
    Si l'argument réf_texte fait référence à un autre classeur (référence externe), ce dernier doit être ouvert. Si le classeur source est fermé, la fonction INDIRECT renvoie la valeur d'erreur #REF!.

    MERCI

  11. #11
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Par défaut
    Re Bonjour,

    Je reviens sur ma fonction , que je viens de tester.

    Dans ton fichier de consolidation , tu va sous outils -> Macros -> Visual Basic Editor.

    Dans la nouvelle fenêtre Microsoft Visual Basic , tu vas sous Affichage -> Explorateur de projet , tu es dans dans cette fenetre VBA Projet , click droit -> Insertion -> Module . Par defaut , le programme inserre Module1

    Dans la fenetre Module 1 , tu copies la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function Somme_Classeur(ranger_ As String)
     Dim somme_ As Double
     
    For n = 1 To 3
        somme_ = somme_ + Workbooks("BD_equipe_" & n & ".xls").Worksheets("Recap1").Range(ranger_).Value
    Next
     
    Somme_Classeur = somme_
     
    End Function
    tu sors par fichier -> fermer et retourner à Excel
    dans ton classeur consolidation , dans la cellule ou tu veux récuperer par exemple les donnes des cellules 'D4' des différents fichiers , tu inserres la formule = -> Autre fonctions et ta fonction Somme_classeur doit apparaitre.

    tu completes avec = Somme_Classeur("D4")
    Tous les fichiers doivent être ouverts ...

  12. #12
    Membre averti
    Profil pro
    Excusez mon français, ce n'est pas ma langue de base
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Excusez mon français, ce n'est pas ma langue de base

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut
    CodeFacile,

    Merci beaucoup et bon week-end!

    Gogia

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

Discussions similaires

  1. [XL-2000] Additionner des cellules de plusieurs fichiers
    Par shenmicke dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2014, 00h43
  2. Réponses: 2
    Dernier message: 30/03/2011, 03h07
  3. Réponses: 5
    Dernier message: 15/06/2007, 11h58
  4. [VBA-E] Lire des valeurs dans un fichier excel
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/05/2006, 15h40
  5. [VB]vérifier des valeurs dans un fichiers et trier
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/02/2006, 17h35

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