Formattage VBA sur report Excel
#1
Débutant XLPages

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
'
pour forcer la declaration de variable
Option Explicit

'Declaration des varibable en public
'
pour les utiliser dans toutes les sousfonctions

'Variable Worksheet Report
Public Reportsheet As Worksheet

'
Variable Worksheet Format
Public FormatSheet As Worksheet

'Variable Colonne contenant la condition
Public Declencheur As Range

'
Variable qui prendra les valeurs de cellules
'contenant la condition
Public cell As Range

'
Variable Cellule du format des titres dans la feuille format
Public Leformat As Range

Sub Format
()
'1 formattage de la ligne de titre
'
2 formattage des lignes de conso
'3 formattage des lignes de conso

'
definition valeur de ReportSheet
Set Reportsheet 
Worksheets("REPORT")

'definition valeur de Declencheur
Set Declencheur = Reportsheet.Range("A1:A500")


    '
Boucle de formattage
    
    
For Each cell In Declencheur
    
            
'Format ligne titre
            If cell.Value = "" Then
            
                copytitleformat
                
                cell.Rows.Select
                Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=False

            '
Format ligne conso [b]ICI LE PLANTAGE[/b]
            
' j'essaye de tester si format de cellule gras alors appliquer le format  conso
            
ElseIf cell.Format.Bold True Then
               
                copyconsoformat
                
                cell
.Rows.Select
                Selection
.PasteSpecial Paste:=xlFormatsOperation:=xlNoneSkipBlanks:= _
                False
Transpose:=False

            
'Format ligne Item
            ElseIf cell.Format.Bold = False Then
               
                copyItemformat
                
                cell.Rows.Select
                Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=False


            End If
    Next
        
End Sub

Sub copytitleformat()
                '
definition valeur de FormatSheet
                Set FormatSheet 
Worksheets("FORMAT")
                
'definition valeur de Title
                Set Leformat = FormatSheet.Range("B5")
                Leformat.Copy
End Sub

Sub copyconsoformat()
                '
definition valeur de FormatSheet
                Set FormatSheet 
Worksheets("FORMAT")
                
'definition valeur de Conso
                Set Leformat = FormatSheet.Range("B6")
                Leformat.Copy
End Sub

Sub copyItemformat()
                '
definition valeur de FormatSheet
                Set FormatSheet 
Worksheets("FORMAT")
                
'definition valeur de Item
                Set Leformat = FormatSheet.Range("B7")
                Leformat.Copy
End Sub
Pièce jointe:
zip samplefile.zip   [ Taille: 11.75 Ko - Téléchargements: 660 ]
Hors Ligne
Rapport   Haut 

Re: Formattage VBA sur report Excel
#2
Débutant XLPages

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
'
pour forcer la declaration de variable
Option Explicit

'Declaration des varibable en public
'
pour les utiliser dans toutes les sousfonctions

'Variable Worksheet Report
Public Reportsheet As Worksheet

'
Variable Worksheet Format
Public FormatSheet As Worksheet

'Variable Colonne contenant la condition
Public Declencheur As Range

'
Variable qui prendra les valeurs de cellules
'contenant la condition
Public cell As Range

'
Variable Cellule du format dans la feuille format
Public Leformat As Range

Sub Format
()
'définition des trois types de formattage
'
titre
'conso
'
item

'definition valeur de ReportSheet
Set Reportsheet = Worksheets("REPORT")

'
definition valeur de Declencheur
Set Declencheur 
Reportsheet.Range("A1:A50")


    
'Boucle de formattage
    
    For Each cell In Declencheur
    
            '
Format ligne titre
            
If cell.Value "" Then
            
                copytitleformat
                
                cell
.EntireRow.Select
                Range
(SelectionSelection.End(xlToLeft)).Select
                Selection
.PasteSpecial Paste:=xlFormatsOperation:=xlNoneSkipBlanks:= _
                False
Transpose:=False
            End 
If
            
            
'Format ligne conso
            If cell.Value <> "" Then
            
            cell.Select
            If Selection.Font.Bold = True Then
                        
                copyconsoformat
                
                cell.Select
                Range(Selection, Selection.End(xlToRight)).Select
                Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=False
            End If
            End If
            '
Format ligne Item
           
If cell.Font.Bold False Then
               
               copyItemformat
                
                cell
.Select
                Range
(SelectionSelection.End(xlToRight)).Select
                Selection
.PasteSpecial Paste:=xlFormatsOperation:=xlNoneSkipBlanks:= _
                False
Transpose:=False
            
           End 
If
        
Next
End Sub

Sub copytitleformat
()
                
'definition valeur de FormatSheet
                Set FormatSheet = Worksheets("FORMAT")
                '
definition valeur de Title
                Set Leformat 
FormatSheet.Range("B5")
                
Leformat.Copy
End Sub

Sub copyconsoformat
()
                
'definition valeur de FormatSheet
                Set FormatSheet = Worksheets("FORMAT")
                '
definition valeur de Conso
                Set Leformat 
FormatSheet.Range("B6")
                
Leformat.Copy
End Sub

Sub copyItemformat
()
                
'definition valeur de FormatSheet
                Set FormatSheet = Worksheets("FORMAT")
                '
definition valeur de Item
                Set Leformat 
FormatSheet.Range("B7")
                
Leformat.Copy
End Sub
Pièce jointe:
zip samplefileC.zip   [ Taille: 14.16 Ko - Téléchargements: 682 ]
Hors Ligne
Rapport   Haut 

Re: Formattage VBA sur report Excel
#3
Débutant XLPages

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
Hors Ligne
Rapport   Haut 

Re: Formattage VBA sur report Excel
#4
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 : 29-11-2007 21h12
Bonsoir Megaolive,

