A propos VBA Excel
Fermé
aymenayari
Messages postés
1
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
21 mai 2008
-
21 mai 2008 à 19:34
Aymen - 26 juin 2008 à 11:56
Aymen - 26 juin 2008 à 11:56
A voir également:
- A propos VBA Excel
- Liste déroulante excel - Guide
- Aller à la ligne excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Excel compter cellule couleur sans vba - Guide
19 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 708
23 mai 2008 à 09:36
23 mai 2008 à 09:36
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.
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.
Utilisateur anonyme
23 mai 2008 à 14:10
23 mai 2008 à 14:10
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
Lupin
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
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
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
Utilisateur anonyme
23 mai 2008 à 17:22
23 mai 2008 à 17:22
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
26 mai 2008 à 13:38
26 mai 2008 à 13:38
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
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
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
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
Utilisateur anonyme
27 mai 2008 à 14:59
27 mai 2008 à 14:59
Bonjour,
Première observation :
Il n'est pas nécessaire de spécifier la feuille lorsque cell-ci est sélectionné.
peut se simplifier par :
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é.
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
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
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
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
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
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
Utilisateur anonyme
27 mai 2008 à 17:08
27 mai 2008 à 17:08
re :
Effectivement la partie :
doit être remplacé par :
C'est dans cette section qu'il créé la liste des fichiers Excel trouvés :
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
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
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
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
Utilisateur anonyme
2 juin 2008 à 19:46
2 juin 2008 à 19:46
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.
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:
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
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(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" 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
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
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
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
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
Utilisateur anonyme
5 juin 2008 à 16:28
5 juin 2008 à 16:28
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
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
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
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
Utilisateur anonyme
12 juin 2008 à 13:36
12 juin 2008 à 13:36
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 ] ???
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 :
je ne dis pas que ta méthode est mauvaise, ce n'est qu'une autre façon.
@+
Lupin
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
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
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
Utilisateur anonyme
16 juin 2008 à 14:30
16 juin 2008 à 14:30
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 :
Lupin
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
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
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
Utilisateur anonyme
18 juin 2008 à 13:08
18 juin 2008 à 13:08
re :
Dans la boucle :
Il faut d'abord définir les variables :
ensuite if faut instancié l'objet Plage :
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 :
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... ]
Lupin
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
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
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
Utilisateur anonyme
18 juin 2008 à 14:14
18 juin 2008 à 14:14
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
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
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
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
Utilisateur anonyme
18 juin 2008 à 15:37
18 juin 2008 à 15:37
re :
avec les deux liens, j'attérit sur une page qui me dit [ !!! Fichier non accessible !!! ].
Lupin
avec les deux liens, j'attérit sur une page qui me dit [ !!! Fichier non accessible !!! ].
Lupin
Utilisateur anonyme
18 juin 2008 à 16:59
18 juin 2008 à 16:59
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
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
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
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
Utilisateur anonyme
18 juin 2008 à 19:41
18 juin 2008 à 19:41
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 !
Autre point, il y a vraiment plusieurs fichiers globales ?
->->-> For Boucl = 1 To 2
cette boucle me semble superflu !
le code devrait être :
Alors ceci devrait débroussailler le terrain quelque peu !
Lupin
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
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
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
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
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
Utilisateur anonyme
18 juin 2008 à 20:53
18 juin 2008 à 20:53
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
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
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
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
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
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