Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/09/2011, 11h52   #1
Candidat au titre de Membre du Club
 
Excusez mon français, ce n'est pas ma langue de base
Inscription : août 2011
Messages : 32
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 : 32
Points : 12
Points : 12
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 :
=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
Gogia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 12h33   #2
Membre régulier
 
Femme
Inscription : septembre 2011
Messages : 86
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 : 86
Points : 75
Points : 75
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 :
=SOMME([BD_equipe_1.xls]Recap1:[BD_equipe_24.xls]Recap1!C4)

Pas sûre du tout !!!!
Cocotte278 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 13h46   #3
Membre confirmé
 
Inscription : juillet 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 209
Points : 219
Points : 219
Puisqu'on est sur le forum macros , pourquoi ne pas développer une fontion Somme_Classeur
ex ( je n'ai pas testé)

Code :
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
CodeFacile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 14h28   #4
Candidat au titre de Membre du Club
 
Excusez mon français, ce n'est pas ma langue de base
Inscription : août 2011
Messages : 32
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 : 32
Points : 12
Points : 12
@ 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
Gogia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 14h30   #5
Membre éprouvé
 
Homme Franck PRESSE
Inscription : août 2010
Messages : 202
Détails du profil
Informations personnelles :
Nom : Homme Franck PRESSE
Âge : 38
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : août 2010
Messages : 202
Points : 444
Points : 444
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.........
__________________
Cordialement,
Franck P.


Ps : n'oubliez pas de placer vos posts comme "résolus" () si tel est le cas...
pijaku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 14h41   #6
Candidat au titre de Membre du Club
 
Excusez mon français, ce n'est pas ma langue de base
Inscription : août 2011
Messages : 32
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 : 32
Points : 12
Points : 12
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!
Gogia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 14h51   #7
Membre éprouvé
 
Homme Franck PRESSE
Inscription : août 2010
Messages : 202
Détails du profil
Informations personnelles :
Nom : Homme Franck PRESSE
Âge : 38
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : août 2010
Messages : 202
Points : 444
Points : 444
Citation:
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...

Citation:
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...
__________________
Cordialement,
Franck P.


Ps : n'oubliez pas de placer vos posts comme "résolus" () si tel est le cas...
pijaku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 14h59   #8
Candidat au titre de Membre du Club
 
Excusez mon français, ce n'est pas ma langue de base
Inscription : août 2011
Messages : 32
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 : 32
Points : 12
Points : 12
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.
Gogia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h02   #9
Membre éprouvé
 
Homme Franck PRESSE
Inscription : août 2010
Messages : 202
Détails du profil
Informations personnelles :
Nom : Homme Franck PRESSE
Âge : 38
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : août 2010
Messages : 202
Points : 444
Points : 444
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?
__________________
Cordialement,
Franck P.


Ps : n'oubliez pas de placer vos posts comme "résolus" () si tel est le cas...
pijaku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h36   #10
Candidat au titre de Membre du Club
 
Excusez mon français, ce n'est pas ma langue de base
Inscription : août 2011
Messages : 32
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 : 32
Points : 12
Points : 12
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
Gogia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h54   #11
Membre confirmé
 
Inscription : juillet 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 209
Points : 219
Points : 219
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 :
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 ...
CodeFacile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 15h33   #12
Candidat au titre de Membre du Club
 
Excusez mon français, ce n'est pas ma langue de base
Inscription : août 2011
Messages : 32
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 : 32
Points : 12
Points : 12
CodeFacile,

Merci beaucoup et bon week-end!

Gogia
Gogia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h39.


 
 
 
 
Partenaires

Hébergement Web