Titre du sujet : Re: Traitement de données automatisé par myDearFriend! le 13/07/2007 18:59:09
Bonjour Megaolive, JCGL, le Forum,
Hum.... sans les données du classeur, difficile de se représenter exactement où tu veux en venir...
Cela dit, si je me base strictement sur le code que tu fournis ici, juste quelques remarques. A part une ou deux choses, c'est globalement du chipotage qui permettrait peut-être d'optimiser ta procédure. Enfin, c'est mon point de vue, cela ne veut en aucun cas dire que c'est comme ça qu'il faut faire et pas autrement :
Ta variable Cell n'est pas déclarée. Je te conseille d'utiliser l'instruction Option Explicit en tête de module afin de t'obliger à déclarer systématiquement toute variable utilisée ! Ca t'évitera quelques surprises un jour ou l'autre... Compte tenu des valeurs affectées aux variables r_peri, r_pays, c_dept, ces variables pourraient avantageusement être déclarées Byte au lieu de Integer, Byte étant largement suffisant semble-t'il. Il en est de même pour la variable r_dest puisque la plage AB15:AG31 contient moins de 255 cellules. En fait, tu déclares des "variables" (r_peri, r_pays, c_dept) et tu sembles leur affecter des valeurs fixes (14, 13 et 28)... Il est donc peut-être préférable de les déclarer directement en tant que Constantes dès le départ. En plaçant la ligne "r_dest = r_dest + 1" AVANT la ligne "f_dest.Cells(r_dest, 1).Value = Cells(....", tu n'as plus besoin d'affecter la valeur 1 à la variable r_dest en amont et tu économises donc une ligne de code.
Ci-dessous ta procédure, selon ma façon de voir les choses :
Sub TestComment()
'Init des variables Feuille & Range source et destination
Dim f_comm As Worksheet, f_dest As Worksheet
Dim Cell As Range
Dim r_dest As Byte
'Initialisation des constantes Colonne Periode, Pays, et ligne Departement
Const r_peri As Byte = 14, r_pays As Byte = 13, c_dept As Byte = 28
'Affectation de valeurs aux variables "définition des feuilles"
Set f_comm = Worksheets("Commentsource")
Set f_dest = Worksheets("sheet1")
'Test sur cellule de la zone source
For Each Cell In f_comm.Range("AB15:AG31")
If Cell.Value <> "" Then
' Ligne de destination + 1 pour décaler vers le bas au fur et à mesure des recopie
r_dest = r_dest + 1
' Definition de la valeur à reporter sur la feuille destination en fonction des références de la zone source
f_dest.Cells(r_dest, 1).Value = Cells(r_peri, Cell.Column).Text & " - " & _
Cells(r_pays, Cell.Column).Text & " - " & _
Cells(Cell.Row, c_dept).Text & " - " & _
Cell.Text
'Fin de SI
End If
'Redemarrage en haut de boucle
Next Cell
End Sub
Cordialement,
|