Traitement de données automatisé
#1
Débutant XLPages

Inscription: 12/07/2007

Messages: 19

Posté le : 12-07-2007 16h34
Bonjour à tous,

Je connais bien Excel mais hélas, j'ai beaucoup de mal à me plonger dans la logique propre au code VBA pour écrire des macros "propres".

Souhaitant combler mes lacunes petit à petit,
je souhaite réaliser un traitement simple mais qui (il me semble) permet d'approcher quelques concepts propres à la rédaction de macro.
( constantes, variables, fonctions...)



Je dispose d'un classeur qui a 2 feuilles :
WS1 = Data
WS2= Synthesis

Sur WS1, voici une représentation de la table affichée "gestion de commentaires":

Année(s'applique à toute la table)

.................Mois1.................Mois1 ......................MoisN...
.................Pays1.................Pays2
Service1...."Commentaire"....."Commentaire"

Service2...."Commentaire"....."Commentaire"

Service N ...

La table a un périmètre défini et figé.
( Une utopie mais simplifions, simplifions pour bien comprendre ,))


Sur WS2, j'ai une page blanche.

Mon Objectif est de "scanner" les différent commentaires saisis dans la table source dans WS1 et de recopier chacun de ses commentaires dans une cellule de la WS2.
Une subtilité est que je souhaite "sauter" les cellulles qui ne contiennent pas de commentaires.

L'ambition de ma macro est de générer une liste synthétique des commentaires en appliquant un formattage particulier.

Voici ce que j'ai réussi à produire pour l'instant :

Option Explicit

Sub Comment
()

'declaration de variable "c" est une cellule
Dim c As Range

'
declaration de fonctionpour chaque Cellule du range AB15:AG31 
For Each c In Sheets("WS1").Range("AB15:AG31")

'Condition 1 Si valeur de "c" différent de vide alors
If UCase(c.Value) <> "" Then

'
Copier "c" dans le range A1:F16
c
.Copy Destination:=Sheets("WS2").Range("A1:F16")


'Fin de Si
End If

Valeur de "C" suivante
Next

' Fin de fonction
End Sub



Ce qui fonctionne : La tableau est bien scanné du début à la fin

Ce qui ne fonctionne pas : Seule la dernière cellule commentaire renseignée est recopiée sur ma feuille destination dans toute la zone destination définie...


Je ne cherche pas du code pré maché mais bel et bien à comprendre la logique de fond de création d'une macro "propre"
N'hésitez pas à corriger mes commentaires si ma lecture de mon code n'est pas la bonne.
Tout exemple proche serait très apprécié.

Merci d'avance pour vos conseils.
Hors Ligne
Rapport   Haut 

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

Inscription: 23/05/2007
De Chamrousse

Messages: 309

Système d'exploitation:
PC
Version Excel utilisée:
2013
Posté le : 12-07-2007 16h57
Bonjour à tous,
Bienvenue à Megaolive


Je laisse à d'autres le soin de t'expliquer pourquoi ton code ne fonctionne pas comme tu le souhaites...


Moi, je suis l'archiviste mDFXLPages

Je te joints un fichier de Ti sur VeriTi mais je n'ai pas trouvé le lien direct (arf ils ne peuvent pas se "payer" un archiviste eux)

Sois gentil(lle) d'aller jeter un oeil : c'est une mine d'informations

A+

Edition : ah ben le fichier ne veut pas passer...Je l'ai envoyé à mDF qui le déposera surement
Edité par JCGL le 12/07/2007 18:20:58


Cordialement
Hors Ligne
Rapport   Haut 

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

Inscription: 12/07/2007

Messages: 19

Posté le : 12-07-2007 17h29
Merci pour le lien !!!

Je rôde par la voir... :p
Hors Ligne
Rapport   Haut 

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

Inscription: 23/05/2007
De Chamrousse

Messages: 309

Système d'exploitation:
PC
Version Excel utilisée:
2013
Posté le : 12-07-2007 20h35
Citation :
Megaolive a écrit:
Je rôde par la voir... :p


Tu ne serais pas de la Belle Province... ?

Tabernacle

A+


Cordialement
Hors Ligne
Rapport   Haut 

Re: Traitement de données automatisé
#5
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 : 12-07-2007 20h57
Bonsoir Megaolive, JCGL, le Forum,

J'imagine que nos amis de VeriTi auraient (à juste titre) préférés un lien sur le fichier plutôt que le fichier lui-même posté ici.
Je viens de faire une recherche et n'ayant pas trouvé non plus le fichier original sur le site de VériTi, je poste donc ici le zip que m'a fait parvenir JCGL par mail.

Cela dit, peut-être que je me trompe mais j'ai dans l'idée que Megaolive ne parle pas des "Commentaires" comme tu l'as compris JCGL...
Je reviens d'ici quelques minutes pour exposer ce que j'ai interprété pour ma part...

Cordialement,

NB: Tu as raison JCGL, effectivement il y avait un problème pour uploader les fichiers zip ici. J'ai installé un module de protection la semaine dernière mais visiblement, ce module protège bien plus qu'il ne devrait... je viens donc de le désactiver. On devrait pouvoir joindre des fichiers aux posts maintenant sans problème (Zip de moins de 50Ko tout de même. )
Pièce jointe:
zip Repertorier_Commentaires.zip   [ Taille: 21.29 Ko - Téléchargements: 689 ]

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é
#6
Accro XLPages

Inscription: 23/05/2007
De Chamrousse

Messages: 309

Système d'exploitation:
PC
Version Excel utilisée:
2013
Posté le : 12-07-2007 21h23
Re,
Salut Didier,

Dans l'attente d'une réponse de Megaolive, concernant son message, merci d'avoir "baissé la sécurité" sur mDFXLPages...

A+


Cordialement
Hors Ligne
Rapport   Haut 

Re: Traitement de données automatisé
#7
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 : 12-07-2007 21h24
Re le fil,

Voici une solution d'après l'analyse que j'ai du problème pour ma part (j'ai essayé de préserver autant que possible la procédure originale) :
Sub Comment()
'declaration de variable "c" est une cellule
Dim c As Range
'
déclaration d'une variable compteur (maxi = nombre de cellules de la plage source)
Dim N As Byte

    '
Boucle parcourant chaque Cellule du range AB15:AG31 sur la Feuil1
    
For Each c In Sheets("Feuil1").Range("AB15:AG31")
    
    
'Condition 1 Si valeur de "c" différent de vide alors
    If c.Value <> "" Then
        '
j'incrémente le compteur d'une unité
        N 
1
        
'Copier "c" dans le range A1:F16 de la Feuil2 à la Nième position dans cette plage
        c.Copy Destination:=Sheets("Feuil2").Range("A1:F16").Item(N)
        '
Fin de Si
    End 
If
    
    
' Valeur de "C" suivante
    Next c
    
    ' 
Fin de boucle
End Sub
Modifications apportées à la procédure :
  • J'ai ajouté une variable compteur "N" qui permet de ranger les données copiées au fur et à mesure dans la plage réceptrice
  • J'ai ajouté et revu certains commentaires (For Each/Next n'est pas une "fonction" mais un "bloc d'instructions" permettant de réaliser une boucle)
  • Dans If UCase(c.Value) <> "" Then, j'ai supprimé la notion de Ucase() qui n'a semble t'il pas d'intérêt ici (Ucase est une fonction permettant de convertir une chaine en Majuscules)


  • Espérant avoir compris le sujet et t'avoir un peu aidé...
    N'hésite pas si tu as besoin d'un complément d'informations.

    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é
    #8
    Accro XLPages

    Inscription: 23/05/2007
    De Chamrousse

    Messages: 309

    Système d'exploitation:
    PC
    Version Excel utilisée:
    2013
    Posté le : 12-07-2007 21h31
    Re,

    mDF : Je ne suis pas un bille mais un calot arf (Private Joke)

    J'attends, néanmoins, la réponse de Megaolive avant de te féliciter

    Bonne soirée à tous et bonne fin de semaine


    Cordialement
    Hors Ligne
    Rapport   Haut 

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

    Inscription: 12/07/2007

    Messages: 19

    Posté le : 13-07-2007 10h09
    Bonjour à tous,


    Je pense qu'effectivement vous avez tout à fait compris mon besoin...

    Cependant je dois encore analyser correctement vos réponse pour bien comprendre
    la syntaxe obtenue.

    Je posterai ici, le code finalement édité.

    Merci pour votre aide et réactivité !!!

    MegaOlive
    Hors Ligne
    Rapport   Haut 

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

    Inscription: 12/07/2007

    Messages: 19

    Posté le : 13-07-2007 12h36
    Ci dessous le code finalement édité, un peu différent de l'approche proposé mais qui fonctionne tout aussi bien.

    Si vous remarquez des choses qui peuvent ou doivent être faites autrement,
    N'hésitez pas à critiquer ce code.

    Merci encore pour votre aide !


    [Code]
    Sub TestComment()

    'Init des variables Feuille & Range source et destination
    Dim f_comm As Worksheet
    Dim r_peri As Integer
    Dim r_pays As Integer
    Dim c_dept As Integer

    Dim f_dest As Worksheet
    Dim r_dest As Integer


    'Affectation de valeurs aux variables "définition des feuilles"
    Set f_comm = Worksheets("Commentsource" )
    Set f_dest = Worksheets("sheet1" )

    'Initialisation des variables Colonne Periode, Pays, et ligne Departement
    '( Celle la m'a bien fait batailler alors que c'est une évidence)
    r_peri = 14
    r_pays = 13
    c_dept = 28


    'Initialisation de la variable Ligne d'arrivée
    r_dest = 1


    'Test sur cellule de la zone source
    For Each cell In f_comm.Range("AB15:AG31" )
    If cell.Value <> "" 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, 1).Value = Cells(r_peri, cell.Column).Text & " - " & _
    Cells(r_pays, cell.Column).Text & " - " & _
    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
    [/Code]
    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