Re: Traitement de données automatisé
#11
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 13-07-2007 18h59
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,

    Didier_mDF
    Image redimensionnée
    Le Webmaster

    La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
    Hors Ligne
    Rapport   Haut 

    Re: Traitement de données automatisé
    #12
    Accro XLPages

    Inscription: 23/05/2007
    De Chamrousse

    Messages: 309

    Système d'exploitation:
    PC
    Version Excel utilisée:
    2013
    Posté le : 15-07-2007 21h58
    Bonjour à tous,

    Tabernacle !

    Tu pourrais nous dire si le code de mDF te convient !!!

    Au plaisir de te lire


    Cordialement
    Hors Ligne
    Rapport   Haut 

    Re: Traitement de données automatisé
    #13
    Débutant XLPages

    Inscription: 12/07/2007

    Messages: 19

    Posté le : 17-07-2007 15h41
    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:=xlAscendingHeader:=xlGuess_
            OrderCustom
    :=5MatchCase:=TrueOrientation:=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éemoisSite+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
    Hors Ligne
    Rapport   Haut 

    Re: Traitement de données automatisé
    #14
    Accro XLPages

    Inscription: 23/05/2007
    De Chamrousse

    Messages: 309

    Système d'exploitation:
    PC
    Version Excel utilisée:
    2013
    Posté le : 22-07-2007 21h12
    Bonsoir à tous,
    Salut MegaOlive,

    Comme personne n'a jugé "utile" de "rectifier" ton code, c'est qu'il doit être "convenable"...

    Juste un compliment, tu as pris le soin de la documenter et là

    Tu as bien compris la "philosophie" de mDFXLPages : On sait, on partage ET on explique.

    Au plaisir de te lire, nom d'un cassoulet

    PS : Peux-tu passer le sujet en résolu ?


    Cordialement
    Hors Ligne
    Rapport   Haut 

    Re: Traitement de données automatisé
    #15
    Débutant XLPages

    Inscription: 12/07/2007

    Messages: 19

    Posté le : 29-11-2007 11h51
    Quelques mois après la bataille ,)

    Résolu flagué ;)
    Hors Ligne
    Rapport   Haut 


    Vous pouvez voir les sujets.
    Vous ne pouvez pas débuter de nouveaux sujets.
    Vous ne pouvez pas répondre aux contributions.
    Vous ne pouvez pas éditer vos contributions.
    Vous ne pouvez pas effacez vos contributions.
    Vous ne pouvez pas ajouter de nouveaux sondages.
    Vous ne pouvez pas voter en sondage.
    Vous ne pouvez pas attacher des fichiers à vos contributions.
    Vous ne pouvez pas poster sans approbation.

    [Recherche avancée]


    Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes