Additionner des cellules de plusieurs fichiers

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 cherché 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, afin d'additionner la même cellule d'un onglet sur tous les classeurs. Malheureusement je n'y suis pas arriver. Quelqu'un aurait-il une idée svp?

Merci !

Bonjour

additionner des cellules d'une feuille en particulier de plusieurs classeurs dans un même fichier.

Plus de détails avec une explication

Dans plusieurs fichiers Excel, tu as une feuille qui porte le même nom et tous ces fichiers sont dans le même répertoire. C'est cela?

Cordialement

Bonjour,

Je vais avoir un nombre de classeurs excel inconnu (qui peut croitre ou décroitre).

Dans chaque classeur excel, une feuille m'intéresse et elle porte en effet le même nom sur chaque classeur (Plan forecast). Ma feuille où je veux le total de mes additions est déjà créé et possède le même format que mes feuilles Plan forecast.

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.

Merci

Bonjour

Quelques renseignements supplémentaires à fournir pour que je comprenne

  • Les fichiers sont ils dans le même répertoire ?
  • Les noms des fichier sont identiques ? (Toto 001, Toto 002 ..... etc)
  • Une seule cellule à récupérer ?
  • Si plusieurs : Est-ce une plage continue ?
  • Type de donnée à récupérer ? (texte, nombre ou un mixte)

- Et tout ce que tu trouveras utile à indiquer

Merci

A suivre

Bonjour Banzai64

les fichiers sont dans le même répertoire. Cepdant le nombre pourra croitre ou décroitre.

Les noms de fichiers ne seront pas semblables.

Pour chaque résultat il y aura une cellule à récupérer dans chaque fichier du même onglet.

Le type de donnée sera exclusivement numérique.

Mon fichier MARQUE - TOTAL possède un onglet Plan forecast. Cet onglet est présent dans les autres fichiers du dossier. Je ne trouve plus le site pour upload un fichier excel. Dès que je trouve je te monterai à quoi ressemble cette feuille.

Merci pour ton aide

Bonjour

Merci pour ces réponses

Si tu veux joindre un fichier tu peux si (< 200 Ko ) le mettre sur ce site

A suivre

86carita-total.zip (32.41 Ko)

Oui j'ai vu, j'ai donc enlever les onglets inutiles. Je joins le fichier et donc je veux combler les zones en rose !

En me renseignant un peu et grâce aux forums j'en étais arrivé à ceci:

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 <> "Carita - TOTAL.xls" Then Workbooks.Open chem & f1.Name 'ouvre le fichier
Next f1

'*****************
'calcul des totaux
'*****************
For Each cel In ThisWorkbook.Sheets("CARITA 2010 Mkt Plan FORECAST").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("CARITA 2010 Mkt Plan FORECAST").cel.Address) Then t = t + CDbl(cl.Sheets("CARITA 2010 Mkt 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
Next cl
End Sub

Cependant j'ai une erreur qui me dit Propriété ou méthode non générée par cet objet

Si vous pouviez m'aider s'il vous plait, merci !

Bonjour

Dans ton code

Il faut que tu modifies ces deux lignes

   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

par celles-ci

     If cel.Interior.ColorIndex = 38 Then 'condition 1 : si le couleur de fond de la cellule est rose
         For Each cl In Workbooks 'boucle 2 : sur tous les classeurs ouverts

A tester et reviens si soucis

Merci

J'ai une erreur au niveau de la deuxième boucle:

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

L'erreur est Objet requis, je comprends pas. Je pensais que c'était à cause des noms des onglets mais mes onglets portent le même nom donc je pense pas pouvoir me tromper

Bonjour

Tu n'as pas modifié les 2 lignes

Il manque le s à Workbooks

dans la ligne

      For Each cl In Workbooks 'boucle 2 : sur tous les classeurs ouverts

A re-tester

En effet j'avais pas vu le s, merci.

J'ai encore une erreur décidemment

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)

Bonjour

Bon alors modifies cette ligne

               If IsNumeric(cl.Sheets("CARITA 2010 Mkt Plan FORECAST").cel.Address) Then t = t + CDbl(cl.Sheets("CARITA 2010 Mkt Plan FORECAST").cel.Address)

par

                 If IsNumeric(cl.Sheets("CARITA 2010 Mkt Plan FORECAST").Range(cel.Address)) Then t = t + CDbl(cl.Sheets("CARITA 2010 Mkt Plan FORECAST").Range(cel.Address))

ensuite rajoutes cette ligne (en rouge) sinon tu vas avoir des surprises

Next cl 'prochain classeur de la boucle 2

cel.Value = t 'place t dans la cellule cel

t = 0

End If 'fin de la condition 1

En principe cela devra être bon

Si au départ j'avais eu des fichiers pour tester cela aurait pu aller plus vite

Merci beaucoup, ça marche c'est niquel je suis super content !

Problème réglé !

Rechercher des sujets similaires à "additionner fichiers"