Additionner des cellules de plusieurs fichiers

shenmicke

XLDnaute Junior
Bonjour,

j'aimerai réaliser une petite maccro pour additionner des cellules d'une feuille en particulier de plusieurs classeurs dans un même fichier.
Je sais qu'on peut faire avec la concaténation, mais le fait est que je ne connaitrais pas le nombre de fichier qu'il y aura. Donc je pense que je n'ai pas le choix et que je vais devoir passer par une macro. Etant débutant je demande votre aide sachant que j'ai un peu chercher et que je butte sur ce problème depuis quelques jours.
Voici ce dont j'ai trouvé :

Option Explicit

Public Function Cumul() As Double
Dim Ws As Worksheet
Dim Total As Double
Application.Volatile
Total = 0
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "TOTAUX" Then
If IsNumeric(Ws.Cells(3, 7)) Then
Total = Total + CDbl(Ws.Cells(3, 7))
End If
End If
Next Ws
Cumul = Total
End Function

Ceci est censé faire la somme d'une cellule des feuilles d'un classeur. Ce qui répond presque à mes attentes. J'ai tenté de modifier la chose mais j'arrive pas à la faire fonctionner. Quelqu'un aurait-il une idée svp?
Merci !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Additionner des cellules de plusieurs fichiers

Bonjour Shenmicke, bonjour le forum,

