Excel : execution automatiqued'une macro
Fermé
mikmak2012
Messages postés
4
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
8 août 2007
-
7 août 2007 à 12:45
m@rina Messages postés 21080 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 15 novembre 2024 - 9 août 2007 à 16:23
m@rina Messages postés 21080 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 15 novembre 2024 - 9 août 2007 à 16:23
A voir également:
- Excel : execution automatiqued'une macro
- Liste déroulante excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Mise en forme conditionnelle excel - Guide
3 réponses
m@rina
Messages postés
21080
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
15 novembre 2024
11 350
7 août 2007 à 19:56
7 août 2007 à 19:56
Bonjour,
Il te faut une macro événementielle à mettre dans ThisWorkbook.
Dans la première liste déroulante, tu choisis Workbook.
Dans la deuxième liste déroulante, tu choisis BeforeSave
ce qui te donne :
Tu n'as plus qu'à insérer ton code.
m@rina
Il te faut une macro événementielle à mettre dans ThisWorkbook.
Dans la première liste déroulante, tu choisis Workbook.
Dans la deuxième liste déroulante, tu choisis BeforeSave
ce qui te donne :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
Tu n'as plus qu'à insérer ton code.
m@rina
m@rina
Messages postés
21080
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
15 novembre 2024
11 350
8 août 2007 à 19:48
8 août 2007 à 19:48
Bonjour,
Tu as fait deux macros !
Je n'ai pas regardé ta macro "total" mais c'est le code de cette macro qui doit se trouver entre l'instruction "Private sub..." et "End sub"
m@rina
Tu as fait deux macros !
Je n'ai pas regardé ta macro "total" mais c'est le code de cette macro qui doit se trouver entre l'instruction "Private sub..." et "End sub"
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim participants, NbColonnes, NbLignes, I, J As Integer Dim charges As Double Dim fonctionnement As Double Dim produits As Double Dim numFeuilles As Integer Dim numTotal As Integer numTotal = Worksheets.Count ' Traitement de chaque séjour For numFeuilles = 1 To (Worksheets.Count - 1) ' intitulé Worksheets(numTotal).Cells(numFeuilles + 1, 1) = Worksheets(numFeuilles).Name etc... End Sub
m@rina
Sir_DEC
Messages postés
143
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
12 mai 2012
75
9 août 2007 à 09:15
9 août 2007 à 09:15
IL suffit sinon d'appeler total dans le macro BeforeSave -> Call total
m@rina
Messages postés
21080
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
15 novembre 2024
11 350
9 août 2007 à 16:23
9 août 2007 à 16:23
Oui, tout à fait. Y a même pas besoin de la fonction CALL d'ailleurs, le nom de la macro suffit !
m@rina
m@rina
8 août 2007 à 09:16
Je me suis planté dans ccm et j'ai mis le post comme résolu !
Voici mon code. Dis-moi si tu vois ou ça m.....
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.total
End Sub
Public Sub total()
Dim participants, NbColonnes, NbLignes, I, J As Integer
Dim charges As Double
Dim fonctionnement As Double
Dim produits As Double
Dim numFeuilles As Integer
Dim numTotal As Integer
numTotal = Worksheets.Count
' Traitement de chaque séjour
For numFeuilles = 1 To (Worksheets.Count - 1)
' intitulé
Worksheets(numTotal).Cells(numFeuilles + 1, 1) = Worksheets(numFeuilles).Name
' total participants prévus
Worksheets(numTotal).Cells(numFeuilles + 1, 2) = Worksheets(numFeuilles).Range("total_participants").Value
participants = participants + Worksheets(numFeuilles).Range("total_participants").Value
' total charges
Worksheets(numTotal).Cells(numFeuilles + 1, 3) = Worksheets(numFeuilles).Range("prev_charges").Value
charges = charges + Worksheets(numFeuilles).Range("prev_charges").Value
' total fonctionnement
Worksheets(numTotal).Cells(numFeuilles + 1, 4) = Worksheets(numFeuilles).Range("prev_fonctionnement").Value
fonctionnement = fonctionnement + Worksheets(numFeuilles).Range("prev_fonctionnement").Value
' % fonctionnement
Worksheets(numTotal).Cells(numFeuilles + 1, 5) = Worksheets(numFeuilles).Range("prev_fonctionnement").Value / Worksheets(numFeuilles).Range("prev_produits").Value
' produits
Worksheets(numTotal).Cells(numFeuilles + 1, 6) = Worksheets(numFeuilles).Range("prev_produits").Value
produits = produits + Worksheets(numFeuilles).Range("prev_produits").Value
' Solde
Worksheets(numTotal).Cells(numFeuilles + 1, 7) = Worksheets(numFeuilles).Range("prev_produits").Value - Worksheets(numFeuilles).Range("prev_charges").Value
' Solde + fonctionnement
Worksheets(numTotal).Cells(numFeuilles + 1, 8) = Worksheets(numFeuilles).Range("prev_produits").Value + Worksheets(numFeuilles).Range("prev_fonctionnement").Value - Worksheets(numFeuilles).Range("prev_charges").Value
Next
'Totaux
' intitulé
Worksheets(numTotal).Cells(numTotal + 1, 1).Value = "Total"
' total participants prévus
Worksheets(numTotal).Cells(numTotal + 1, 2).Value = participants
' total charges
Worksheets(numTotal).Cells(numTotal + 1, 3).Value = charges
' total fonctionnement
Worksheets(numTotal).Cells(numTotal + 1, 4).Value = fonctionnement
' % fonctionnement
Worksheets(numTotal).Cells(numTotal + 1, 5).Value = fonctionnement / produits
' produits
Worksheets(numTotal).Cells(numTotal + 1, 6).Value = produits
' Solde
Worksheets(numTotal).Cells(numTotal + 1, 7).Value = produits - charges
' Solde + fonctionnement
Worksheets(numTotal).Cells(numTotal + 1, 8).Value = produits + fonctionnement - charges
NbColonnes = Worksheets(numTotal).UsedRange.Columns.Count
NbLignes = numTotal + 1
For I = 1 To NbLignes
For J = 1 To NbColonnes
With Worksheets(numTotal).Cells(I, J)
If .Value < 0 Then
.Font.ColorIndex = 3
Else
.Font.ColorIndex = 1
End If
' format général
.Borders.ColorIndex = 1
.Borders.Weight = xlThin
.Borders.LineStyle = xlContinuous
.Font.Bold = False
.Interior.ColorIndex = 2
' 1ere ligne
If I = 1 Then
.Borders(xlEdgeTop).Weight = xlMedium
.Interior.ColorIndex = 15
.Font.Bold = True
End If
' 1ere colonne
If J = 1 Then
.Borders(xlEdgeLeft).Weight = xlMedium
.Font.Bold = True
End If
' derniere ligne
If I = NbLignes Then
.Borders(xlEdgeTop).LineStyle = xlDouble
.Borders(xlEdgeBottom).Weight = xlMedium
.Font.Bold = True
End If
' derniere colonne
If J = NbColonnes Then
.Borders(xlEdgeRight).Weight = xlMedium
End If
End With
Next J
Next I
End Sub