Re: Formattage VBA sur report Excel | ||
---|---|---|
Inscription: 12/07/2007
Messages:
19
|
Posté le : 29-11-2007 20h02
Je vais noter ici mon presque algo en cours de traitement :p
J'espère aider les gurus à me guider :p "Scanner" la zone Declencheur Pour chaque cellule de la zone declencheur Si la police de la cellule de la zone declencheur scannée est en gras, la ligne correspond à une Conso Alors a chaque conso trouvée Inserer une ligne Vide au dessus "Scanner" la zone Declencheur Pour chaque cellule de la zone declencheur Si la police de la cellule de la zone declencheur scannée est en gras, la ligne correspond à une Conso Alors a chaque conso trouvée couper la ligne Conso trouvée Et la coller sur la ligne vide suivante? (Cette approche me semble plus realiste)+> mais comment avoir cette condition en vba ? c'est à dire comment definir la valeur de la ligne vide ? ca ma tout l air d etre deux fonctions differentes ? je suis bon pour ecrire deux petites procedures 1/ le decoupage "decouper" sur la meme base que le formattage un IF de plus dans mon FOR existant qui fini par inser.entirerow 2/ le deplacement des consos 1 par 1 suite au decoupage la je commence a sécher j'ai comme le sentiment que je vais avoir besoin d un compteur et d une boucle ? voire de deux compteurs et de deux boucles ? :p je m y perds un peu y il faut ke je commence a syntaxer le début de ce process Ajouter une ligne sous chaque conso pour commencer i will be back :p
Edité par Megaolive le 29/11/2007 20:56:29
|
|
|
Re: Formattage VBA sur report Excel | ||
---|---|---|
Inscription: 12/07/2007
Messages:
19
|
Posté le : 29-11-2007 18h04
Bon j'avance a tatton sur mon sujet :
j'ai trouvé la coquille du code précédent, j'avais remplacé ".Font" par ".format" dans le code précédent tellement j'étais obsédé par le test sur le format :) CI dessous mon dernier code qui fonctionne pour la mise à jour des trois types de format :(Titre,Conso, Item... Comme toujours les critiques les plus acerbes sont les bienvenues ! Je m'attaque maintenant à la restructuration des lignes. Je vois une procédure un peu comme ça : Si Ligne = Conso (déduit par détection du format) alors couper les N lignes suivantes jusqu'a la prochaine conso non comprise. et les coller au dessus de la conso détecté précédement. encore une fois toutes les pistes sont les bienvenue....:]
'Option Explicit
|
|
|
Formattage VBA sur report Excel | ||
---|---|---|
Inscription: 12/07/2007
Messages:
19
|
Posté le : 29-11-2007 16h13
Bonjour,
Je commence à travailler sur une nouvelle macro de formattage d\'un report extrait d\'une base de donnée... Vous trouverez en fichier joint l\'exemple sur lequel je cherche à faire fonctionner ma macro. Il est composé de 2 feuilles : - 1 feuille \"Report\" - 2 feuille \"Format\" A mon avis (d\'après mon analyse de neewbie), Le déroulement de la macro est à splitter au moins en deux étapes: 1 - Appliquer un formattage des cellules en fonction de conditions 2 - Appliquer une restructuration des lignes en fonctions de conditions 1/Pour le formattage des cellules, Je pense m\'appuyer sur un paramétrage qui serai laissé à disposition du User sur la feuille format. La macro doit venir prendre les \"format\" dans la feuille format et les appliquer dans la feuille \"report\" sur les cellules définies. J\'ai 3 types de lignes à formatter : - Les entêtes de colonne => Format 1 - Les consolidations => Format 2 - Les lignes de détail => Format 3 2/ Plus difficile, l\'étape 2, consiste à inverser les positions des Consolidations et des lignes de détails. Etat d\'origine : 1 / Conso 2 / Detailconso1 3 / Detail Conso 2 Etat d\'arivée : 2 / Detailconso1 3 / Detail Conso 2 1 / Conso Voila pour ce qui est du besoin global. :] Maintenant voici le code que je commence à générer ... Comme je suis un noob du VBA (cf post précédent :p), Je voudrai juste me faire un petit peu orienter pour m\'approprier les fonctionnement propre au VBA et petit à petit devenir moi aussi un guru Excel :p donc voici ou j\'en suis, et j\'ai un problème a l\'execution :( Run time error 438 Object doesn\'t support this method or property à ce que je comprends, je ne peux pas tester sur le format de la cellule ? ou pas comme ça ? Je suis à votre écoute messieurs les gurus excel :p
'Option Explicit
|
|
|
Re: Traitement de données automatisé | ||
---|---|---|
Inscription: 12/07/2007
Messages:
19
|
Posté le : 29-11-2007 11h51
Quelques mois après la bataille ,)
Résolu flagué ;) |
|
|
Re: Traitement de données automatisé | ||
---|---|---|
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
|
|
|
Re: Traitement de données automatisé | ||
---|---|---|
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] |
|
|
Re: Traitement de données automatisé | ||
---|---|---|
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 |
|
|
Re: Traitement de données automatisé | ||
---|---|---|
Inscription: 12/07/2007
Messages:
19
|
Posté le : 12-07-2007 17h29
Merci pour le lien !!!
Je rôde par la voir... :p |
|
|
Traitement de données automatisé | ||
---|---|---|
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
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. |
|
|