|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Bonjour,
Je suis débutante en VBA excel, je dois coder une fonction qui me permet de calculer un volume en fonction des heures onpeak et offpeak(heures creuses et heures pleines), mais j'avoue que je ne sais pas comment faire j'ai beau réfléchir , je n'y arrive pas , c'est pour cela que je me tourne vers vous, si quelqu'un pouvez m'aider . Voici un exemple du fichier excel : Nous avons une date en pas demi horaire du 01/01/2010 au 31/12/2013 et à chaque date correspond un volume. Ce que je voudrai faire c'est que pour chaque mois de l'année je récupère les données(volumes) qui correspondent aux heures creuses (entre 21h et 7h ) je fait la somme pour avoir le volume pour cette plage de donnée. Et je fait la même chose pour les heures pleine(entre 8h et 20h) . exemple de fichier excel avant : date volume 01/01/2010 00:00 155 01/01/2010 00:30 155 01/01/2010 01:00 155 01/01/2010 01:30 155 01/01/2010 02:00 155 01/01/2010 02:30 155 01/01/2010 03:00 155 01/01/2010 03:30 155 01/01/2010 04:00 155 01/01/2010 04:30 155 01/01/2010 05:00 155 01/01/2010 05:30 155 01/01/2010 06:00 155 01/01/2010 06:30 458 01/01/2010 07:00 458 01/01/2010 07:30 458 01/01/2010 08:00 458 01/01/2010 08:30 458 01/01/2010 09:00 458 01/01/2010 09:00 458 01/01/2010 10:00 458 01/01/2010 10:30 458 01/01/2010 11:00 458 01/01/2010 11:30 458 01/01/2010 12:00 458 01/01/2010 12:30 458 01/01/2010 13:00 458 01/01/2010 13:30 300 01/01/2010 14:00 300 01/01/2010 14:30 300 01/01/2010 15:00 300 01/01/2010 15:30 300 01/01/2010 16:00 300 01/01/2010 16:30 300 01/01/2010 17:00 300 01/01/2010 17:30 300 01/01/2010 18:00 154 01/01/2010 18:30 154 01/01/2010 19:00 154 01/01/2010 19:30 154 01/01/2010 20:00 154 01/01/2010 20:30 154 01/01/2010 21:00 154 01/01/2010 21:30 154 01/01/2010 22:00 154 01/01/2010 22:30 154 01/01/2010 23:00 154 01/01/2010 23:30 54 02/01/2010 00:00 154 02/01/2010 00:30 154 02/01/2010 01:00 154 02/01/2010 01:30 154 02/01/2010 02:00 154 02/01/2010 02:30 4 02/01/2010 03:00 154 02/01/2010 03:30 154 02/01/2010 04:00 154 02/01/2010 04:30 154 02/01/2010 05:00 154 02/01/2010 05:30 154 02/01/2010 06:00 154 ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, exemple de fichier excel aprés: date volume onpeak volume offpeak janv-10 8508 4159 févr-10 mars-10 avr-10 mai-10 juin-10 juil-10 août-10 sept-10 oct-10 nov-10 Merci encore pour votre aide |
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 885 ![]() |
Bonjour,
Pas besoin de VBA, une formule suffira Pour les heures pleines de janvier 2010 (en G2) Code :
=SOMMEPROD((ANNEE($A$2:$A$1000)=2010)*(MOIS($A$2:$A$1000)=1)*(HEURE($A$2:$A$1000)>=HEURE("8:00"))*(HEURE($A$2:$A$1000)<=HEURE("20:00"));$B$2:$B$1000) Code :
=SOMMEPROD((ANNEE($A$2:$A$1000)=2010)*(MOIS($A$2:$A$1000)=1);$B$2:$B$1000)-G2
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Merci de ta réponse, en réalité c'est une modification que je dois apporter à une application faite en VBA, ce qui fait que doit coder cette modification dans ce langage , au lieu d'avoir mes résultats en pas demi horaire ,je voudrai les avoirs en onpeak et offpeak.
Merci encore |
|
|
00
|
|
|
#4 |
![]() ![]() |
Il y as combien de colonne dans ton tableau ?
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
j'ai deux colonnes ,une colonne date et une colonne volume.
Voici un exemple du format de fichier que j'ai: date volume 01/01/2010 00:00 155 01/01/2010 00:30 155 01/01/2010 01:00 155 01/01/2010 01:30 155 01/01/2010 02:00 155 01/01/2010 02:30 155 01/01/2010 03:00 155 01/01/2010 03:30 155 et voici le format de fichier que je voudrai avoir: date volume onpeak volume offpeak janv 2011 8662 4467 fev 2011 ...... ...... Merci beaucoup |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 885 ![]() |
Tu peux utiliser cette formule en VBA
Code :
Range("G2").FormulaLocal = "=SOMMEPROD((ANNEE($A$2:$A$1000)=2010)*(MOIS($A$2:$A$1000)=1)*(HEURE($A$2:$A$1000)>=HEURE(""8:00""))*(HEURE($A$2:$A$1000)<=HEURE(""20:00""));$B$2:$B$1000)"
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Bonjour,
Pouvez-vous poster entre les balises [code] et [/code] les constantes, si nécessaire les variables globales et la procédure de votre application VBA en pas demi horaire afin que l'on puisse avoir le contexte pour passer en mode onpeak / offpeak ? |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Bonjour
Malheureusement je n'ai pas l’application chez moi , c'est une application sur laquelle je devrai travailler en stage. On m'a juste expliqué le contexte et les modifications que je devrai apporter à cette application.(On m'a fait comprendre que je n'avais pas le droit de faire sortir le logiciel de l'entreprise Merci |
|
|
00
|
|
|
#9 | |||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Citation:
Code :
janv-10 8662 4313 févr-10 0 2918 janv-10 8662 924 févr-10 11410 7231 janv-10 1374 0 févr-10 4540 924 mars-10 8662 4313 avr-10 8662 3842 Dans la feuille cible "Statistique par mois" on trouve : Code :
|
|||||
|
|
10
|
|
|
#10 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Merci pour ton aide, seulement voilà j'ai une erreur d'incompatibilité de type au niveau de la ligne ( dateRelevee = .Cells(indRowDate, colDate) ' )
je ne comprend pas Merci |
|
|
00
|
|
|
#11 | |
![]() ![]() |
Citation:
puis passe la souris sur ton code pour voir les valeurs de tes variables (grâce au bulle d'aide) .. ainsi dans ce cas tu devrais peu-être t'apercevoir que la cellule .Cells(ind.... ne renvoi pas une date...
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
|
|
10
|
|
|
#12 |
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
On ne devrait être pas loin d'une solution. Cela doit être un problème de réglage des rangées / colonnes où trouver la 1ère date et dans quel format elle se présente.
Session de mise au point de OnOffPeak() Ouvrir le classeur .xls avec les relevés horaires. Ouvrir le Visual Basic Editeur (VBE) par Alt+F11 ou Cliquez sur l'Excel menu "Outil" > "Macro" > "Visual Basic Editeur" A la ligne 30 du module contenant OnOffPeak() : Code :
dateRelevee = .Cells(indRowDate, colDate) ' Date du relevé Si la ligne devient bleue, c'est que vous avez sélectionné la ligne. Annulez la sélection. Cliquez plus à gauche dans la colonne grise de la marge sans aller cliquer dans la fenêtre Projet. Vous avez mis un point d'arrêt. Toute la ligne doit devenir rouge. Ouvrir la fenêtre d'Exécution immédiate (Ctrl+G) ou Cliquez sur le VBE menu "Affichage" > "Fenêtre d'Exécution" Copier-coller et valider par ENTER : Le programme s'arrête sur le point d'arrêt ligne 30. Copier-coller et valider par ENTER la variable de rangée suivante pour savoir où on en est dans la boucle ? 01/01/2010 Avancez en pas à pas avec le menu "Mise au point" (Debug) > "Pas à pas détaillé" (F8) (Step Into) L'erreur se produit : Dans la fenêtre d'Exécution immédiate, copier-valider par ENTER : 0 Zéro signifie qu'il n'y a pas d'erreur. message d'erreur Indiquez exactement dans quelle rangée et colonne on trouve la première date. Précisez sa valeur. Exemple : 29/12 leurs n° de colonne respectifs. |
|
|
10
|
|
|
#13 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Je ne sais pas si c'est ça l'erreur au lieu de mettre rowReleve = 1 on met rowReleve = 2 ,mais j'ai une autre erreur à la ligne volOnPeak = volOnPeak + volumeReleve ,j'ai une erreur de type dépassement de capacité?
Je suis vraiment désolée ,mais je suis vraiment nulle en VBA J'ai résolu le probléme de la ligne dateRelevee = .Cells(indRowDate, colDate) j'ai une autre erreur à la ligne volOnPeak = volOnPeak + volumeReleve ,j'ai une erreur de type dépassement de capacité. Voici le fichier excel sur lequel je travaille les données vont du 01/01/2010 au 31/12/2015. |
|
|
00
|
|
|
#14 | |
![]() ![]() |
Citation:
et sachant que "volOnPeak" est un integer tu as dépassement si > à 32767 .. si ce dépassement est normal passe en type long ..
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
|
|
10
|
|
|
#15 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Merci j'ai résolu le problème ,mais je trouve pas le même résultat pour le mois de janvier j'ai trouvé en faisant l'addition des volumes onpeak et offpeak
le volume onpeak= 8662 et le volume offpeak =4159 et l’exécution de la macro ne me donne le résultat que pour le mois de janvier hors je voulais pour chaque mois le l'année les volumes onpeak et offpeak correspondants |
|
|
00
|
|
|
#16 | ||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
J'ai mis à jour le message #9 avec la dernière version :
Citation:
Pour l'offpeak, vous trouvez moins parce que vous comptez dans l'intervalle 21 h à 7 h. Le programme compte de 21 h à 7 h 59:59. C'est une question d'interprétation de bornes d'intervalles que vous corrigerez aisément selon ce que vous souhaiterez en adaptant les constantes et/ou en ajoutant explicitement la gestion de l'intervalle heures creuses qui est actuellement implémentée comme le complémentaire des heures pleines. Dans l'énoncé initial, il y a potentiellement un flou entre d'une part 20 h et 21h et d'autre part 7 h et 8 h. Il faut bien répartir ces zones ? C'est à vous de définir si ce sont des heures pleines ou creuses. Les bases de l'algorithme ayant été données, vous pouvez le mettre au point comme vous voulez. Citation:
La langue du format de la date est une autre ambiguïté à lever. On a fourni un convertisseur minimal qui impose d'avoir une date qui commence par "MM/DD/". Vous pourrez l'améliorer s'il y a des dates au format "M/D/YYYY". Code :
Voir la procédure Warning "NNNN: message" ligne 117 dans Cellules d'Excel vers tableau Word en VBA. |
||||
|
|
10
|
|
|
#17 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Merci à tous pour votre aide, je n'aurai pas pu trouver la solution sans vous
MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI !!!!! |
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Bonjour,
Je reviens encore fois vers vous , car en lançant des tests aujourd'hui en changeant de mois et d'année, je n'obtiens que l'affichage du mois de janvier, je vous met mon fichier en pièce jointe, je commence vraiment à déseperer Merci d'avance |
|
|
00
|
|
|
#19 | ||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Quand la discussion a été résolue, vous aviez des dates US MM/DD/YYYY
Code :
On a mis en commentaire la conversion des dates US vers FR. |
||
|
|
10
|
|
|
#20 |
|
Invité de passage
![]() Étudiant Inscription : août 2011 Messages : 10 ![]() |
Merci à tous encore une fois
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com