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
Bonjour,

Je cherche à exécuter une macro lors de l'enregistrement du classeur qui la contient. Et je ne trouve pas comment faire ?

Merci de votre aide.
A voir également:

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
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 :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub


Tu n'as plus qu'à insérer ton code.

m@rina
1
mikmak2012 Messages postés 4 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 8 août 2007
8 août 2007 à 09:16
Salut Marina et merci pour ta réponse mais... ça marche pas.
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
0
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
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"

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
0
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
IL suffit sinon d'appeler total dans le macro BeforeSave -> Call total
0
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
Oui, tout à fait. Y a même pas besoin de la fonction CALL d'ailleurs, le nom de la macro suffit !

m@rina
0