Macro excel

Macro excel - VB/VBA/VBS - Programmation

Marsh Posté le 19-12-2011 à 23:57:04    

Bonjour à tous et a toutes =)
 
Etant débutant en VBA,je me permets de venir solliciter les "ames charitables " lol  
 
En effet j'essaie de faire une petite macro dont l'énoncé est le suivant :
 
 
 
 
il y a un fichier ou il y a 11 colonnes ou des donnees sont deja saisies pour chque ligne
Col 1         NumeroIdentifiant
Col 2         Lieu
Col 3        S/N
Col 4    Nom  
Col 5         etat
Col 6         Dossier
Col 7         NumeroRef
Col 8         Date/HeureCreationDossier
Col 9         Date/HeureAppelIntervenant
Col 10 Date/Heure Interventiontechnicien  
Col 11 Date/HeureClôture
 
 
 
A partir de ces données d’entrée, des pénalités sont calculées mensuellement. On ajoute aux pénalités individuelles (disponibilité d’un équipement) les pénalités globales (disponibilité du parc informatique dans son ensemble). Voici les éléments pour calculer ces différentes valeurs :
 
Taux de disponibilité par machine 95%  
            =>Pénalités associés
 Indisponibilité > = à 1jours ou 10heures = 10€/ machine
 Indisponibilité entre 1 et 2 jours => 10€ +18 € = 28€ /machine
 Indisponibilité entre 2  et  3jours => 10€ +18€ + 25€  =53€/ machine
 Indisponibilité supérieur à 3jours  => 53€ + 25€/jour supplémentaire / machine
 
   Taux de disponibilité du parc 98%  
            =>Pénalités associés
 entre 97 et 97.99% 1500€
 entre 96 et 96.99% 3000€
 entre 0 et 95.99%  4500€
 
 
 
Voici le code que j'ai commence a faire
 

Code :
  1. Sub reparations()
  2.    
  3.             'On selectionne le classeur et on active la feuille
  4.             Dim classeur As Workbook
  5.             Set classeur = Workbooks("PenalitesMois.xlsm" ) 'ici nom du classeur saisit en dur
  6.             Dim maFeuille As Worksheet
  7.             Set maFeuille = classeur.Worksheets(1) 'on suppose que les donnees sont sur la feuille 1
  8.             classeur.Activate
  9.             maFeuille.Activate
  10.            
  11.             'Je suppose que la feuille possede deja des donnees
  12.             ' et d'apres le cahier des charges soit 11 colonnes
  13.             'et j'ai suppose egalement que les dates sont ordonnees.
  14.            
  15.            
  16.              
  17.            Dim moisACalcul As Byte
  18.            moisACalcul = Application.InputBox("Saisissez le mois dont vous souhaitez y calculer les pénalités (de 1 à 12) " )
  19.              
  20.           'Faire une gestion d'erreur ou cas ou ce n'est pas un mois entre 1 et 12
  21.            
  22.            Call CalculPenaliteQuelMois(moisACalcul)
  23.            
  24.            
  25.  
  26. End Sub
  27. Function CalculPenaliteQuelMois(MoisACalculer)
  28. 'cette boucle va permettre de trouver la premiere ligne du mois duquel on souhaite y calculer les penalites.
  29. 'pour 2 jusqu'a la derniere ligne ou il y a des donnees d'ecrites
  30. For ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
  31. 'si le mois de la cellule recuperer est different du mois ou il faut calculer les penalites
  32. If Month(Cells(ligne, 9)) <> MoisACaluler Then
  33. 'on fait un compteur
  34. compteur = compteur + 1
  35. 'le compteur va m'indiquer a quelle ligne le mois a calculer commence
  36. Else
  37. 'ici on force la sortie de la boucle et on recupere Compteur
  38. End If
  39. Next
  40. ActiveRow.Select = compteur ' la ligne active devient la ligne ou on a trouve le mois a calculer
  41. ActiveRow.Activate = compteur
  42. 'Cette boucle me servir a indiquer le nombre de ligne du mois duquel on souhaite y calculer les pénalités.
  43. For i = compteur To Range("A" & Rows.Count).End(xlUp).Row
  44. If Month(Cells(ligne, 9)) = MoisACaluler Then
  45. compteur2 = compteur2 + 1
  46. 'ce compteur me comptera le nombre de ligne ou il y a le mois dont on doit calculer les penalites.
  47. Else
  48. ' ici on force la sortie de la boucle et on recupere Compteur2
  49. End If
  50. Next
  51. For i = compteur To compteur2
  52. 'on fait le calcul du mois a calculer.
  53. 'on recupere les nombres de jours ouvres entre deux dates qui correspond a la penalite d'une intervention.
  54. Dim nbJoursOuvres As Long
  55. 'va m'indiquer le nombre de jour entre la date appel xerox et la cloture du dossier.
  56. nbJoursOuvres = NB.JOURS.OUVRES((Cells(compteur, 9).Value))
  57.  
  58. '  Indisponibilité > = à 1jours ou 10heures = 10€/ machine
  59. If nbJoursOuvres = 1 Then
  60. PenaliteDeCeDossier = PenaliteDeCeDossier + 10
  61. ' Indisponibilité entre 1 et 2 jours => 10€ +18 € = 28€ /machine
  62. ElseIf nbJoursOuvres = 2 Then
  63. PenaliteDeCeDossier = PenaliteDeCeDossier + 10 + 18
  64. ' Indisponibilité entre 2  et  3jours => 10€ +18€ + 25€  =53€/ machine
  65. ElseIf nbJoursOuvres = 3 Then
  66. PenaliteDeCeDossier = PenaliteDeCeDossier + 10 + 18 + 25
  67. ' Indisponibilité supérieur à 3jours  => 53€ + 25€/jour supplémentaire / machine
  68. ElseIf nbJoursOuvres > 3 Then
  69. JoursSupplementaires = nbJoursOuvres - 4
  70. PenaliteDeCeDossier = PenaliteDeCeDossier + 53 + 25 * JoursSupplementaires
  71. End If
  72. SommePenaliteDuMois = SommePenaliteDuMois + PenaliteDeCeDossier
  73. Next
  74. MsgBox "la penalite du mois duquel on a souhaite calculer la penalite est de " & SommePenaliteDuMois
  75. End Function


 
N'ayant pas le fichier qui contient les données a tester et étant vraiment pas TIP /TOP programmeur je viens demander de l'aide..
 
A savoir si le code répond un peu a l'énoncé ?si il y a d'éventuel correction ou critiques ?Je suis preneur de toutes infos qui pourrait me faire avancer..
 
Merci a tous et a toutes =)..
 
 
 
 
 

Reply

Marsh Posté le 19-12-2011 à 23:57:04   

Reply

Marsh Posté le 28-12-2011 à 10:17:44    

Personnellement ligne 46 et 70 je ne vois pas comment tu quitte la boucle, il faudrait ajouter un exit for dans le else non?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed