A propos VBA Excel

Bonjour,
j'ai un fichier qui contien des données brut contenant des mesures OMC dont la taille est trés grande environ "10 giga"
je pu le decomposer en des fichiers excel de petite taille contenant l'ensemble des informations bien sur les informations sont en continuité
Le fichier contien des date, des compteurs (heure,minute,secondes,millième de secondes), des caractères, des symboles (%,_,-,...) bref tous
Problèmes:
je voudrai utiliser le VBA sous excel pour lire l'ensemble des fichiers que j'ai enregistrer sous les noms "test1, test2,test3,...testn" choisir la colonne sur laquelle je veut travailler "la colonne va se poursuivre sur tous les autres fichiers " c'est à dire elle commence de test1 et fini avec testn.
Une fois le fichier lu je voudrai réaliser des opérations telque "somme, soustraction,division,..."
Je veut faire ces opération en mettant des conditions c'est a dire pour une colonne si on arrive a une certaine positions on arrete le calcul.

1 partie : lire la colonne de la variable voulu dans tous les fichiers d'une facon successive
2 parite: realiser une soustraction entre deux colonnes B1 et D1 avec la condition que si on arrive a une certaine possition on fé la somme des valeurs trouvé et on divise/3600
la forme des deux colonnes et la suivante (0:00:01:338,0:00:01:328) c'est a dire je lit ces deux colonnes chacune a part je fé la soustraction entre la date de fin et la date d'arrivé et si j'arrive à la fin de chaque heure 0:01:00:000 je fé sortir la somme de la différence/3600
3 partie représenter les point obtenu par des bar
MErci et si il y 'a quelqu'un qui a une solution je voudrai bien lui donnée tous les detail nécessaire meme l'exemple du fichier que je veut traiter
Configuration: Windows XP
Internet Explorer 7.0

19 réponses

Résumé de la discussion

Problématique centrale : des données brutes réparties sur des fichiers test1 à testn doivent être lues colonne par colonne via VBA, puis soumises à des opérations avec des conditions d’arrêt. Plusieurs réponses proposent de définir variables et d’utiliser Offset pour cibler la colonne souhaitée, puis d’agréger les données filtrées et de diviser la somme par 3600 avant d’écrire le résultat. Certains répondants évoquent l’ouverture séquentielle des classeurs, la création d’un fichier global et l’empilement des résultats via une boucle, ou l’utilisation d’un filtre automatique pour cibler des plages horaires. En cas de difficulté, détails techniques apparaissent sur les liens entre feuilles et les erreurs REF lors des fermetures, avec des conseils de débogage pas à pas pour préciser les causes.

