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 :

Sommes de plusieurs fichiers excel pour avoir un seul fichier, total de chacune des cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut Sommes de plusieurs fichiers excel pour avoir un seul fichier, total de chacune des cellules
    Bonjour,
    Je me trouve dans une problématique où je veux faire la somme d’un nombre inconnu de fichiers Excel ayant un format similaire, chacun contenant plusieurs feuilles, dans le but d’avoir le total des sommes de leurs différentes cellules.
    Je ne suis pas un grand chef de la programation sur excel, cependant j'ai trouvé une piste qui me semble bonne dans le code ci-dessous.
    Pouriez vous m'éclairer s'il vous plaît ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    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 & "C:\Users\A145749\Downloads\New folder" '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 <> "TOTAL.xls" Then Workbooks.Open chem & f1.Name 'ouvre le fichier
    Next f1
     
    '*****************
    'calcul des totaux
    '*****************
    For Each cel In ThisWorkbook.Sheets("Sheet1").Range("A1:A10") 'boucle 1 : sur toutes les cellules cel de la plage A1:A10 de l'onglet "Feuil1" (tu adapteras le nom de l'onglet si il faut...)
       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
               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("Sheet1").cel.Address) Then t = t + CDbl(cl.Sheets("Sheet1").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
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une variante avec une boite de dialogue pour choisir les classeurs.
    Ici, les plages dans les différents classeurs sont sensé être identiques. Pour le test, je prend la zone utilisée (UsedRange) de chaque feuille. Toutes les cellules de chaque feuille de chaque classeur sont totalisées. Adapte...
    Pour lancer, curseur dans le code et F5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    Sub Test()
     
        Dim Cls As Workbook
        Dim Fe As Worksheet
        Dim Tbl() As String
        Dim TblTotal() As Double
        Dim Plage As Range
        Dim Retour As Integer
        Dim I As Integer
        Dim J As Long
        Dim K As Long
        Dim Ini As Boolean
     
        'affiche la boite de dialogue
        With Application.FileDialog(msoFileDialogFilePicker)
     
            'au moins un classeur doit être sélectionné sinon, fin...
            Retour = .Show
            If Retour = 0 Then Exit Sub
     
            'stocke les chemins et nom de fichier dans un tableau pour le bouclage
            For I = 1 To .SelectedItems.Count
     
                ReDim Preserve Tbl(1 To I)
                Tbl(I) = .SelectedItems(I)
     
            Next I
     
        End With
     
        'boucle sur les classeurs
        For I = 1 To UBound(Tbl)
     
            Set Cls = Workbooks.Open(Tbl(I))
     
            'boucle sur les feuilles du classeurs en cours
            For Each Fe In Cls.Worksheets
     
                'défini la plage sur la zone utilisée de la feuille en cours
                Set Plage = Fe.UsedRange
     
                'initialise le tableau seulement à l'ouverture du premier classeur et sur la première feuille
                If I = 1 And Ini = False Then
     
                    ReDim TblTotal(1 To Plage.Rows.Count, 1 To Plage.Columns.Count)
                    Ini = True
     
                End If
     
                'boucle sur les lignes
                For J = 1 To UBound(TblTotal, 1)
     
                    'boucle sur les colonnes
                    For K = 1 To UBound(TblTotal, 2)
     
                        'gère l'erreur d'un valeur non numérique ou autre (plus simple pour le test...)
                        On Error Resume Next
     
                        'totalise les cellules dans le tableau
                        TblTotal(J, K) = TblTotal(J, K) + Plage(J, K)
     
                    Next K
     
                Next J
     
            Next Fe
     
            'ferme le classeur en cours
            Cls.Close False
     
        Next I
     
        'affiche les résultat dans la feuille active de A1 à Xx...
        With ActiveSheet
     
            .Range(.Cells(1, 1), .Cells(UBound(TblTotal, 1), UBound(TblTotal, 2))) = TblTotal
     
        End With
     
    End Sub
    Hervé.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Bonjour Hervé,

    Merci pour ta réponse, je ne crois pas avoir tout cerné ce que tu me proposes de faire.
    En gros, je dois dire où se situe chacune des cellules numériques, et la macro sera capable de les additionner dans un fichier type, je me trompe ?

    Ci-joint un fichier type, pour être plus précis mon objectif est de faire la somme des cellules où il y a une cotation (valeur 1 à chaque fois) des différents fichiers types

    Bonne journée à toi ainsi qu'à la communauté
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,
    En gros, je dois dire où se situe chacune des cellules numériques, et la macro sera capable de les additionner dans un fichier type, je me trompe ?
    Tu ne te trompe pas, si tu veux faire la somme de certaines cellules de chaque feuille de chaque classeur, il est évident qu'il faut indiquer au compilateur lesquelles prendre en compte !
    Donc, il faut préciser quelle(s) feuille(s) de chaque classeur, puis quelle(s) cellule(s) de chaque feuille doit ou doivent être prise(s) en compte.
    Pour l'instant, tes explications sont trop vagues. Le code que je t'ai posté est un exemple, il t'est demandé de choisir sur le disque le ou les classeurs que tu veux prendre en compte et toujours pour l'exemple, la somme de chaque cellule utilisée de chaque feuille est faite dans un tableau et à la fin, ce tableau est inséré dans la feuille active du classeur contenant la macro.

    Hervé.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Bonjour,

    Je vous remercie encore un fois Hervé, vous m'apportez une grande aide. Et étant actuellement novice, je ne comprends pas tout à Excel. Cependant, vous avez largement compris ce que je veux faire.

    Ma question à votre réponse qui va surement vous parraitre bête est : "comment indiquer au compilateur ce qu'il doit prendre en compte ?"

    Mes salutations

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    "comment indiquer au compilateur ce qu'il doit prendre en compte ?"
    Et bien, dis moi déjà les feuilles et cellules que tu souhaite prendre en compte et ensuite, j'essaierai de t'aider (ces quatre jours je ne serai pas là)

    Hervé.

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

Discussions similaires

  1. [XL-2003] Création d'un fichier Excel à chaque rupture d'un fichier Excel de référence.
    Par Richard_35 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 21/06/2025, 10h57
  2. [XL-2010] copier depuis des fichiers excel identiques vers un seul fichier excel sous vba
    Par fleur-d'orient dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2015, 17h29
  3. Macro pour créer plusieurs tables access a partir d'un fichier Excel
    Par jonathan810 dans le forum Macros Access
    Réponses: 6
    Dernier message: 02/05/2013, 15h01
  4. Réponses: 1
    Dernier message: 28/02/2012, 18h30
  5. Réponses: 5
    Dernier message: 22/04/2011, 20h54

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