Rapport de message :*
 

Re: Traitement de données automatisé

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 PeriodePayset ligne Departement
    Const r_peri As Byte 14r_pays As Byte 13c_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_dest1).Value Cells(r_periCell.Column).Text " - " _
                                                Cells
    (r_paysCell.Column).Text " - " _
                                                Cells
    (Cell.Rowc_dept).Text " - " _
                                                Cell
    .Text
                
    'Fin de SI
            End If
            '
    Redemarrage en haut de boucle
        Next Cell

    End Sub

    Cordialement,