Titre du sujet : Re: Traitement de données automatisé par Megaolive le 17/07/2007 15:41:56
Rebonjour à vous,
Désolé de te décevoir, mais je suis de Toulouse et non pas du pays des tabernacles, nom d'un cassoulet !! :p
j'ai bien relu la proposition précédente et j'étais arrivé de par ailleur à un code un peu modifié qui prend en compte certaines des remarques formulées :
J'avais eu de par ailleurs le conseil sur l'"option explicit". Cependant la proposition m'apporte des éléments complémentaires telles que l'utilisation des "bytes" comme type de constante.
J'ai également décomposé mon module en fonctions qui sont appelés dans la Sub Main()
Voila mon code final. Je reste bien sur preneur de toute remarques que vous auriez sur le code suivant :
Option Explicit
'Declaration des variables publiques utilisées dans plusieurs sousfonctions
Public f_dest As Worksheet
Public CommentClean As Range
Public CommentArea As Range
' Deroulement général et appel des sous fonctions
Sub Main()
Clean
Generate
SortComments
FilterComments
End Sub
' Nettoyage et suppression des filtres de la zone de synthèse
Sub Clean()
Set f_dest = Worksheets("FTE=> Delta Target & Overrun")
Set CommentClean = f_dest.Range("C37:E91")
f_dest.ShowAllData
CommentClean.ClearContents
End Sub
' Tri sur le mois de la zone de synthèse
Sub SortComments()
Set f_dest = Worksheets("FTE=> Delta Target & Overrun")
Set CommentArea = f_dest.Range("C36:E91")
CommentArea.Sort Key1:=Range("D37"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=5, MatchCase:=True, Orientation:=xlTopToBottom
Application.Run "TM1RECALC"
On Error GoTo Error
Exit Sub
Error:
MsgBox ("Please connect To Fera Server")
Resume Next
End Sub
' Filtre sur les mois compris entre sélection start et end Month
Sub FilterComments()
Set f_dest = Worksheets("FTE=> Delta Target & Overrun")
Set CommentArea = f_dest.Range("C36:E91")
CommentArea.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets("Comments Mngt").Range("G5:G17"), Unique:=False
End Sub
'Definition de la plage Source
'Definition de la plage Cible
'Generation de la liste de commentaires synthétiquesur trois colonnes Année/ mois/ Site+Centre+Comment
Sub Generate()
'Init des variables Feuille & Range source et destination
Dim f_comm As Worksheet
Dim cell As Range
Dim r_dest As Integer
'Initialisation de la Variable Ligne d'arrivée
r_dest = 37
'Initialisation des cellules sources
Const r_peri = 12
Const r_pays = 13
Const c_dept = 3
Const r_Year = 5
Const c_Year = 4
'Affectation de valeurs aux variables "définition des feuilles"
Set f_comm = Worksheets("DELTA Comments")
Set f_dest = Worksheets("FTE=> Delta Target & Overrun")
Application.Run "TM1RECALC"
'Test sur cellule de la zone source
For Each cell In f_comm.Range("D14:BW30")
If cell.Text <> "" Then
' Definition de la valeur à reporter sur la feuille destination en fonction des références de la zone source
f_dest.Cells(r_dest, 3).Value = f_comm.Cells(r_Year, c_Year).Text
f_dest.Cells(r_dest, 4).Value = f_comm.Cells(r_peri, cell.Column).Text
f_dest.Cells(r_dest, 5).Value = f_comm.Cells(r_pays, cell.Column).Text & " - " & _
f_comm.Cells(cell.Row, c_dept).Text & " - " & _
cell.Text
'Ligne de destination + 1 pour décaler vers le bas au fur et à mesure des recopie ( Ca c'est génial :p)
r_dest = r_dest + 1
'Fin de SI
End If
'Redemarrage en haut de boucle
Next
End Sub
|