Automatiser_calcul_excel_en_VBA
j'ai un fichier excel A:K(poste,soc,centre,date,site,of,cad,cad_kg,num_suiv,article,description_article,equi,equip,qty_prod,qty_prod_kg,Qty_reje,QTY_reje_kg,temps ouverture...
| Poste | SOC | Centre | OFs | ARTICLE | DES_ARTICLE | QTY_PROD | QTY_PROD_KG | QTY_REJE | QTY_REJE_KG | TPS_OUV |
). j'ai calculé 3 clés:
Sub CalculerCleHassia()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pc As PivotCache
Dim rngSource As Range
Dim wsPivot As Worksheet
Dim lastRow As Long
' Définir la feuille contenant les données source
Set ws = ThisWorkbook.Sheets("Feuil1")
' Déterminer la dernière ligne de données
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row
' Définir la plage des données source
Set rngSource = ws.Range("A1:A" & lastRow)
' Créer une nouvelle feuille pour le tableau croisé
On Error Resume Next
Set wsPivot = ThisWorkbook.Sheets("Cle_HASSIA")
If wsPivot Is Nothing Then
Set wsPivot = ThisWorkbook.Sheets.Add
wsPivot.Name = "Cle_HASSIA"
Else
wsPivot.Cells.Clear
End If
On Error GoTo 0
' Créer le cache du tableau croisé
Set pc = ThisWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=rngSource)
' Créer le tableau croisé
Set pt = pc.CreatePivotTable( _
TableDestination:=wsPivot.Range("A3"), _
TableName:="CleVolumePivot")
' Ajouter les champs au tableau croisé
With pt
' Ajouter les champs pour filtrer
.PivotFields("SOC").Orientation = xlPageField
.PivotFields("CENTRE").Orientation = xlPageField
.PivotFields("POSTE").Orientation = xlPageField
' Définir les filtres
.PivotFields("SOC").CurrentPage = "GIAS IND" ' Filtrer par SOC
.PivotFields("CENTRE").CurrentPage = "GIAS5" ' Filtrer par Centre
.PivotFields("POSTE").CurrentPage = "HASSIA" ' Filtrer par Poste
' Ajouter les champs pour les lignes et les données
.PivotFields("DES_ARTICLE").Orientation = xlRowField
With .PivotFields("QTY_PROD_KG")
.Orientation = xlDataField
.Function = xlSum
.NumberFormat = "#,##0"
End With
End With
' Ajouter une colonne pour la clé
Dim ptRange As Range
Dim totalVolume As Double
Dim row As Range
Dim volumeCol As Integer
Dim keyCol As Integer
Set ptRange = pt.RowRange.Offset(0, 1)
With pt.DataBodyRange
totalVolume = .Cells(.Cells.Count).Value
End With
' Ajouter une colonne pour la clé
ptRange.Cells(1, ptRange.Columns.Count + 1).Value = "Clé_hassia"
For Each row In ptRange.Rows
volumeCol = 5
If IsNumeric(row.Value) Then
row.Offset(0, 1).Value = Round((row.Value / totalVolume) * 100, 2)
End If
Next row
MsgBox "Clé calculée avec succès !", vbInformation
End Sub
Sub CalculerCleManuel()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pc As PivotCache
Dim rngSource As Range
Dim wsPivot As Worksheet
Dim lastRow As Long
' Définir la feuille contenant les données source
Set ws = ThisWorkbook.Sheets("Feuil1")
' Déterminer la dernière ligne de données
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row
' Définir la plage des données source
Set rngSource = ws.Range("A1:K" & lastRow)
' Créer une nouvelle feuille pour le tableau croisé
On Error Resume Next
Set wsPivot = ThisWorkbook.Sheets("Cle_MANUEL")
If wsPivot Is Nothing Then
Set wsPivot = ThisWorkbook.Sheets.Add
wsPivot.Name = "Cle_MANUEL"
Else
wsPivot.Cells.Clear
End If
On Error GoTo 0
' Créer le cache du tableau croisé
Set pc = ThisWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=rngSource)
' Créer le tableau croisé
Set pt = pc.CreatePivotTable( _
TableDestination:=wsPivot.Range("A3"), _
TableName:="CleVolumePivot")
With pt
' Ajouter les champs pour filtrer
.PivotFields("SOC").Orientation = xlPageField
.PivotFields("CENTRE").Orientation = xlPageField
.PivotFields("POSTE").Orientation = xlPageField
' Définir les filtres pour SOC et CENTRE
.PivotFields("SOC").CurrentPage = "GIAS IND"
.PivotFields("CENTRE").CurrentPage = "GIAS5"
' Gérer le filtrage des postes
Dim item As PivotItem
Dim visiblePostes As Variant
Dim poste As Variant
' Liste des postes à afficher
visiblePostes = Array("MANUEL", "MOMELAN")
' Désactiver les mises à jour automatiques
.ManualUpdate = True
' Parcourir les postes et activer/désactiver selon la liste
For Each item In .PivotFields("POSTE").PivotItems
item.Visible = False ' Désactiver par défaut
For Each poste In visiblePostes
If item.Name = poste Then
item.Visible = True ' Activer les postes souhaités
Exit For
End If
Next poste
Next item
' Réactiver les mises à jour automatiques
.ManualUpdate = False
' Ajouter les champs pour les lignes et les données
.PivotFields("DES_ARTICLE").Orientation = xlRowField
With .PivotFields("QTY_PROD_KG")
.Orientation = xlDataField
.Function = xlSum
.NumberFormat = "#,##0"
End With
End With
' Ajouter une colonne pour la clé
Dim ptRange As Range
Dim totalVolume As Double
Dim row As Range
Dim volumeCol As Integer
Dim keyCol As Integer
Set ptRange = pt.RowRange.Offset(0, 1)
With pt.DataBodyRange
totalVolume = .Cells(.Cells.Count).Value
End With
' Ajouter une colonne pour la clé
ptRange.Cells(1, ptRange.Columns.Count + 1).Value = "Clé (%)"
For Each row In ptRange.Rows
volumeCol = 5
If IsNumeric(row.Value) Then
row.Offset(0, 1).Value = Round((row.Value / totalVolume) * 100, 2)
End If
Next row
MsgBox "Clé calculée avec succès !", vbInformation
End Sub
Sub CalculerCle_tamtas()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pc As PivotCache
Dim rngSource As Range
Dim wsPivot As Worksheet
Dim lastRow As Long
' Définir la feuille contenant les données source
Set ws = ThisWorkbook.Sheets("Feuil1")
' Déterminer la dernière ligne de données
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row
' Définir la plage des données source
Set rngSource = ws.Range("A1:K" & lastRow)
' Créer une nouvelle feuille pour le tableau croisé
On Error Resume Next
Set wsPivot = ThisWorkbook.Sheets("Cle_Tamtas")
If wsPivot Is Nothing Then
Set wsPivot = ThisWorkbook.Sheets.Add
wsPivot.Name = "Cle_Tamtas"
Else
wsPivot.Cells.Clear
End If
On Error GoTo 0
' Créer le cache du tableau croisé
Set pc = ThisWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=rngSource)
' Créer le tableau croisé
Set pt = pc.CreatePivotTable( _
TableDestination:=wsPivot.Range("A3"), _
TableName:="CleVolumePivot")
With pt
' Ajouter les champs pour filtrer
.PivotFields("SOC").Orientation = xlPageField
.PivotFields("CENTRE").Orientation = xlPageField
.PivotFields("POSTE").Orientation = xlPageField
' Définir les filtres pour SOC et CENTRE
.PivotFields("SOC").CurrentPage = "GIAS IND"
.PivotFields("CENTRE").CurrentPage = "GIAS5"
.PivotFields("POSTE").CurrentPage = "TAMTAS"
' Ajouter les champs pour les lignes et les données
.PivotFields("DES_ARTICLE").Orientation = xlRowField
With .PivotFields("QTY_PROD_KG")
.Orientation = xlDataField
.Function = xlSum
.NumberFormat = "#,##0"
End With
End With
' Ajouter une colonne pour la clé
Dim ptRange As Range
Dim totalVolume As Double
Dim row As Range
Dim volumeCol As Integer
Dim keyCol As Integer
Set ptRange = pt.RowRange.Offset(0, 1)
With pt.DataBodyRange
totalVolume = .Cells(.Cells.Count).Value
End With
' Ajouter une colonne pour la clé
ptRange.Cells(1, ptRange.Columns.Count + 1).Value = "Clé_tamtas"
For Each row In ptRange.Rows
volumeCol = 5
If IsNumeric(row.Value) Then
row.Offset(0, 1).Value = Round((row.Value / totalVolume) * 100, 2)
End If
Next row
MsgBox "Clé calculée avec succès !", vbInformation
End Subj'ai un autre fichier A:I(AXE1,AXE2,AXE3,Concatener ,Clé ,Atelier ,MCSG,MGDI,MIND)
qui contient montant de chaque clé, je veux calculer somme des montants des 3 clés en multipliant %chaque clé * montant de chaque clé puis les sommer et les diviser par quantite totale comment le faire en vba
j'ai creer une table qui affiche le montant de chaque clé ,ci-joint le fichier contenant les 2 feuilles: 1er fichier pour le calcul des clés, comment faire ensuite pour calculer cout industriel de chaque article qui =cle_tamtas * MIND(cle=TAMTAS) + cleManuel * MIND(cle=MANUEL) + cleHassia * mind(cle=HASSIA) / quantite totale
Bonjour tout d'abord,
Merci de bien vouloir lire ou relire La charte et notamment le point 2 dans le paragraphe "Autres règles à respecter"
Pour vos codes vous disposez d'une icone </> sur laquelle il vous suffit de cliquer pour y placer votre code. Au final c'est nettement plus lisible. J'ai corrigé votre post pour que vous voyiez.
Dans votre profil, vous mentionnez trois versions excel, quelle est la bonne ?
Pour la trouver sous windows : ---> menu Fichier > Compte (en bas) + Clic sur le point d'interrogation puis sur la page suivante au-dessus vous trouvez votre version
Crdlt
Bonjour,
Pour nous fournir un code il faut utiliser :
A+
Oups Dan, on se bouscule, bien le bonjour