Problème de lancement de macro en Workbook_BeforeSave

darkpeter

XLDnaute Nouveau
Bonjour,

J'ai un petit soucis sur l'une de mes macros.

J'exporte des données sur excel depuis un logiciel tiers.

Sur ce fichier, je souhaite lancer une macro de mise en forme de cellules reprennant la mise en forme des cellules précédentes via la fonction

Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.PasteSpecial Paste:=xlPasteFormats

Je souhaite que la macro se lance dès lors que le fichier est enregistré (automatiquement par le logiciel tiers).

Je lance donc la fonction suivante dans le ThisWorkbook (Colorize correspond à ma macro):

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call Colorize
End Sub

Problème : la macro n'est pas lancée et lorsque j'ouvre mon fichier, la mise en forme n'est pas effectuée. Cependant, lorsque je sauve moi même le fichier ouvert, la macro se lance correctement.

Pensez vous savoir d'ou peut provenir le problème?

Merci par avance,
Cdlt,
Pierre
 

tototiti2008

XLDnaute Barbatruc
Re : Problème de lancement de macro en Workbook_BeforeSave

Bonjour darkpeter,

Bienvenue sur XLD,

Pensez vous savoir d'ou peut provenir le problème?

Sans doute du logiciel tiers qui n'active pas les macros, et là pas trop d'idée comme ça pour arranger ça...
Peut-être envisager de lancer ta macro après, soit à l'ouverture du fichier, soit faire une macro qui réouvre un fichier, applique ta macro puis l'enregistre et le ferme ?
 

darkpeter

XLDnaute Nouveau
Re : Problème de lancement de macro en Workbook_BeforeSave

Bonsoir !

Merci pour votre message de bienvenue.

Ma macro est bien lancée : une partie de la macro doit mettre certaines cellules en couleur et le fait bien.
C'est la seconde partie de la macro, qui met en forme les cellules via copier/coller qui ne fonctionne pas.
Dans le cas ou je mets le code, les cellules mises en couleur correctement sans ne le sont plus :'(.

Merci,
Pierre
 

tototiti2008

XLDnaute Barbatruc
Re : Problème de lancement de macro en Workbook_BeforeSave

Re,

Pas facile à reproduire pour nous sans le logiciel tiers, bizarre qu'une partie de la macro est exécutée et l'autre pas
Peux-tu nous mettre le code de la macro en entier, en précisant bien ce qui s'exécute et ce qui ne s'exécute pas ?
 

darkpeter

XLDnaute Nouveau
Re : Problème de lancement de macro en Workbook_BeforeSave

Je vous poste ça demain matin.

Le plus étrange, c'est que si j'ouvre le fichier excel extrait (et contenant la macro) et que j'enregistre en faisant fichier/enregistrer, toute la macro fonctionne correctement.

Je me demande si cela ne viens pas du
Private Sub Workbook_BeforeSave

Merci,
Pierre
 

Staple1600

XLDnaute Barbatruc
Re : Problème de lancement de macro en Workbook_BeforeSave

Bonsoir à tous

darkpeter
Si j'étais toi:
1) export de mon code VBA dans un *.bas (Dans VBE : Fichier/Exporter un fichier
2) création d'un VBS* pour importer ce bas dans le fichier Excel généré par le logiciel tiers
3) création sur le Bureau d'un raccourci pour lancer le vbs

*: tu peux ajouter dans le VBS outre l'import , l'ouverture du fichier puis l'éxécution du code VBA
(tu peux même faire cela en mode silencieux)

Tu trouveras sur le Web de nombreux exemples pour piloter Excel à travers un VBS.
 

darkpeter

XLDnaute Nouveau
Re : Problème de lancement de macro en Workbook_BeforeSave

Hello !

Voici le code de ma macro:

Code:
Sub Colorize()
Dim Lastcell As Variant
Dim Columncolor As Variant
Dim NbCol As Integer
Dim NbLig As Integer
Dim colonnesgauche As Integer
Dim Nbcolleft As Integer
Dim Nbcolright As Integer
Dim CurrentDate As Date
Dim CurrentMonth As Variant
Dim Months(11) As Integer
Dim I As Long
Dim J As Long
Dim Testcolumn As Integer
Dim formula As String
Dim proratecolumn As Integer
Dim totalfcstqty As Variant
Dim colonnesdroite As Integer
Dim Debutdroite As Integer
Dim findroite As Integer
Dim Year As Integer
NbLig = ActiveSheet.UsedRange.Rows.Count
NbCol = ActiveSheet.UsedRange.Columns.Count


'Gestion du remplissage des mois de forecast
Nbcolleft = 22
Nbcolright = 33
Testcolumn = 20
CurrentDate = Range("J1").Value
CurrentMonth = Month(CurrentDate)

'init tableau des mois
'I = 0
'While I < 12
'    Months(I) = Nbcolleft + I
'    I = I + 1
'Wend
Months(0) = 31
Months(1) = 32
Months(2) = 33
Months(3) = 22
Months(4) = 23
Months(5) = 24
Months(6) = 25
Months(7) = 26
Months(8) = 27
Months(9) = 28
Months(10) = 29
Months(11) = 30

For I = 3 To NbLig
    For J = Nbcolleft To Nbcolright
        If Cells(I, Testcolumn).Value = "Sales" Then
            Cells(I, J).Interior.Color = RGB(102, 255, 255)
            ElseIf Cells(I, Testcolumn).Value = "Estimate" Then
                If J < Months(CurrentMonth - 1) Then
                    Cells(I, J).Interior.Color = RGB(102, 255, 255)
                Else: Cells(I, J).Interior.Color = RGB(247, 150, 70)
                End If
                ElseIf Cells(I, Testcolumn).Value = "Forecast" Then
                    Cells(I, J).Interior.Color = RGB(247, 150, 70)
        End If
    Next J
Next I

'Mise en forme des colonnes de gauche
colonnesgauche = 4
Year = 21

For I = 4 To NbLig
    For J = 1 To colonnesgauche
        Cells(I, J).Select
        Selection.Interior.Color = RGB(255, 204, 153)
        Selection.HorizontalAlignment = xlCenter
    Next J
Next I
Endsub

Cela marche correctement jusqu'à l'étape Cells(I, J).Interior.Color = RGB(247, 150, 70)

L'étape
Code:
For I = 4 To NbLig
    For J = 1 To colonnesgauche
        Cells(I, J).Select
        Selection.Interior.Color = RGB(255, 204, 153)
        Selection.HorizontalAlignment = xlCenter
    Next J
Next I

ne fonctionne pas.

Tout fonctionne correctement si j'enregistre moi même le document via la disquette d'enregistrement :'(

Merci par avance,

Pierre
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 145
Membres
103 130
dernier inscrit
FRCRUNGR