Simplification et amélioration code VBA

Merlin258413

XLDnaute Occasionnel
Bonjour a tous je suis passé par l'enregistrement auto d'une macro et je désire savoir si ce code peut etre amélioré.
Je ne sais pas si vous avez besoin du fichier excel aussi.
De plus je voudrais apporter une amélioration, j'aimerais qu'il m'affiche dans le TDC 2 les programmes non vides en vous remerciant pour votre aide et excellente journée

Sub FAE()
Sheets("FAE").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Sheets.Add
ActiveSheet.Name = "FAE"
Sheets("Base").Select
Range("A4").Select
ActiveCell.CurrentRegion.Select
Selection.Copy
Sheets("FAE").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

Range("H:H").Delete

Range("A1").Select
ActiveCell.CurrentRegion.Select

ActiveWorkbook.Worksheets("FAE").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("FAE").Sort.SortFields.Add Key:=Range("C2:C200"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("FAE").Sort.SortFields.Add Key:=Range("D2:D200"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("FAE").Sort
.SetRange Range("A1:G55")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With



ActiveCell.CurrentRegion.Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"FAE!R1C1:R55C7", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="FAE!R1C9", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion14
Sheets("FAE").Select
Cells(1, 9).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"ACTIVITE")
.Orientation = xlRowField
.Position = 1


End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Prestations")
.Orientation = xlRowField
.Position = 2
End With

ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique1").PivotFields("Montant"), _
"Somme de Montant", xlSum
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Somme de Montant")
.NumberFormat = "#,##0_ ;[Red]-#,##0 "


End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect "", _
xlDataAndLabel, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").DataPivotField.PivotItems( _
"Somme de Montant").Caption = "TOTAL"
Range("A1").Select

ActiveCell.CurrentRegion.Select
ActiveWorkbook.Worksheets("FAE").PivotTables("Tableau croisé dynamique1"). _
PivotCache.CreatePivotTable TableDestination:="FAE!R1C13", TableName:= _
"Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion14
Sheets("FAE").Select
Cells(1, 13).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Programmes")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Prestations")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"ACTIVITE")
.Orientation = xlRowField
.Position = 2

End With
ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique2").PivotFields("Montant"), _
"Somme de Montant", xlSum
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Somme de Montant")
.NumberFormat = "#,##0_ ;[Red]-#,##0 "
End With
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotSelect "", _
xlDataAndLabel, True
ActiveSheet.PivotTables("Tableau croisé dynamique2").DataPivotField.PivotItems( _
"Somme de Montant").Caption = "TOTAL"



Range("A1").Select

End Sub
 
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Simplification et amélioration code VBA

Bonjour merlin le forum
oui avec le fichier ce serait mieux et pour simplifier oui il y a à faire
a+
Papou:eek:

exemple
Code:
Sheets("FAE").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Sheets.Add
ActiveSheet.Name = "FAE"
tu peux le remplacer par:
Code:
Sheets("FAE").cells.clear
 
Dernière édition:

Merlin258413

XLDnaute Occasionnel
Re : Simplification et amélioration code VBA