Le code que tu as récupéré n'est pas une macro mais une fonction personnalisée. Elle fait le total des cellules G3 de tous le onglets d'un classeur (sauf de l'onglet nommé TOTAUX). Il te suffit d'écrire dans n'importe quelle cellule :
Code:
=cumul()
et le résultat apparaîtra...

Maitenant, on peut aussi la transformer en macro mais il faut préciser dans quel onglet et quelle cellule de cet onglet tu veux le résultat. Si c'est dans l'onglet TOTAUX en G3, ça donnerait :
Code:
Sub Cumul()
Dim Ws As Worksheet
Dim Total As Double
 
Total = 0
For Each Ws In Worksheets
    If Ws.Name <> "TOTAUX" Then
        If IsNumeric(Ws.Cells(3, 7)) Then Total = Total + CDbl(Ws.Cells(3, 7))
    End If
Next Ws
Sheets("TOTAUX").Range("G3") = Total
End Sub
 

shenmicke

XLDnaute Junior
Re : Additionner des cellules de plusieurs fichiers

Bonjour Robert, merci pour ton aide !
Dans mon fichier MARQUE - TOTAL onglet Plan forecast, je vais avoir quelque chose comme 500 lignes et quelques colonnes à remplir.
Par exemple ma première cellule à remplir serait L10. Donc j'aimerai additionner toutes les cellules L10 de mes fichiers excel des onglets Plan forecast. Et par la suite passer à la cellule d'après.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Additionner des cellules de plusieurs fichiers

Bonjour Shenmicke, bonjour le forum,

Alors attends parce que là je ne comprends plus. Pour moi un fichier ou un classeur c'est la même chose. Tout comme un onglet et une feuille. Un classeur/fichier est composé de plusieurs onglets/feuilles...

Tu veux additionner la cellule L10 de tous les onglets du classeurs MARQUE - TOTAL.xls ? Où veux-tu ce résulat ? quel onglet, quelle cellule ?

Tu veux additionner la cellule L10 de tous les onglets Plan forecast de plusieurs classeurs ? Dans quel classeur, quel onglet de ce classeur, quelle cellule de cet onglet tu veux le résultat. Oú se trouve les classeurs (quel dossier), faut-il prendre en compte tous les classeurs de ce dossier ?

Tu vois, ce n'est pas clair car j'ai l'impression que nous n'interprétons pas de la même manière les mots classeur et fichier, onglet et feuille...
 

shenmicke

XLDnaute Junior
Re : Additionner des cellules de plusieurs fichiers

Ah je suis désolé ! je retente de formuler tout ça.
Mon objectif est d'additionner toutes les cellules L10 de tous les onglets Plan forecast des fichiers excel de mon dossier. Le résultat se trouvera dans mon fichier MARQUE - TOTAL dans l'onglet Plan forecast.
Encore désolé et merci pour ton aide
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Additionner des cellules de plusieurs fichiers

Bonjour Shenmicke, bonjour le forum,

je te porpose la macro ci-dessous à placer dans le classeur MARQUE - TOTAL.xls.
(Si un fichier n'as pas d'onglet Plan forecast ça va planter...) :

Code:
Sub Macro1()
Dim chem As String 'déclare la variable chem (CHEMin d accès)
Dim fs, d, f1, fd 'déclare les variables fs, d, f1 et fd
Dim t As Double 'déclare la variable t (Total)
 
chem = ThisWorkbook.Path & "\" 'définit le chemin
Set fs = CreateObject("Scripting.FileSystemObject") 'définit la variable fs (Fichiers Système)
Set d = fs.GetFolder(chem) 'definit la variable d (dossier)
Set fd = d.Files 'définit la variable fd (Fichiers du Dossier)
For Each f1 In fd 'boucle sur tous les fichier du dossier
    If f1.Name <> "MARQUE - TOTAL.xls" Then 'condition : si le nom du fichier est différent de "MARQUE - TOTAL.xls"
        Workbooks.Open chem & f1.Name 'ouvre le fichier
        'actualise la variable t si la cellule L10 de l'onglet "Plan forecast" est numérique
        If IsNumeric(Workbooks(f1.Name).Sheets("Plan forecast").Range("L10").Value) Then t = t + CDbl(Workbooks(f1.Name).Sheets("Plan forecast").Range("L10"))
        Workbooks(f1.Name).Close SaveChanges:=False 'ferme le classeur
    End If 'fin de la condition
Next f1 'prochain classeur du dossier
Sheets("Plan forecast").Range("L10") = t 'place en L10 de l'onglet "Plan forecast" le total
End Sub
Désolé je ne sais pas faire sans ouvrir les classeurs...
 

shenmicke

XLDnaute Junior
Re : Additionner des cellules de plusieurs fichiers

Merci beaucoup Robert, celà marche très bien pour une cellule!
Si je veux par la suite lancer sur les autres cellules la même macro, comment dois-je m'y prendre? Je vais faire une macro par cellule? ou peut être faire une macro pour une zone et au pire supprimer à la main les cases inutiles?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Additionner des cellules de plusieurs fichiers

Bonjour Shenmicke, bonjour le forum,

Peut-être avec une boucle mais attends j'ai un pote accoucheur je vais lui demander ses forceps pour que tu me daignes me dire de quelles cellules il s'agit... Qu'est-ce qu'on perd comme temps avec des explications insuffisantes !!!!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Additionner des cellules de plusieurs fichiers

Bonjour Shenmicke, bonjour le forum,

P... Shenmicke tu peux pas faire un petit effort non ! Je vois quoi dans ton fichier si ce n'est des couleurs. Tu veux appliquer ça à toutes les cellules en rose ? Soit explicite m... parce que là tu me fais carrément craquer...
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Additionner des cellules de plusieurs fichiers

Bonjour Shenmicke, bonjour le forum,

Essaie comme ça mais après j'abandonne... Ça risque d'être longuet vu le nombre de cellules...
Code:
Sub Macro1()
Dim chem As String 'déclare la variable chem (CHEMin d accès)
Dim fs, d, f1, fd 'déclare les variables fs, d, f1 et fd
Dim cel As Range 'déclare la variable cel (CELlule)
Dim cl As Workbook 'déclare la varaible cl (CLasseur)
Dim t As Double 'déclare la variable t (Total)
 
'***********************
'ouverture des classeurs
'***********************
chem = ThisWorkbook.Path & "\" 'définit le chemin
Set fs = CreateObject("Scripting.FileSystemObject") 'définit la variable fs (Fichiers Système)
Set d = fs.GetFolder(chem) 'definit la variable d (dossier)
Set fd = d.Files 'définit la variable fd (Fichiers du Dossier)
For Each f1 In fd 'boucle sur tous les fichier du dossier
    If f1.Name <> "MARQUE - TOTAL.xls" Then Workbooks.Open chem & f1.Name 'ouvre le fichier
Next f1
 
'*****************
'calcul des totaux
'*****************
For Each cel In ThisWorkbook.Sheets("Feuil1").Range("L10:Q501") 'boucle 1 : sur toutes les cellules cel de la plage L10:Q501 de l'onglet "Feuil1" (tu adapteras le nom de l'onglet si il faut...)
    If cel.ColorIndex = 38 Then 'condition 1 : si le couleur de fond de la cellule est rose
        For Each cl In Workbook 'boucle 2 : sur tous les classeurs ouverts
            If cl.Name <> ThisWorkbook.Name Then 'condition 2 : si le nom du classseur est différent du nom de celui-ci
                'redéfinit la variable t si la cellule correspondante est numérique
                If IsNumeric(cl.Sheets("Plan forecast").cel.Address) Then t = t + CDbl(cl.Sheets("Plan forecast").cel.Address)
            End If 'fin de la condition 2
        Next cl 'prochain classeur de la boucle 2
        cel.Value = t 'place t dans la cellule cel
    End If 'fin de la condition 1
Next cel 'prochaine cellul cel de la boucle 1
 
'***********************
'fermeture des classeurs
'***********************
For Each cl In Workbooks
    If cl.Name <> ThisWorkbook.Name Then cl.Close SaveChanges:=False 'ferme le fichier
nexy cl
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Additionner des cellules de plusieurs fichiers

Bonjour Shenmicke, bonjour le forum,

J'ai relu et j'ai vu une erreur ici :
If cel.ColorIndex..., remplace par If cel.Interior.ColorIndex. Mais je ne peux pas tester la macro sinon il me faudrait recréer tous les fichiers et ça j'avoue que j'ai la flemme grave...
Et si, par hasard, tu as une autre erreur, tu serais gentil de signaler dans quelle ligne ça plante... Heureusement j'ai toujours pas rendu les forceps à mon pote...
 

shenmicke

XLDnaute Junior
Re : Additionner des cellules de plusieurs fichiers

Merci
J'ai une erreur au niveau à la ligne 27:

Propriété ou méthode non gérée par cet objet, à ce niveau:

If IsNumeric(cl.Sheets("CARITA 2010 Mkt Plan FORECAST").cel.Address) Then t = t + CDbl(cl.Sheets("CARITA 2010 Mkt Plan FORECAST").cel.Address)
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
335

Statistiques des forums

Discussions
312 356
Messages
2 087 561
Membres
103 590
dernier inscrit
Picsou74