Bobot (l’IA à votre service)
  1. Contributeur
    bonjour

    Comme c'est une application complète et très conséquente que tu cherches à faire, c'est difficile de te fournir un canevas précis car il faudrait qu'il tienne compte de la structure des données précise qu'il difficile d'appréhender sans avoir les classeurs.

    C'est un développement tout de même assez conséquent à faire car il faut gérer les classeurs (fermés probablement)
    et créer une structure de classeur pour gérer les regroupements effectués.

    Bon courage.
    0
    1. Bonjour,

      Quelques suggestions ...

      Comme toute solution algorithmique, il est souhaitable de décomposer les étapes une par une.
      " Diviser pour mieux règner ".

      1.) Établir la structure des données visé, et créér un objet de type personnalisé pour la manipulation.
      2.) Repérer le répertoire visé contenant tous les fichiers Excels.
      3.) Faire une boucle pour ouvrir/fermer tous les fichiers du répertoire.
      4.) Inclure dans la boucle une fonction de lecture d'une partie du classeur.
      5.) Dans la fonction de lecture, inclure une sous-fonction pour le calcul
      6.) Dans la fonction de lecture, inclure une sous-fonction pour les manipulations.

      Ma méthode est toujours basé sur le concept des poupées russes.

      Très petite poupée dans Petite poupée
      Petite poupée dans Poupéé
      Poupée dans Grande poupée
      Grande poupée dans Très grande poupée.

      Donc il n'est pas facile d'ouvrir la Très petite poupée sans avoir au préalable ouvert
      toute les autres. Il faut donc commencer par ouvrir la Très grande poupée.

      Il en est de même en programmation, procède par étape en commençant par la chose
      la plus simple à faire, jusqu'a te rendre à la plus complexe.

      Structure de données :

      [ date, des compteurs (heure,minute,secondes,millième de secondes), des caractères, des symboles (%,_,-,...) ]

      exemple type sur la lecture des données

      Option Explicit
      
      Type MonData
              LaDate As Date
              LeCompteur As Long
              Lheure As Long
              LaMinute As Long
              LaSeconde As Long
              LaMilliSeconde As Long
              LeCaractere As String
              LeSymbole As String
      End Type
      
      Dim Boite() As MonData
      
      Sub Lecture()
      
          Dim Plage As Range, Cellule As Range, Compteur As Long
          
          Set Plage = Range("A1:A100")
          
          Compteur = 0
          For Each Cellule In Plage
              Compteur = (Compteur + 1)
              ReDim Preserve Boite(Compteur)
              Boite(Compteur - 1).LaDate = Cellule.Offset(0, 0).Value
              Boite(Compteur - 1).Lheure = Cellule.Offset(0, 1).Value
              Boite(Compteur - 1).LaMinute = Cellule.Offset(0, 2).Value
              Boite(Compteur - 1).LaSeconde = Cellule.Offset(0, 3).Value
              Boite(Compteur - 1).LaMilliSeconde = Cellule.Offset(0, 4).Value
              Boite(Compteur - 1).LeCaractere = Cellule.Offset(0, 5).Value
              Boite(Compteur - 1).LeSymbole = Cellule.Offset(0, 6).Value
          Next Cellule
          
          Call CalculPerso
          
      End Sub
      '
      
      Sub CalculPerso()
      
          Dim Boucle As Long
          
          For Boucle = 0 To (UBound(Boite) - 1)
              ' Manuipulation et/ou calcul
          Next Boucle
          
      End Sub
      '
      


      Lupin
      0
      1. Merci je vé l'essayer et je t'envéré le résultat le plus tot et encore un grand merci pour votre aide
        je suis débutant dans VBA excel si vous pouvez me guidé dans les étapes qui consiste à passer de excel pour créer ce code
        j'utilise Excel 2007
        pour moi je fé comme ca:
        dans la feuille excel sur laquelle je travaille j'utilise le bouton qui bascule vers l'interface VB
        il y a a gauche la stucture sheet1, sheet2,... et this workbook
        j'appui dessu deux fois une feuille VB s'ouvre pour m'indiquer ce code
        Private Sub Workbook_Open()

        End Sub
        est ce que j'introduit votre code dans cette partie ou comment je fé?
        merci
        0
    2. re :

      Il me sera difficile de te guider n'ayant pas encore la version 2007, je suis actuellement
      sour la version 2002. Toutefois voici quelques trucs.

      Il te faudra trouver comment lancer l'enregistreur de macro et apprendre à l'utiliser.

      Sous la version 2002 :

      // Menu Excel / Outils / Nouvelle macro ...

      Donc en procédant par étape, pas à pas, tu lance l'enregistreur de macro,
      une nouvelle barre d'outils apparaît qui te permettra d'arrêter l'enregistrement.
      Tu effectue quelques étapes que tu veux automatiser (pas trop à la fois).

      Ensuite tu va dans l'editeur VBE.

      // Menu Excel / Outils / Visual Basic Editor

      Dans le nouvelle fenêtre, dans la partie de gauche, tu repère le nom de ton classeur de base
      et sous celui-ci tu y trouveras un module portant généralement le nom de [ Module1 ]

      Un double clic ouvrira dans le partie de droit la ou les macros enregistrer.

      Effectue un copier/coller du code ici, et je ferai ce que je peux. Il est à noter
      que je ne suis pas toujours disponible, mais je fais ce que je peux :-)

      Lupin
      0
      1. Vrément un grand merci d'avoir consacré un peut de votre temps pour m'aider
        bon j'ai essayer de tester le code ca a pas marché il y a affichage de quelques erreures que j'ai essayer de resoudre
        et j'ai pas pu
        donc je vous envoi en attache un exemple du fichier que je traite c'est une petite partie parceque le fichier que je traite a une taille de 10giga
        donc s'il vous plait si vous pouvez faire quelque chose
        merci et mille fois merci
        je voulais t'envoyé une partie du fichier pour le voire si vous pouvez me donné votre mail ainsi je pourrer t'envoié ce fichier
        0
        1. Bonjour,

          Malheureusement, à cause des problèmes soulevés par le SPAM,
          je conserve mon adresse courriel confidentiel.

          Mais as-tu réussit a déclencher l'enregistreur de macro et de généré
          ainsi du code, si oui fait un copier/coller du code ici, je regarderai
          comment je puis t'aider.

          Lupin
          0
          1. Salut
            merci de m'avoir répondu tout le temps j'ai reussi a faire un script qui permet de lire les feuille contenu dans un meme calsseur et de faire le calcul que je veut
            mais le problème qui reste c'est mes fichiers excel sont séparés et c'est moi qui fé le copier coller pour les mettre dans un meme classeur ce qui est génant donc je voudrai bien automatisé les chose et applée les fichiers direct et eeffectué dessu les opérations que je veut et afficher les reultat dans la première feuille
            voici le code que j'utilise
            Sub trafcalc()
            '
            ' trafcalc Macro
            '

            '
            'calcul dans la feuille 1 pour les valeurs inferieurs et égale à une heure

            ActiveSheet.Range("$A$6:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            "<0:01:00:004"
            Range("AP2").Select
            ActiveCell.FormulaR1C1 = "=SUM(C[-37])/3600"

            'calcul dans la feuille 1 pour la deuxième heure Combinaison entre la feuille 1,, 2 et 3

            Sheets("test1").Select

            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:01:00:004", Operator:=xlAnd, Criteria2:="<0:02:00:000"

            Sheets("Feuil1").Select

            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:01:00:004", Operator:=xlAnd, Criteria2:="<0:02:00:000"
            Sheets("Feuil2").Select
            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:01:00:004", Operator:=xlAnd, Criteria2:="<0:02:00:000"

            Sheets("test1").Select
            Range("AP3").Select
            ActiveCell.FormulaR1C1 = "=(SUM(Feuil2!C[-37])+SUM(Feuil1!C[-37])+SUM(test1!C[-37]))/3600"
            'calcul dans la feuille 1 pour la Troisième heure Combinaison entre la feuille 2,,3,,4

            Sheets("Feuil2").Select
            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:02:00:000", Operator:=xlAnd, Criteria2:="<0:03:00:000"
            Sheets("Feuil3").Select
            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:02:00:000", Operator:=xlAnd, Criteria2:="<0:03:00:000"
            Sheets("Feuil4").Select
            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:02:00:000", Operator:=xlAnd, Criteria2:="<0:03:00:000"

            Sheets("test1").Select
            Range("AP4").Select
            ActiveCell.FormulaR1C1 = "=(SUM(Feuil2!C[-37])+SUM(Feuil3!C[-37])+SUM(Feuil4!C[-37]))/3600"
            'calcul dans la feuille pour la quatrième heure Combinaison entre la feuille 2,,3,,4

            Sheets("Feuil3").Select

            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:03:00:000", Operator:=xlAnd, Criteria2:="<0:04:00:000"

            Sheets("Feuil4").Select

            ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            ">0:03:00:000", Operator:=xlAnd, Criteria2:="<0:04:00:000"

            Sheets("test1").Select
            Range("AP5").Select
            ActiveCell.FormulaR1C1 = "=(SUM(Feuil3!C[-37])+SUM(Feuil4!C[-37]))/3600"
            End Sub

            mille merci de m'aider
            0
        2. Bonjour,

          Première observation :

          Il n'est pas nécessaire de spécifier la feuille lorsque cell-ci est sélectionné.

              Sheets("Feuil2").Select 
              ActiveSheet.Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _ 
                  ">0:02:00:000", Operator:=xlAnd, Criteria2:="<0:03:00:000" 
          


          peut se simplifier par :

              Sheets("Feuil2").Select 
              Range("$A$1:$AN$10000").AutoFilter Field:=2, Criteria1:= _ 
                  ">0:02:00:000", Operator:=xlAnd, Criteria2:="<0:03:00:000" 
          


          Et voici un code déjà pondu antérieurement qui permet de sélectionner un dossier cible
          et d'ouvrir les fichier Excel un à un afin d'en importer le contenu (copier/coller).

          Celui-ci bien sur n'est pas codé spécifiquement pour vos besoins, mais constitue une
          bonne base pour effectuer ce que vous souhaité réalisé.

          Option Explicit
          
          Const cteExcel = ".xls"
          Const cte_Fle = "NomDeFeuilleACopier"
          Const cte_Global = "FichierGlobal.xls"
          
          Private Const BIF_RETURNONLYFSDIRS = 1
          Private Const BIF_DONTGOBELOWDOMAIN = 2
          
          Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
          Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
              ByVal lpBuffer As String) As Long
          Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
              ByVal lpString2 As String) As Long
          
          Private Type BrowseInfo
              hWndOwner As Long
              pIDLRoot As Long
              pszDisplayName As Long
              lpszTitle As Long
               ulFlags As Long
              lpfnCallback As Long
              lParam As Long
              iImage As Long
          End Type
          '
          
          Sub ImporteClasseurs()
          
              Dim NomFichier As String, NomRepertoire As String
              Dim NomLecteur As String, ListeFichiers() As String
              Dim varFichier As Variant, Boucle As Long
              Dim Repertoire As String, Message As String
              Dim Reponse As Boolean
              
              Application.ScreenUpdating = False
              Application.DisplayAlerts = False
              
              NomRepertoire = SelectFolder("Sélectionner le répertoire des fichiers Excel à importer :", 0)
              NomLecteur = Mid(NomRepertoire, 1, 1)
              ChDrive (NomLecteur)
              Repertoire = Mid(NomRepertoire, 3)
              ChDir (Repertoire)
              
              Boucle = 0
              varFichier = Dir("*" & cteExcel, vbDirectory)
              Do While varFichier <> ""
                  If ((varFichier <> ".") And (varFichier <> "..")) Then
                      If Not ((GetAttr(varFichier) And vbDirectory) = vbDirectory) Then
                          Boucle = (Boucle + 1)
                          ReDim Preserve ListeFichiers(Boucle)
                          ListeFichiers(Boucle - 1) = varFichier
                      End If
                  End If
                  varFichier = Dir
              Loop
              
              If (UBound(ListeFichiers) > 0) Then
                  Application.Workbooks.Add
                  ActiveWorkbook.SaveAs cte_Cumul_Global
                  Reponse = EnteteColonne(ListeFichiers(0))
                  If (Reponse) Then
                      ActiveWorkbook.SaveAs cte_Global
                      For Boucle = 0 To UBound(ListeFichiers) - 1
                          ImporteFichier ListeFichiers(Boucle)
                      Next Boucle
                      ActiveWorkbook.SaveAs cte_Global
              Else
                  Message = ""
                  Message = Message & "Aucun fichier n'a été trouvé" & vbLf
                  Message = Message & "dans le répertoire cible !" & vbLf
                  Message = Message & vbLf
                  Message = Message & "Vérifié et corriger la situation." & vbLf
                  Message = Message & vbLf
                  MsgBox Message
              End If
              
              Application.DisplayAlerts = True
              Application.ScreenUpdating = True
              
          End Sub
          '
          
          Private Function ImporteFichier(ByVal NomClasseur As String)
          
              Dim strNomFle As String, Limite As Long, Position As Long
              Dim Reponse As Boolean
          
              Application.EnableEvents = False
              Workbooks.Open Filename:=NomClasseur
              Application.EnableEvents = True
              Reponse = ChercheFeuille(strNomFle)
              If (Reponse) Then
                  Sheets(strNomFle).Select
                  Limite = Range("A65536").End(xlUp).Row
                  Rows("2:" & Limite).Select
                  Selection.Copy
                  Workbooks(cte_Global).Activate
                  Position = (Range("A65536").End(xlUp).Row + 1)
                  Range("A" & Position).Select
                  ActiveSheet.Paste
                  Application.CutCopyMode = False
                  Range("A1").Select
                  Workbooks(NomClasseur).Activate
                  ActiveWorkbook.Close
              End If
              
          End Function
          '
          
          Private Function ChercheFeuille(ByRef NomFle As String) As Boolean
          
              Dim fleFeuille As Worksheet
              
              For Each fleFeuille In Worksheets
                  If (InStr(1, fleFeuille.Name, cte_Fle, vbTextCompare) > 0) Then
                      NomFle = fleFeuille.Name
                      ChercheFeuille = True
                      Exit For
                  End If
              Next
          
          End Function
          '
          
          Private Function SelectFolder(Titre As String, Handle As Long) As String
          
              Dim lpIDList As Long, strBuffer As String
              Dim strTitre As String, tBrowseInfo As BrowseInfo
              
              strTitre = Titre
              With tBrowseInfo
                  .hWndOwner = Handle
                  .lpszTitle = lstrcat(strTitre, "")
                  .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
              End With
              
              lpIDList = SHBrowseForFolder(tBrowseInfo)
              
              If (lpIDList) Then
                  strBuffer = String(260, vbNullChar)
                  SHGetPathFromIDList lpIDList, strBuffer
                  SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
              End If
          
          End Function
          '
          


          Poser les questions qui vous viendront à l'esprit et je tenterai d'y répondre, un pas à la fois
          car je ne suis pas toujours connecter sur commentcamarche.

          Lupin
          0
          1. salut
            bon j'ai testé le programme il marche mais j'ai du enlevé ces deux lignes dans la partie Sub ImporteClasseurs()

            cte_Cumul_Global
            Reponse = EnteteColonne(ListeFichiers(0))

            parceque ils ne sont pas defini

            une fois exécuté il me donne la main pour choisir le dossier dans lequel il y a les fichiers, il crée un fichier nommé fichierglobal mais qui est vide et il me dit qu'il a pas trouvé auncun fichier xls dans le repertoire sepécifié

            Que faire ??
            MErci
            0
          2. salut
            Merci pour le programme
            je les tester il y a dans la sub (Sub ImporteClasseurs())
            pour que ca fonctionne j'ai du supprimer ces deux lignes
            cte_Cumul_Global
            Reponse = EnteteColonne(ListeFichiers(0))

            parceque ils ne sont pas defini

            l'exécution aprés me donne la main pour choisir le dossier dans lequels il y a les fichiers a traiter
            mais aprés il crée un nouveau classeur appelé Fichierglobal mais qui est vide et me dit que
            Aucun fichier n'a été trouvé"
            "dans le répertoire cible
            "Vérifié et corriger la situation
            que faire ???
            Merci
            0
        3. re :

          Effectivement la partie :

              If (UBound(ListeFichiers) > 0) Then
                  Application.Workbooks.Add
                  ActiveWorkbook.SaveAs cte_Cumul_Global
                  Reponse = EnteteColonne(ListeFichiers(0))
                  If (Reponse) Then
                      ActiveWorkbook.SaveAs cte_Global
                      For Boucle = 0 To UBound(ListeFichiers) - 1
                          ImporteFichier ListeFichiers(Boucle)
                      Next Boucle
                      ActiveWorkbook.SaveAs cte_Global
              Else
                  Message = ""
                  Message = Message & "Aucun fichier n'a été trouvé" & vbLf
                  Message = Message & "dans le répertoire cible !" & vbLf
                  Message = Message & vbLf
                  Message = Message & "Vérifié et corriger la situation." & vbLf
                  Message = Message & vbLf
                  Message = Message & "Merci de votre attention." & vbLf
                  Message = Message & vbLf
                  MsgBox Message
              End If
          

          doit être remplacé par :
              If (UBound(ListeFichiers) > 0) Then
                  Application.Workbooks.Add
                  ActiveWorkbook.SaveAs cte_Global
                  For Boucle = 0 To UBound(ListeFichiers) - 1
                      ImporteFichier ListeFichiers(Boucle)
                  Next Boucle
                  ActiveWorkbook.SaveAs cte_Global
              Else
                  Message = ""
                  Message = Message & "Aucun fichier n'a été trouvé" & vbLf
                  Message = Message & "dans le répertoire cible !" & vbLf
                  Message = Message & vbLf
                  Message = Message & "Vérifié et corriger la situation." & vbLf
                  Message = Message & vbLf
                  Message = Message & "Merci de votre attention." & vbLf
                  Message = Message & vbLf
                  MsgBox Message
              End If
          


          C'est dans cette section qu'il créé la liste des fichiers Excel trouvés :
              Boucle = 0
              ' Ici le recherche cible seulement les fichier de type [ .xls ] -> ref.: [ cteExcel ]
              varFichier = Dir("*" & cteExcel, vbDirectory)
              Do While varFichier <> ""
                  If ((varFichier <> ".") And (varFichier <> "..")) Then
                      If Not ((GetAttr(varFichier) And vbDirectory) = vbDirectory) Then
                          Boucle = (Boucle + 1)
                          ReDim Preserve ListeFichiers(Boucle)
                          ListeFichiers(Boucle - 1) = varFichier
                      End If
                  End If
                  varFichier = Dir
              Loop
          


          sous Excel 2002, cette partie fonctionne très bien ???

          Exécute la routine en mode pas à pas !

          // Menu Excel / Outils / Macro...
          Sélectionne le bouton [ Pas à pas détaillé ].

          en survolant les variables avec la souris, une infobulle apparaît avec le contenu de la variable.
          de plus tu peux ajouter un espion sur la variable.

          Clic droit sur la variable / Sélectionne [ Ajouter un espion... ].

          Tel que spécifié dans l'un de mes messages précédent, je ne connais pas les variantes
          de Excel 2007. Il te faudra fouillé un peu [ Google ]

          Lupin
          0
          1. Bonjour
            Mille Merci pour le programme que vous am'avez donné il foctionne trés bien
            mais je voudrais si possible ne pas ouvrir mes fichiers Excels parceque j'ai essayer de les ouvrir il prenne trop de temps puisque leurs taille est trop grande Donc il vaut mieux les lire sans les ouvrir pour
            aprés les avoir lu automatiquement toute la totalité des fichiers je vé appliqué dessu le calcul suivant qui consiste a lire chaque fichier faire un filtre sur les durée de connection pour chaque heure et faire un calcul qui sera affiché dans les AP1...APN N est le (nombre de fichier) du classeur Test1
            dans le programme ci dessous j'ai mis la totalité des fichiers pour la raison que je sais pas ou fini chaque heure de connection et dans quel fichier voici un exemple du format que je traite
            0:00:01:338
            0:00:01:396
            0:00:01:506
            0:00:01:555
            0:00:01:599
            0:00:01:760
            0:00:01:966
            0:00:02:033
            0:00:02:138

            puisque je maitrise pas trop le VBA j'ai pas su faire une boucle pour faire en meme temps le filtrage et le calcul
            S'il vous si vous pouvez m'aider comme d'habitude et vraiment je sais plus comment vous remercié
            mon mail c'est aymen.ayari@gmail.com si vous voulez me contacter directement

            le programme que j'ai fé est le suivant

            Sub calcul()
            '
            ' calcul Macro
            '

            '

            'calcul pour la premiere heure

            ActiveSheet.Range("$A$6:$AN$10000").AutoFilter Field:=2, Criteria1:= _
            "<1:00:00:000", Operator:=xlAnd
            Range("AP2").Select
            ActiveCell.FormulaR1C1 = "=(SUM(C[-37]))/3600"

            'calcul pour la deuxième heure

            Windows("test1.xls").Activate
            Range("AP3").Select

            Windows("test2.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">1:00:00:000", Operator:=xlAnd, Criteria2:="<2:00:00:000"

            Windows("test1.xls").Activate
            ActiveCell.FormulaR1C1 = "=(SUM(test1.xls!C5)+SUM(test2.xls!C5))/3600"

            'calcul de troisième heure

            Windows("test1.xls").Activate
            Range("AP4").Select
            Windows("test2.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">2:00:00:000", Operator:=xlAnd, Criteria2:="<3:00:00:000"
            Windows("test3.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">2:00:00:000", Operator:=xlAnd, Criteria2:="<3:00:00:000"

            Windows("test1.xls").Activate
            ActiveCell.FormulaR1C1 = "=(SUM(test2.xls!C5)+SUM(test3.xls!C5))/3600"

            'calcul de la quatrième heure
            Windows("test1.xls").Activate
            Range("AP5").Select
            Windows("test3.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">3:00:00:000", Operator:=xlAnd, Criteria2:="<4:00:00:000"
            Windows("test4.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">3:00:00:000", Operator:=xlAnd, Criteria2:="<4:00:00:000"

            Windows("test1.xls").Activate
            ActiveCell.FormulaR1C1 = "=(SUM(test3.xls!C5)+SUM(test4.xls!C5))/3600"

            'calcul de la 5 heure
            Windows("test1.xls").Activate
            Range("AP6").Select
            Windows("test3.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">4:00:00:000", Operator:=xlAnd, Criteria2:="<5:00:00:000"
            Windows("test4.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">4:00:00:000", Operator:=xlAnd, Criteria2:="<5:00:00:000"

            Windows("test1.xls").Activate
            ActiveCell.FormulaR1C1 = "=(SUM(test3.xls!C5)+SUM(test4.xls!C5))/3600"
            'calcul de la 6me heure
            Windows("test1.xls").Activate
            Range("AP7").Select
            Windows("test3.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">5:00:00:000", Operator:=xlAnd, Criteria2:="<6:00:00:000"
            Windows("test4.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">5:00:00:000", Operator:=xlAnd, Criteria2:="<6:00:00:000"

            Windows("test1.xls").Activate
            ActiveCell.FormulaR1C1 = "=(SUM(test3.xls!C5)+SUM(test4.xls!C5))/3600"
            'calcul de la 7me heure
            Windows("test1.xls").Activate
            Range("AP8").Select
            Windows("test4.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test5.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"

            Windows("test6.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test7.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test8.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test9.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test10.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test11.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test12.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test13.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test14.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test15.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test16.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"

            Windows("test17.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test18.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test19.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test20.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test21.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test22.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test23.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test24.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test25.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test26.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test27.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test28.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test29.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test30.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test31.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test32.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test33.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test34.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test35.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test36.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test37.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test38.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test39.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test40.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test41.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test42.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test43.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test44.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test45.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test46.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test47.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test48.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test49.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test50.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test51.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test52.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test53.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
            Windows("test54.xls").Activate
            Range("B1").Select
            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, Criteria1:= _
            ">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"

            Windows("test1.xls").Activate
            ActiveCell.FormulaR1C1 = "=(SUM(test4.xls!C5)+SUM(test5.xls!C5)+SUM(test6.xls!C5)+SUM(test7.xls!C5)+SUM(test8.xls!C5)+SUM(test9.xls!C5)+SUM(test10.xls!C5)+SUM(test11.xls!C5)+SUM(test12.xls!C5)+SUM(test13.xls!C5)+SUM(test14.xls!C5)+SUM(test15.xls!C5)+SUM(test16.xls!C5)+SUM(test17.xls!C5)+SUM(test18.xls!C5)+SUM(test19.xls!C5)+SUM(test20.xls!C5)+SUM(test21.xls!C5)+SUM(test22.xls!C5)+SUM(test23.xls!C5)+SUM(test24.xls!C5)+SUM(test25.xls!C5)+SUM(test26.xls!C5)+SUM(test27.xls!C5)+SUM(test28.xls!C5)+SUM(test29.xls!C5)+SUM(test30.xls!C5)+SUM(test31.xls!C5)+SUM(test32.xls!C5)+SUM(test33.xls!C5)+SUM(test34.xls!C5)+SUM(test35.xls!C5)+SUM(test36.xls!C5)+SUM(test37.xls!C5)+SUM(test38.xls!C5)+SUM(test39.xls!C5)+SUM(test40.xls!C5)+SUM(test41.xls!C5)+SUM(test42.xls!C5)+SUM(test43.xls!C5)+SUM(test44.xls!C5)+SUM(test45.xls!C5)+SUM(test46.xls!C5)+SUM(test47.xls!C5)+SUM(test48.xls!C5)+SUM(test49.xls!C5)+SUM(test50.xls!C5)+SUM(test51.xls!C5)+SUM(test52.xls!C5)+SUM(test53.xls!C5)+SUM(test54.xls!C5))/3600"

            'calcul de la 8me heure

            'calcul de la 9me heure

            'calcul de la 10e heure

            'calcul de la 11me heure
            'calcul de la 12me heure
            'calcul de la 13ème heure
            'calcul de la 14ème heure
            'calcul de la 15me heure
            'calcul de la 16me heure
            'calcul de la 17me heure
            'calcul de la 18me heure
            'calcul de la 19me heure
            'calcul de la 20me heure
            'calcul de la 21me heure
            'calcul de la 22me heure
            'calcul de la 23me heure
            'calcul de la 24me heure

            End Sub
            0
        4. re :

          Lire dans un fichier fermé !!!

          Voir ici : http://excelabo.net/ Il y a plein d'exemple à ce sujet !

          Toutefois, tu n'est pas obligé d'ouvrir tous les fichiers en même temps, il est possible de le ouvrir
          un à un en y faisant le traitement souhaité sans faire afficher les opérations exécuté.

          Sub OuvrirFermer()

          Application.ScreenUpdating = False
          Workbooks.Open "test4.xls"
          ' Traitement, ex recherche et sommation des heures
          ActiveWorkbook.Close
          Application.ScreenUpdating = True

          End Sub

          Voici les recherches opérées sur les 50 fichiers de [ test4.xls ] à [ test54.xls ] pour la 7 ième heure.

          Option Explicit
          
          Sub Calcul_7Hre()
          
              Dim Boucle As Long
              Dim NomFichier As String
          
              ' Calcul de la 7e heure
              Windows("test1.xls").Activate
              Range("AP8").Select
              
              For Boucle = 4 To 54
                  NomFichier = "test" & Boucle & ".xls)"
                  ' Ici j'ouvrirais le fichier
                  'Workbooks.Open NomFichier
                  ' Au lieu de l'activer
                  Windows(NomFichier).Activate
                  Range("B1").Select
                  ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, _
                      Criteria1:=">6:00:00:000", Operator:=xlAnd, Criteria2:="<7:00:00:000"
                  ' Ici je fermerais le fichier
                  'ActiveWorkbook.Close
              Next Boucle
          
              Windows("test1.xls").Activate
              ActiveCell.FormulaR1C1 = "=(SUM(test4.xls!C5)+SUM(test5.xls!C5)+SUM(test6.xls!C5)+SUM(test7.xls!C5)+SUM(test8.­xls!C5)+SUM(test9.xls!C5)+SUM(test10.xls!C5)+SUM(test11.xls!C5)+SUM(test12.xls!C5)+SUM(tes­t13.xls!C5)+SUM(test14.xls!C5)+SUM(test15.xls!C5)+SUM(test16.xls!C5)+SUM(test17.xls!C5)+SU­M(test18.xls!C5)+SUM(test19.xls!C5)+SUM(test20.xls!C5)+SUM(test21.xls!C5)+SUM(test22.xls!C­5)+SUM(test23.xls!C5)+SUM(test24.xls!C5)+SUM(test25.xls!C5)+SUM(test26.xls!C5)+SUM(test27.­xls!C5)+SUM(test28.xls!C5)+SUM(test29.xls!C5)+SUM(test30.xls!C5)+SUM(test31.xls!C5)+SUM(te­st32.xls!C5)+SUM(test33.xls!C5)+SUM(test34.xls!C5)+SUM(test35.xls!C5)+SUM(test36.xls!C5)+S­UM(test37.xls!C5)+SUM(test38.xls!C5)+SUM(test39.xls!C5)+SUM(test40.xls!C5)+SUM(test41.xls!­C5)+SUM(test42.xls!C5)+SUM(test43.xls!C5)+SUM(test44.xls!C5)+SUM(test45.xls!C5)+SUM(test46­.xls!C5)+SUM(test47.xls!C5)+SUM(test48.xls!C5)+SUM(test49.xls!C5)+SUM(test50.xls!C5)+SUM(t­est51.xls!C5)+SUM(test52.xls!C5)+SUM(test53.xls!C5)+SUM(test54.xls!C5))/3600"
          
          
          End Sub
          


          Donc, il faut crée une boucle pour les heures :

          les conditions ">6:00:00:000" et "<7:00:00:000"

          peuvent être placé dans une variable

          ex:

          Sub Temporel()
          
              Dim Boucle As Integer
              Dim HeureDebut As Date
              Dim HeureFinal As Date
              
              HeureDebut = "0:00:00"
              HeureFinal = "1:00:00"
              
              For Boucle = 0 To 23
                  MsgBox Format(HeureDebut, "hh:mm:ss.000") & " -:- " & Format(HeureFinal, "hh:mm:ss.000")
                  HeureDebut = HeureDebut + "1:00:00"
                  HeureFinal = HeureFinal + "1:00:00"
              Next Boucle
          End Sub
          


          ensuite à l'intérieur de cette boucle placé la première boucle de la routine [ Calcul_7Hre ].
          qui devrait elle inclure l'ouverture/fermeture de tes classeurs.

          Bien sur, je n'ai pas encore tout comprit, mais je crois qu'avec ces quelques lignes, tu devrais avancé !

          @+
          Lupin
          0
          1. bonjour
            encore merci pour votre programme,
            j'ai fait plusieurs modifications pour arriver a un certain stade j'ai reussi a faire la somme des colones pour chaque fichier mais j'obtien tjs la meme valeur dans toutes les cases AP je sais le problème reside dans le filtre ou autre chose entouka je suis vraiment bloqué

            Option Explicit

            Sub Temporel()

            Dim Boucl As Integer
            Dim HeureDebut As Date
            Dim HeureFinal As Date
            Dim Boucle As Long
            Dim NomFichier As String

            HeureDebut = "0:00:00"
            HeureFinal = "1:00:00"
            'a titre d'exemple la boucle est de 1 à 2
            For Boucl = 1 To 2
            MsgBox Format(HeureDebut, "hh:mm:ss:000") & " -:- " & Format(HeureFinal, "hh:mm:ss:000")
            HeureDebut = HeureDebut + "1:00:00"
            HeureFinal = HeureFinal + "1:00:00"

            Dim ra As Integer

            Dim AP As String

            'j'ouvre le fichier test1,

            Workbooks.Open "C:\Users\Aymen\Desktop\data\tako\test1.xls"

            For Boucle = 2 To 4

            NomFichier = "C:\Users\Aymen\Desktop\data\tako\test" & Boucle & ".xls"
            ' Ici j'ouvrirais le fichier
            Workbooks.Open NomFichier
            Range("B1").Select

            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, _
            Criteria1:=">heuredebut", Operator:=xlAnd, Criteria2:="<HeureFinal"
            Next Boucle

            'j'ai voulu ici créer une boucle qui change AP du calsseur c'est à dire a chaque fois qu'une somme est faite pour chaque heure elle est stocké dans la case AP, AP1, AP2,...
            la boucle ra est juste pour pouvoir séparer la première boucle et pouvoir enregistré a chaque fois le fichier qui va stocké les valeurs
            For ra = 1 To 1

            Windows("test1.xls").Activate
            Range("AP" & Boucl).Select
            ActiveCell.FormulaR1C1 = "=(SUM(test2.xls!C5)+SUM(test3.xls!C5))/3600"
            Range("AO" & Boucl).Select
            ActiveCell.FormulaR1C1 = "=RC[1]"
            ActiveWorkbook.Close SaveChanges:=True
            Next ra

            ' Ici je ferme les fichiers pour qu'au moment de l'exécution de la deuxième Boucl de temps le fichier souvre normalement et me fait un debogage
            Windows("test2.xls").Activate
            ActiveWorkbook.Close SaveChanges:=False

            Windows("test3.xls").Activate
            ActiveWorkbook.Close SaveChanges:=False
            Windows("test4.xls").Activate
            ActiveWorkbook.Close SaveChanges:=False

            Next Boucl

            End Sub

            Ce programme me permet d'ouvrir les fichiers de faire le calcul de stocké dans le fichié test1 chaque veleur pour chaque heure est stocké dans une case AP, mais mon problème c'est que cé toujours la meme valeur dans toute les cases malgré quelle doit changé puisque la boucl d'heure change "donc le filtre des valeurs change et donne d'autre plage de valeurs

            S'il vous plait aidez moi et merci d'avance
            0
        5. Bonjour Mr
          merci pour votre programme est vrément génial

          je l'ai testé et j'ai fé comme vous m'avez dit donc j'ai obtenu un programme comme ca :
          Option Explicit

          Sub Temporel()

          Dim Boucl As Integer
          Dim HeureDebut As Date
          Dim HeureFinal As Date
          Dim Boucle As Long
          Dim NomFichier As String

          HeureDebut = "0:00:00"
          HeureFinal = "1:00:00"

          For Boucl = 0 To 23
          MsgBox Format(HeureDebut, "hh:mm:ss:000") & " -:- " & Format(HeureFinal, hh:mm:ss:000")
          HeureDebut = HeureDebut + "1:00:00"
          HeureFinal = HeureFinal + "1:00:00"
          'j'ai voulu ici créer une boucle qui change AP du calsseur c'est à dire a chaque fois qu'une somme est faite pour chaque heure elle est stocké dans la case AP, AP1, AP2,...
          Dim rangee As Long
          Dim APg As String

          ' Calcul pour toutes les heures

          For rangee = 2 To 4
          ' Windows("test1.xls").Activate
          'APg = "AP" & rangee

          'Range("APg").Select

          For Boucle = 4 To 54
          NomFichier = "C:\Users\Aymen\Desktop\data\tako\test" & Boucle & ".xls"
          ' Ici j'ouvrirais le fichier
          Workbooks.Open NomFichier
          Range("B1").Select
          ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, _
          Criteria1:=">HeureDebut", Operator:=xlAnd, Criteria2:="<HeureFinal"
          ' Ici je fermerais le fichier
          ActiveWorkbook.Close
          Next Boucle
          ' Next rangee

          Windows("test1.xls").Activate
          ActiveCell.FormulaR1C1 = "=(SUM(test4.xls!C5)+SUM(test5.xls!C5)+SUM(test6.xls!C5))/3600"

          Next Boucl
          End Sub

          1er problème: c'est que une fois les classeurs test fermé, la case danlaquelle se fait la somme dans le classeur 1 affiche "REF" parceque elle ne peut pas apporter les valeurs du classeur fermé
          2 ème problème : la boucle que j'ai fait pour changer les AP elle se bloque au niveau 'Range("APg").Select

          Donc je vous explique un peut plus pour que vous comprenez le programme parfaitement

          a chaque fois on lit les fichier et on filtre selon chaque heure, on va obtenir des valeur dans la colone E:E, La somme des colonnes E:E des différents classeurs sera sommé est divisé par 3600 et ensuite affiché dans le classeur 1 donc pour enfin obtenir une colonne dans le classeur 1 qui contien valeur pour heure 1 , valeur pour heure 2,....
          merci et bonne journée
          0
          1. re :

            Je n'ai pas encore tout regarder, car je croyais avoir le temps de structurer ton code.

            entre autre, ici il y a affectation de variable :

            'APg = "AP" & rangee

            Si AP est une variable :

            cela devient :

            'APg = AP & rangee

            et aussi la ligne :

            'Range("APg").Select

            devient:

            'Range(APg).Select

            Comme je t'ai dit, si j'arrive à trouver du temps je regarderai plus spécifiquement
            la structure de ton code.

            @+
            Lupin
            0
            1. Bonjour j'espère que vous alez bien
              bon je suis toujours bloqué dans ce programme j'ai apris beaucoup de chose sur le VBA mais apprament c'est pas suffisant:
              en faisant tourner le programme qui contien le fitrage il s'est avéré que je récupère tout le temps le meme résultat meme si on change la plage du filtrage et ce ci est du au fait que

              Windows("classeur1.xls").Activate
              Range("AP" & Boucl).Select 'pour changer l'emplacement de sauvgarde des valeurs suivant le filtage
              ActiveCell.FormulaR1C1 = "=(SUM(test2.xls!C5)+SUM(test3.xls!C5))/3600"
              c'est a dire ici on somme toujours la colonne E:E et ceci ne tien pas compte du filtrage, je suis bloqué ici j'ai pa su comment faire pour tenir compte du filtrage qu'on fait a chaque heure pour l'ensemble des fichiers
              Le code utilisé est celui ci :

              Option Explicit

              Sub Temporel()

              Dim Boucl As Integer
              Dim HeureDebut As Date
              Dim HeureFinal As Date
              Dim Boucle As Long
              Dim NomFichier As String
              Dim ra As Integer
              Dim AP As String

              HeureDebut = "0:00:00"
              HeureFinal = "1:00:00"
              'Workbooks.Open "C:\Users\Aymen\Desktop\data\tako\test1.xls"
              For Boucl = 1 To 2
              MsgBox Format(HeureDebut, "hh:mm:ss:000") & " -:- " & Format(HeureFinal, "hh:mm:ss:000")
              HeureDebut = HeureDebut + "1:00:00"
              HeureFinal = HeureFinal + "1:00:00"
              'j'ai voulu ici créer une boucle qui change AP du calsseur c'est à dire a chaque fois qu'une somme est faite pour chaque heure elle est stocké dans la case AP, AP1, AP2,...

              Workbooks.Open "C:\Users\Aymen\Desktop\data\tako\test1.xls"

              For Boucle = 2 To 4 'a titre d'exemple j'ai prix de 2 à 4

              NomFichier = "C:\Users\Aymen\Desktop\data\tako\test" & Boucle & ".xls"
              ' Ici j'ouvrirais le fichier
              Workbooks.Open NomFichier
              Range("B1").Select
              ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, _
              Criteria1:=">HeureDebut", Operator:=xlAnd, Criteria2:="<HeureFinal"

              Next Boucle

              For ra = 1 To 1
              Windows("test1.xls").Activate
              Range("AP" & Boucl).Select
              ActiveCell.FormulaR1C1 = "=(SUM(test2.xls!C5)+SUM(test3.xls!C5))/3600"
              ActiveWorkbook.Close SaveChanges:=True

              Windows("test2.xls").Activate
              ActiveWorkbook.Close SaveChanges:=False

              Windows("test3.xls").Activate
              ActiveWorkbook.Close SaveChanges:=False
              Windows("test4.xls").Activate
              ActiveWorkbook.Close SaveChanges:=False

              Next ra

              Next Boucl

              End Sub

              S'il vous plait j'espère que vous avez une solution, désolé mais j'ai pas d'autre solution que d'avoir recours a votre aide

              Merci
              0
          2. Bonjour,

            Le temps file à toute allure et je n'ai pas eu le temps de regarder le code.

            Ceci dit, je vois encore l'ambiguité au niveau de la variable [ AP ] ???

            Dim AP As String 
            
            For ra = 1 To 1 
            Windows("test1.xls").Activate 
            Range("AP" & Boucl).Select 
            


            Ici, je constate que la variable AP est défini comme une "string".

            Est-ce que tu as nommé une cellule avec le nom [ AP ].

            Si une cellule est nommé [ AP ], ça porte a confusion que de déclaré une variable du même nom.
            Dim AP As String

            Si ce n'est pas le nom d'une cellule, mais bien le nom d'une variable, la syntaxe est :
            Range(AP & Boucl).Select

            Dons pas de guillemets pour la variable, c'est problement ce qui cause la non-réussite
            de la recherche.

            Je te cite : "c'est à dire a chaque fois qu'une somme est faite pour chaque heure elle est stocké dans la case AP, AP1, AP2,..."

            Ceci me porte à croire que tu as nommé les cases (cellules) au nom de AP, AP1, AP2 ...

            Pour adresser ces cellules, ce serait comme tu fais :
            Range("AP" & Boucl).Select

            mais la déclaration [ Dim AP As String ] crée une ambiguité.

            Autre point :

            dans ces lignes :
            Windows("test2.xls").Activate 
            ActiveWorkbook.Close SaveChanges:=False 
            
            Windows("test3.xls").Activate 
            ActiveWorkbook.Close SaveChanges:=False 
            Windows("test4.xls").Activate 
            ActiveWorkbook.Close SaveChanges:=False 
            </codes>
            
            peuvent être remplacé par :
            <code>
            Application.DisplayAlerts = False
            For RA = 2 To 4
                Windows("test" & RA & ".xls").Activate
                ActiveWorkbook.Close
            Next RA
            Application.DisplayAlerts = True
            


            je ne dis pas que ta méthode est mauvaise, ce n'est qu'une autre façon.

            @+
            Lupin
            0
            1. Merci de me conçacrer un peut de temps je sais que le temps c'est de l'or
              j'ai tenu compte de la variable AP elle fonctionne correctement j'ai enlevé la declaration Dim AP As string

              ca marche normalement,
              pour moi le problème réside dans le filtrage c'est a dire le fitrage se fait pour la colonne contenant les valeurs 1:00:00:000 ...
              c'est à dire une fois que j'ai fait le filtrage selon l'heure sur toute la colonne comme ecrit dans le code je fait la somme entre les valeurs filtré de chaque fichier, mais le problème c'est la somme se fait sur toute la colonne tout le temps malgré que le filtre est en place l'instruction que j'ai ce dessous me somme toute la colonne malgré que les valeurs sont filtrés,
              je sais plus qu'est ce que je dois faire ??

              For Boucle = 2 To 4 'a titre d'exemple j'ai prix de 2 à 4

              NomFichier = "C:\Users\Aymen\Desktop\data\tako\test" & Boucle & ".xls"
              ' Ici j'ouvrirais le fichier
              Workbooks.Open NomFichier
              Range("B1").Select
              ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, _
              Criteria1:=">HeureDebut", Operator:=xlAnd, Criteria2:="<HeureFinal"

              Next Boucle

              For ra = 1 To 1
              Windows("test1.xls").Activate
              Range("AP" & Boucl).Select
              ActiveCell.FormulaR1C1 = "=(SUM(test2.xls!C5)+SUM(test3.xls!C5))/3600" ' somme des colonnes E:E pour chaque fichier aprés filtrage
              ActiveWorkbook.Close SaveChanges:=True
              0
          3. Bonjour,

            Je n'ai pu trouver une soluce avec le filtre activé.

            Je te propose donc de faire une boucle sur ta plage pour effectuer ta somme plutôt qu'un filtre !

            ActiveSheet.Range("$A$1:$DJ$10000").AutoFilter Field:=2, _
            Criteria1:=">HeureDebut", Operator:=xlAnd, Criteria2:="<HeureFinal"

            ex type :
            Sub Calcul()
            
            
                Dim Plage As Range, Cellule As Range
                Dim Somme As Date
            
                Set Plage = Range("A1:A10000")
            
                Dim HeureDebut As Date ' >
                Dim HeureFinal As Date ' <
            
                ' En supposant que l'heure de début est en colonne A
                ' En supposant que l'heure final est en colonne E
                ' En supposant que l'heure comprise entre de début et final soit en colonne F
                '
                For Each Cellule In Plage
                    If ((Cellule.Value > HeureDebut) And (Cellule.Offset(0, 5).Value < HeureFinal)) Then
                        Somme = Somme = Cellule.Offset(0, 6).Value
                    End If
                Next Cellule
            
            End Sub
            '
            


            Lupin
            0
            1. Bonjour MR
              merci pour la solution
              je l'ai utilisé mais ca marche pas comme je veux et j'ai pas pu la modifier puisque je conais pas trés bien le VBA

              For Boucle = 1 To 2 'a titre d'exemple j'ai prix de 1 à 2
              NomFichier = "C:\Users\Aymen\Desktop\data\tako\test" & Boucle & ".xls"
              ' Ici j'ouvrirais le fichier
              Workbooks.Open NomFichier

              Next Boucle
              For Each Cellule In Plage
              If ((Cellule.Offset(0, 2).Value > HeureDebut) And (Cellule.Offset(0, 2).Value < HeureFinal)) Then
              Somme = Somme = Cellule.Offset(0, 5).Value
              End If
              Next Cellule

              donc le filtre se fait trés bien puisque je veut filtrer sur une seule colonne (B) qui contien des donnée du type 0:00:00:000 c'est pourquoi j'ai mis ((Cellule.Offset(0, 2).Value deux fois

              la somme que je veut faire aprés le filtre c'est dans la colonne (E) je veut sommer toute la colonne (E) aprés le filtrage et diviser la somme par 3600 et le résultat trouver qui est du genre 3434,3434 je voudrais qu'il soit afficher dans une colonne a part d'un autre classeur " comment faire ??
              Merci de m'aider
              0
          4. re :

            Dans la boucle :
                For Each Cellule In Plage
                    If ((Cellule.Offset(0, 2).Value > HeureDebut) And (Cellule.Offset(0, 2).Value < HeureFinal)) Then
                        Somme = Somme = Cellule.Offset(0, 5).Value
                    End If
                Next Cellule
            


            Il faut d'abord définir les variables :

                Dim Cellule As Range, Plage As Range, Somme As Variant
            


            ensuite if faut instancié l'objet Plage :
                Set Plage = Range("A1:A10000")
            


            Je cite : [ ... je veut filtrer sur une seule colonne (B) .., ]

            donc la position devient :

            Cellule.Offset(0, 1).Value

            Puisque :

            Cellule.Offset(0, 0).Value fournit la valeur de [ A1 ] au premier tour dans la boucle
            puisque la plage est défini de [ A1 à A1000 ] et ainsi de suite ...
            Cellule.Offset(0, 1).Value fournit la valeur de [ B1 ]
            Cellule.Offset(0, 2).Value fournit la valeur de [ C1 ]
            Cellule.Offset(0, 3).Value fournit la valeur de [ D1 ]
            Cellule.Offset(0, 4).Value fournit la valeur de [ E1 ]

            je cite : [ ... c'est dans la colonne (E) je veut sommer toute la colonne (E) aprés le filtrage ... ]

            d'où la ligne :
                Somme = Somme = Cellule.Offset(0, 4).Value
            


            je cite : [ ... diviser la somme par 3600 et le résultat trouver qui est du genre 3434,3434 je voudrais qu'il soit afficher dans une colonne a part d'un autre classeur... ]

                If (Somme > 0) Then
                    Somme = Somme / 3600
                End If
                Windows("test1.xls").Activate 
                Range("AP" & Boucl).Select 
                ActiveCell.Value = Somme  
                ActiveWorkbook.Close SaveChanges:=True
            


            Lupin
            0
            1. Merci votre réponse rapide j'ai bien apricié votre geste
              le programme que j'utilise c'est le suivant j'ai implémenté votre code
              pour obtenir le prog suivant
              Au niveau de la somme j'obtien toujours Vide je sais qu'est ce qui se passe ???
              S'il vous plait j'arrive pas avancer te ca commence a me stréssé :)
              Option Explicit

              Sub Temporel()

              Dim Boucl As Integer
              Dim HeureDebut As Date
              Dim HeureFinal As Date
              Dim Boucle As Long
              Dim NomFichier As String

              Dim Plage As Range, Cellule As Range
              Dim Somme As Variant

              Set Plage = Range("A1:A10000")

              HeureDebut = "0:00:00"
              HeureFinal = "1:00:00"
              'Workbooks.Open "C:\Users\Aymen\Desktop\data\tako\test1.xls"
              For Boucl = 1 To 2
              HeureDebut = HeureDebut + "1:00:00"
              HeureFinal = HeureFinal + "1:00:00"

              Workbooks.Open "C:\Users\Aymen\Desktop\data\tako\fichglob.xlsx"

              For Boucle = 1 To 2 'a titre d'exemple j'ai prix de 1 à 2

              NomFichier = "C:\Users\Aymen\Desktop\data\tako\test" & Boucle & ".xls"
              ' Ici j'ouvrirais le fichier
              Workbooks.Open NomFichier

              Next Boucle

              For Each Cellule In Plage
              If ((Cellule.Offset(0, 1).Value > HeureDebut) And (Cellule.Offset(0, 1).Value < HeureFinal)) Then

              Somme = Somme = Cellule.Offset(0, 4).Value

              End If
              Next Cellule

              If (Somme > 0) Then
              Somme = Somme / 3600
              End If
              Windows("test1.xls").Activate
              Range("AP" & Boucl).Select
              ActiveCell.Value = Somme
              ActiveWorkbook.Close SaveChanges:=True

              Windows("test1.xls").Activate
              ActiveWorkbook.Close SaveChanges:=False
              Windows("test2.xls").Activate
              ActiveWorkbook.Close SaveChanges:=False

              Next Boucl

              End Sub
              0
          5. re :

            Soit tu exécute ta routine en mode pas à pas pour valider toutes les manipulations des données,
            soit tu dépose ton fichier sur ci-joint.com si celui-ci ne contient pas d'information confidentiel.

            Je pourrai alors le déboguer, sans les données je ne puis tester le code que je te fournis
            ce ne sont toujours que des exemples types, n'ayant pas les données pour valider, et travailler
            sur des heures est l'une des choses les plus fragiles sous VBA.

            Lupin
            0
            1. Salut
              http://www.cijoint.fr/cjlink.php?file=cj200806/cijvPfcJzx.xls.
              voici le lien du fichier sur lequel je travaille c'est le fichier test1 j'ai boucoup d'autre fichiers qui sont la suite de ce fichier
              voici le fichier test2 "http://www.cijoint.fr/cjlink.php?file=cj200806/cij76hgUJb.xls. " complémentaire a test1
              j'espère que vous me donnerai une solution
              avec un grand merci
              0
            2. voici le deuxième lien pour le deuxième fichier test2.xls
              http://www.cijoint.fr/cjlink.php?file=cj200806/cijYzxEqYp.xls.
              0
          6. re :

            avec les deux liens, j'attérit sur une page qui me dit [ !!! Fichier non accessible !!! ].

            Lupin
            0
            1. voici le lien
              http://www.cijoint.fr/cjlink.php?file=cj200806/cijy01dIBh.xls
              normalement j'ai verifier qu'il marche
              merci
              0
          7. re :

            J'ai bien réussi à télécharger le premier test1.xls, mais pas le second.

            et il n'y a aucune macro VBA dans ce fichier, les données sont là
            mais ou est le code ?

            Lupin
            0
            1. je vais essayer de vous renvoyer le deuxième fichiers
              entouka pour le code je le met dans une autre fichiers pour juste que je puisse exécuter cé tout
              a chaque fois que j'enregistre et j'ouvre il me dit qu'il n y a pas de macro dans ce fichier donc j'ouvre un nouveau classeur
              je crée un module dans lequel je copie le code suivant:
              ensuite j'exécute
              le lien du deuxième fichier: http://www.cijoint.fr/cjlink.php?file=cj200806/cijYzxEqYp.xls
              Option Explicit

              Sub Temporel()

              Dim Boucl As Integer
              Dim HeureDebut As Date
              Dim HeureFinal As Date
              Dim Boucle As Long
              Dim NomFichier As String

              Dim Plage As Range, Cellule As Range
              Dim Somme As Variant

              Set Plage = Range("A1:A10000")

              HeureDebut = "0:00:00"
              HeureFinal = "1:00:00"
              'Workbooks.Open "C:\Users\Aymen\Desktop\data\tako\test1.xls"
              For Boucl = 1 To 2
              HeureDebut = HeureDebut + "1:00:00"
              HeureFinal = HeureFinal + "1:00:00"

              Workbooks.Open "C:\Users\Aymen\Desktop\data\tako\fichglob.xlsx"

              For Boucle = 1 To 2 'a titre d'exemple j'ai prix de 1 à 2

              NomFichier = "C:\Users\Aymen\Desktop\data\tako\test" & Boucle & ".xls"
              ' Ici j'ouvrirais le fichier
              Workbooks.Open NomFichier

              Next Boucle

              For Each Cellule In Plage
              If ((Cellule.Offset(0, 1).Value > HeureDebut) And (Cellule.Offset(0, 1).Value < HeureFinal)) Then

              Somme = Somme = Cellule.Offset(0, 4).Value

              End If
              Next Cellule

              If (Somme > 0) Then
              Somme = Somme / 3600
              End If
              Windows("fichglob.xlsx").Activate
              Range("AP" & Boucl).Select
              ActiveCell.Value = Somme
              ActiveWorkbook.Close SaveChanges:=True

              Windows("test1.xls").Activate
              ActiveWorkbook.Close SaveChanges:=False
              Windows("test2.xls").Activate
              ActiveWorkbook.Close SaveChanges:=False

              Next Boucl

              End Sub
              0
          8. re :

            Voilà j'ai pu télécharger le deuxième fichier.

            J'ai retravaillé le code en fonction de ce que j'ai compris de ce que tu tente de faire.

            Le code tel que je l'ai remodeler, fonctionne bien mais ce sont les données qui ne correspondent pas aux critères
            de recherche.

            Dans les fichiers test1.xls et test2.xls, les temps sont fournit selon la structure :

            ex:
            test1.xls
            Ligne 9989 [ 0:00:49:871 ] - Un format inconnu de Excel
            Ligne 9990 [ 0:01:00:902 ] - Un format inconnu de Excel

            on devrait lire :
            Ligne 9989 [ 0:00:49,871 ] -> 49 secondes , 871 millièmes de secondes
            Ligne 9990 [ 0:01:00,902 ] -> 1 minute , 0 seconde, 902 millièmes de secondes

            or les lignes :
            HeureDebut = "0:00:00"
            HeureFinal = "1:00:00"

            et

            HeureDebut = HeureDebut + "1:00:00"
            HeureFinal = HeureFinal + "1:00:00"

            initialise les critères à :

            HeureDebut [ 01:00:00,000 ] -> 1 heure, 0 minute, 0 seconde, 0 millième
            HeureFinal [ 02:00:00,000 ] -> 2 heures, 0 minute, 0 seconde, 0 millième

            donc la ligne de test :

            If ((Cellule.Offset(0, 1).Value > HeureDebut) And (Cellule.Offset(0, 1).Value < HeureFinal)) Then

            ne sera jamais VRAI, donc l'instruction [ Somme = Somme = Cellule.Offset(0, 4).Value ] n'est jamais
            exécuter.

            Il faut changer le format des temps de [ 00:00:00:000 ] à [ 00:00:00,000 ] et vérifier si tu recherche
            des temps entre 1 heure et 2 heure
            HeureDebut [ 01:00:00,000 ] -> 1 heure, 0 minute, 0 seconde, 0 millième
            HeureFinal [ 02:00:00,000 ] -> 2 heures, 0 minute, 0 seconde, 0 millième

            ou des temps entre 1 minute et 2 minute
            HeureDebut [ 00:01:00,000 ] -> 1 heure, 0 minute, 0 seconde, 0 millième
            HeureFinal [ 00:02:00,000 ] -> 2 heures, 0 minute, 0 seconde, 0 millième

            En plaçant tous les fichiers dans le même dossier,
            voici le code débugger selon ce que j'ai compris !

            Option Explicit
            '
            
            Sub Temporel()
            
                Dim Boucl As Integer
                Dim HeureDebut As Date
                Dim HeureFinal As Date
                Dim Boucle As Long
                Dim NomFichier As String
                
                Dim Plage As Range, Cellule As Range
                Dim Somme As Variant
                
                HeureDebut = "0:00:00"
                HeureFinal = "1:00:00"
                For Boucl = 1 To 2
                    HeureDebut = HeureDebut + "1:00:00"
                    HeureFinal = HeureFinal + "1:00:00"
                
                    NomFichier = ActiveWorkbook.Path & "\Globale" & Boucl & ".xls"
                    Workbooks.Open NomFichier
                
                    For Boucle = 1 To 2 'a titre d'exemple j'ai prix de 1 à 2
                        NomFichier = ActiveWorkbook.Path & "\Test" & Boucle & ".xls"
                        Workbooks.Open NomFichier
                    
                        Set Plage = Range("A1:A10000")
                        For Each Cellule In Plage
                            If ((Cellule.Offset(0, 1).Value > HeureDebut) And (Cellule.Offset(0, 1).Value < HeureFinal)) Then
                                Somme = Somme = Cellule.Offset(0, 4).Value
                            End If
                        Next Cellule
                        ActiveWorkbook.Close
                        If (Somme > 0) Then
                            Somme = Somme / 3600
                        Else
                            Somme = 0
                        End If
                        Windows("Globale1.xls").Activate
                        Range("AP" & Boucle).Select
                        ActiveCell.Value = Somme
                    Next Boucle
                    ActiveWorkbook.Close SaveChanges:=True
                Next Boucl
                
            End Sub
            '
            


            Autre point, il y a vraiment plusieurs fichiers globales ?
            ->->-> For Boucl = 1 To 2
            cette boucle me semble superflu !

            le code devrait être :
            Sub Temporel2()
            
                Dim Boucl As Integer
                Dim HeureDebut As Date
                Dim HeureFinal As Date
                Dim Boucle As Long
                Dim NomFichier As String
                
                Dim Plage As Range, Cellule As Range
                Dim Somme As Variant
                
                HeureDebut = "0:00:00"
                HeureFinal = "1:00:00"
                HeureDebut = HeureDebut + "1:00:00"
                HeureFinal = HeureFinal + "1:00:00"
                
                NomFichier = ActiveWorkbook.Path & "\Globale.xls"
                Workbooks.Open NomFichier
                
                For Boucle = 1 To 2 'a titre d'exemple j'ai prix de 1 à 2
                    NomFichier = ActiveWorkbook.Path & "\Test" & Boucle & ".xls"
                    Workbooks.Open NomFichier
                
                    Set Plage = Range("A1:A10000")
                    For Each Cellule In Plage
                        If ((Cellule.Offset(0, 1).Value > HeureDebut) And (Cellule.Offset(0, 1).Value < HeureFinal)) Then
                            Somme = Somme = Cellule.Offset(0, 4).Value
                        End If
                    Next Cellule
                    ActiveWorkbook.Close
                    If (Somme > 0) Then
                        Somme = Somme / 3600
                    Else
                        Somme = 0
                    End If
                    Windows("Globale1.xls").Activate
                    Range("AP" & Boucle).Select
                    ActiveCell.Value = Somme
                Next Boucle
                ActiveWorkbook.Close SaveChanges:=True
                
            End Sub
            '
            


            Alors ceci devrait débroussailler le terrain quelque peu !

            Lupin
            0
            1. je sais pas quoi vous dire que merci merci beaucoup d'avoir donné beaucoup de votre temps
              entouka j'ai testé le code il marche
              mais :) pour le fichier globale je n'ai qu'un seule fichier dans lequel je veut stocké toute les somme pour les fichiers en filtrant pour chaque heure
              cadire entre 0et 1 heure somme 1
              1 et 2 heure somme 2 chacune dans une case AP1 AP2 ...
              autre probleme la somme est toujours zero
              je sais pk? ca veut pas marché
              bonne soirée et merci encore
              0
          9. voici le code que je utilise et qui donne tjs somme =0
            qu'est ce qu'il faut faire SVP?? moi j'aimerai bien travailler en heure pas en minutes
            Option Explicit
            Sub Temporel2()

            Dim Boucl As Integer
            Dim HeureDebut As Date
            Dim HeureFinal As Date
            Dim Boucle As Long
            Dim NomFichier As String

            Dim Plage As Range, Cellule As Range
            Dim Somme As Variant

            HeureDebut = "0:00:00"
            HeureFinal = "1:00:00"
            For Boucl = 1 To 2 'cette boucle permet de passer dune heure a une autre

            HeureDebut = HeureDebut + "1:00:00"
            HeureFinal = HeureFinal + "1:00:00"

            NomFichier = ActiveWorkbook.Path & "\fichglob.xlsx"
            Workbooks.Open NomFichier

            For Boucle = 1 To 2 'a titre d'exemple j'ai prix de 1 à 2
            NomFichier = ActiveWorkbook.Path & "\Test" & Boucle & ".xls"
            Workbooks.Open NomFichier

            Set Plage = Range("A1:A10")
            For Each Cellule In Plage
            If ((Cellule.Offset(0, 1).Value > HeureDebut) And (Cellule.Offset(0, 1).Value < HeureFinal)) Then
            Somme = Somme = Cellule.Offset(0, 4).Value
            End If
            Next Cellule
            ActiveWorkbook.Close
            If (Somme > 0) Then
            Somme = Somme / 3600
            Else
            Somme = 0
            End If
            Windows("fichglob.xlsx").Activate
            Range("AC" & Boucle).Select
            ActiveCell.Value = Somme
            Next Boucle
            ActiveWorkbook.Close SaveChanges:=True
            Next Boucl
            End Sub
            0
            1. re :

              Un fichier globale, donc le code de la routine Temporel2 de mon dernier message est le bon.

              Et ça ne fonctionne pas à cause du format du temps comme je t'ai expliqué dans mon précédent message :

              1) Le format non reconnu d'Excel
              Il faut changer le format des temps de [ 00:00:00:000 ] à [ 00:00:00,000 ] et vérifier si tu recherche
              des temps entre 1 heure et 2 heure
              HeureDebut [ 01:00:00,000 ] -> 1 heure, 0 minute, 0 seconde, 0 millième
              HeureFinal [ 02:00:00,000 ] -> 2 heures, 0 minute, 0 seconde, 0 millième

              ou des temps entre 1 minute et 2 minute
              HeureDebut [ 00:01:00,000 ] -> 1 heure, 0 minute, 0 seconde, 0 millième
              HeureFinal [ 00:02:00,000 ] -> 2 heures, 0 minute, 0 seconde, 0 millième

              2) Des heures ou des minutes ?
              Alors actuellement, les variables [ HeureDebut et HeureFinal ] contiennent des valeurs
              de l'ordre des heures et tes données sont de l"ordre des minutes.

              Lupin
              0
              1. merci pour votre réponse
                j'ai pas su comment changer le format de l'heure??
                j'ai essayer j'ai pas su si il faut le changé sur fichier lui meme ou dans le programme
                Svp aider moi j'aimerai bien que ce programme fonctionne
                le format des heures et en minutes mais moi dans la version des fichiers finaux je vais utiliser des heures d'ou la taille des fichiers sera plus grandes
                SVP vous avez les fichiers essayer de changé l'heure et me dire comment faire essayer s'il vous plait de le tester avec le nouveau format d'heure
                merci
                0
              2. Bonjour j'espère que vous aller bien
                ces jours jétais un peut deborder par le travail
                S'il vous plait j'ai une petite question concernant cette partie du code
                Set Plage = Range("A1:A10")
                For Each Cellule In Plage
                If ((Cellule.Offset(0, 1).Value > HeureDebut) And (Cellule.Offset(0, 1).Value < HeureFinal)) Then
                Somme = Somme = Cellule.Offset(0, 4).Value
                End If
                Next Cellule
                ActiveWorkbook.Close
                If (Somme > 0) Then
                Somme = Somme / 3600
                Else
                Somme = 0
                End If
                Windows("fichglob.xlsx").Activate
                Range("A" & Boucle).Select
                ActiveCell.Value = Somme
                j'ai verifier avec le mode pas à pas j'ai constater que la vriable somme ne recoit pas la valeur de cellule.offset malgré que celle ci li la valuer se trouvant dans la case voulu
                j'ai pas compris qu'est ce qui se passe ? moi je voudrai bien récuprer la somme de toutes les valeurs
                merci de m'aider
                bonne journée
                0