Tout d'abord, merci pour ton retour ici (mieux vaut tard que jamais )

A vrai dire, je n'ai pas tout compris quant à l'étape 2 d'inversion Conso / Détail...

Plutôt que :
Etat d\'origine :
1 / Conso
2 / Detailconso1
3 / Detail Conso 2

Etat d\'arivée :
2 / Detailconso1
3 / Detail Conso 2
1 / Conso


Ne faut-il pas comprendre...

Etat d\'origine :
1 / Conso1
2 / Detailconso1
3 / Conso2
4 / DetailConso2

Etat d\'arivée :
2 / Detailconso1
1 / Conso1
4 / DetailConso2
3 / Conso2

Je pense que le mieux serait que tu reprennes ton classeur exemple ci-dessus et que tu ajoutes un onglet reflétant exactement le résultat souhaité (un onglet avec les données de départ + un onglet avec le résultat souhaité par automatisme)

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: Formattage VBA sur report Excel
#5
Débutant XLPages

Inscription: 12/07/2007

Messages: 19

Posté le : 29-11-2007 21h40
Citation :
Ne faut-il pas comprendre...
Etat d\'origine :
1 / Conso1
2 / Detailconso1
3 / Conso2
4 / DetailConso2
5/ DetailConso2b

Etat d\'arivée :

2 / Detailconso1
1 / Conso1

4 / DetailConso2
5/ DetailConso2b
3 / Conso2



le bemol qui fait toute la difference, le nombre de DetailConso(n) est variable entre chaque conso...
enfin a mon niveau ca fais toute la différence :p

le code de formattage sur la feuille report fonctionne mais je n ai pas attaqué le renversement des conso
j'ai l impression que mon fichier ne s uploade pas depuis mon pc...je dois avoir un soucis de réseau.


merci pour vos idées ( je résoud mes problèmes réseau et poste le fichier exemple)
Pièce jointe:
zip samplefileD.zip   [ Taille: 14.58 Ko - Téléchargements: 681 ]
Edité par Megaolive le 30/11/2007 11:04:03
Hors Ligne
Rapport   Haut 

Re: Formattage VBA sur report Excel
#6
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 : 29-11-2007 23h23
Re,

Le fichier zip que tu as joint est vide (0 octet) :bof:

(pour info, 80ko sont autorisés par fichier dans ce forum)

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: Formattage VBA sur report Excel
#7
Débutant XLPages

Inscription: 12/07/2007

Messages: 19

Posté le : 30-11-2007 11h06
J'ai glissé le fichier contenant le résultat souhaité.
J'avais des problème d'upload, depuis mon domicile...

Je commence à essayer de syntaxer la partie 2 du traitement à savoir l'inversion dans la table des éléments de conso et des éléments de détails.


Merci pour vos éventuelles idées/conseils ;)
Hors Ligne
Rapport   Haut 

Re: Formattage VBA sur report Excel
#8
Débutant XLPages

Inscription: 12/07/2007

Messages: 19

Posté le : 30-11-2007 14h24
Maydey Maydey ! :p

Je continue donc d'ecrire ma petite macro de formattage :

Je butte sur l'insertion d'une ligne vide après chaque consolidation.

Je n'arrive pas à l'insérer car, j'insère la ligne via :

Et comme vous pouvez le voir dans le code :
"Selection.Insert Shift: xlDown"
Fais descendre la consolidation en insérant une ligne au dessus.
la macro detecte a nouveau une consolidation au dessous...
et c pars en boucle...

je cherche à insérer des lignes dans l'autre sens (en dessous de mes conso...).


'Insertion des ligne vides
        '
sous les consolidations
        
For Each cell In Declencheur
        
            
If cell.Value <> "" Then
            
            cell
.Select
            
                
If Selection.Font.Bold True Then
                cell
.EntireRow.Select
                Selection
.Insert ShiftxlDown
                              
                End 
If
                
            
End If
        
        
Next
Hors Ligne
Rapport   Haut 

Re: Formattage VBA sur report Excel
#9
Débutant XLPages

Inscription: 12/07/2007

Messages: 19

Posté le : 30-11-2007 15h52
Toujours bloqué sur l'insertion des lignes....

Je pense que je vais revoir mon approche globale...

je pense qu'un café sera du meilleur effet!!!

A toute à l'heure
Hors Ligne
Rapport   Haut 

Re: Formattage VBA sur report Excel
#10
Débutant XLPages

Inscription: 12/07/2007

Messages: 19

Posté le : 30-11-2007 17h45
JE dois etre fatigué mais je ne trouve vraiment pas une méthode pour insérer une ligne en fonction d'une condition rencontrée...

Aparemment, il faut que je trouve une autre façon de tester mes cellules pour l'insertion des lignes à vide.

Pour le renversement des items dans le tableaux, je vais plutot m'orienter vers une restructuration de la requête à la base de données de façon à "structurer" le report avant qu'il ne descende dans Excel...

Evidement, cela n'annule pas mon besoin concernant l'insertion de lignes vide et de formatage de mes cellules...

Je navigue sur les forums désespérément en quète d'une méthode un peu clean pour faire ça...

Le fait qu'Excel lors de l'insertion d'une ligne garde en sélection la ligne inséré créé une boucle sur la détection de cellule en gras dans la zone declencheur.

En effet, je me retrouve à insérer une infinité de ligne devant ma première consolidation, amusant mais loin du résultat simple attendu

Je crois comprendre que j'ai besoin de dire a excel,

Quand tu trouve "LA PREMIERE FOIS UNE CONSOLIDATION" insères une ligne sinon skip :p

mais jusque la je n'ai rien produit de très convaincant...
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