Bonjour merci pour votre réponse ci-joint le fichier avec quelques macros associées
1- Une macro sur feuille BASE associée au menu déroulant C2
2- Une macro sur feuille BASE associée au Bouton Rétablir (Permet de rétablir le fichier après avoir lancé la macro du point 1
3- Une macro sur feuille BASE associée au Bouton Etat des FAE c'est le code que je vous ai envoyé au dessus à optimiser

J'ai aussi une macro de protection des cellules qui fonctionne avec le cellule B1 de la feuille PRODUCTION

Encore merci pour votre aide
 

Pièces jointes

  • Production 2014 - SN test.xlsm
    374.3 KB · Affichages: 73

Paritec

XLDnaute Barbatruc
Re : Simplification et amélioration code VBA

Bonsoir Merlin 258413 le forum
bah oui pour t'aider il fallait le fichier mais aussi les explications dans le fichier de comment se servir de ton fichier et après on aurait certainement pu refaire la macro
mais comme là il faut deviner et que je n'ai pas de boule de cristal, bah j'ai refermé et j'ai répondu ailleurs
Sur XLD si tu n'as pas de réponse c'est que ta demande est mal faite ou mal illustrée ou mal commentée, et toi tu n'as rien mis alors !!!!!
a+
Papou:eek:
 

Merlin258413

XLDnaute Occasionnel
Re : Simplification et amélioration code VBA

Bonjour vous avez entièrement raison donc j'explique l'utilisation de mon fichier
1-Dans la feuille base dans calculons tous les mois de Chiffre d'affaires par activités et par programme
La colonne A (Mois) représente le mois de clôture
La colonne C L'activité
La colonne D Le mois de la prestation : la je m'explique chaque mois un chiffre d'affaire peut passer d'un statut FAE (facture à établir) à un statut FACTURE. La FAE fonctionnant comme une provision peut s'avérer sur ou sous estimée donc le mois de clôture après je dois faire un ajustement.
Exemple je suis au mois de mai j'ai une activité F qui m'a généré pour la prestation de mai et pour le programme A350 10 k€.
j'arrive à la clôture de juin il s'avère que j'ai facturé 12 k€ donc concernant les 10 k€ je passe d'un statut de FAE à un statut FACTURE sur le mois de juin (colonne M et N) et je rajoute un ajustement sur N(juin) de 2 k€en FACTURE

Tous les montants se trouvent en colonne G

La colonne H représente aussi le mois de clôture nous pouvons y retrouver les encours, les FAE du mois mais aussi toutes celles des mois antérieurs qui n'ont pas encore été facturées. Ce qui explique qu'une prestation peut être plusieurs mois en statut FAE.


1- Comment fonctionne ce fichier et surtout les macros existantes et ce que je veux obtenir

Toutes les semaines je dois mettre à jour l'état des FAE, donc étant en clôture du mois de juin j'indique sur le filtre C2 mon dernier mois de clôture ici juin. Ce qui a pour conséquence de me donner un état des FAE à fin juin. en fait je génère la macro Sub suivi_fae()

LE bouton rétablir me sert à afficher le filtre suite au lancement de cette macro Sub suivi_fae()

Le bouton ETat des FAE me génère dans la feuille FAE un tableau donnant l'état des FAE Sub FAE()
le premier tableau généré colonne A à G de ce tableau en découle le TDC i:J qui me donne l'état des FAE par ACTIVITE et mois de prestation et un autre par Programme/ACTIVITE/Prestation

Attention j'ai une macro qu'on m'a crée qui me protége les cellules de la base en fonction du filtre appliquée sur la feuille production B1 ce filtre ne doit pas être supprimer car il me calcul une formule (Provision organique et anciennement TP)
L(objectif de cette macro est de protéger toutes les cellule en amont du filtre B1 cad les cellule H5 à T nombre de ligne indéfinie
Je veux toujours avoir accès à tous les filtres pendant cette protection de la ligne 4
Exemple je me situe en juin j'indique dans ma feuille production juin donc on va me protéger toutes les cellules en modification de la feuille base H5 à M264 (mais cela peut être plus ici je précise uniquement l'exemple on aurait bien pu avoir plus de ligne et la ligne de fin devra donc etre variable)

Mon besoin:
1- Simplifier ou améliorer les macros existantes
2- Sub suivi_fae() cette macro me donne donc l'état préparatoire de l'état des FAE en fonction du filtre indiqué cellule C2
Idéalement ce serait de générer mon état des FAE sur la feuille FAE sans passer par ce filtre. Peut être en créant un bouton qui me génère un formulaire vba ou il y aurait un menu déroulant ou j'aurais qu'à sélectionner une date (les dates des filtres sont sur la feuille Liste colonne E)

Concernant l'état généré je pense que ce serait bien de ne pas avoir l'état préparatoire de la feuille FAE colonne A à G
Mais d'avoir automatique les Tdc ou les tableaux de synthèse à savoir

1- Etat des FAE par activité /mois de prestations
2- Etat des FAE par Programme/Activité/Mois de prestation (avec si possible si on passe par un tdc avoir l'option Afficher les étiquettes d'éléments sous forme de tableau sous le champs en ligne programme et activité)
Sur l'étiquette programme je désirerai avoir l'option dans paramètre de champs Répéter les étiquettes d'éléments
Je ne veux juste un total par programme

Voila pour les FAE si possible sur d'autres feuilles la même chose pour le statut encours et FACTURE cad
Etat des ENCOURS par Programme/Activité/Mois de prestation
Etat des FACTURE par Programme/Activité/Mois de prestation

Je pense que mes codes sont très mauvais car je suis passé notamment par l'enregistrement de macro


Après je ne sais pas si par exemple les formules du calcul de production ou production par client ou suivi FAE et encours peuvent être améliorées soit par formiule on m'a parlé de gestion de Bd avec excel ou par vba
La feuille PRODUCTION est le resultat de cette usine à gaz, elle me donne pour le mois de clôture colonne A fichier de base les sommes FACTURE elle me donne aussi la variation d'encours entre le mois de clôture et celui de m-1 + la variation d'encours c'est pour cela que nous avons les feuilles SUivi FAE-encours pour le calcul de la variation je ne sais pas l'automatiser

La feuille PRODUCTION PAR CLIENT est identique mais par CLIENT (cad la colonne ACTIVITE de ma feuille de base)

J'aimerai créer aussi une feuille qui me donnerait la PRODUCTION par Programme
et une autre feuille qui me donnerait par programme mais au lieu de prendre la date de clôture la date de prestations car comme je l'indiquais on peut avoir des ajustement les mois d'après comptablement (clôture) ces ajustements ne sont pas pris en compte mais si on veut connaitre la véritable activité d'un programme il faut prendre la production du mois de prestation

JE vous remercie de toute l'aide que vous pouvez m'apporter et de tout le temps passé
Si je ne suis pas clair je répondrai à vos demandes
Bonne journée et bon courage pour mon usine à gaz
 

Discussions similaires

Statistiques des forums

Discussions
312 165
Messages
2 085 883
Membres
103 014
dernier inscrit
moimoi31