Macro ne fonctionne plus dans Workbook_Open

Marie1982

XLDnaute Nouveau
Bonjour,

Je suis nouvelle sur ce forum et j'avoue ne pas être familière avec comment un forum fonctionne.

En tout cas, voici mon problème:

J'ai enregistré une macro que j'ai ensuite modifiée à mes besoins. En résumé, cette macro ouvre un autre fichier Excel (qui contient des données), enregistre sous un nouveau nom, formatte les données, insère une nouvelle feuille puis cré un graphique.

Quand j'exécute la macro à l'endroit où elle a été enregistré la première fois, tout fonctionne.

Quand je la met dans Workbook_open, on dirait que les références sont mêlées: FichierMacro ouvre bel et bien FichierData (noms fictifs de fichiers). Ensuite le FichierData est renommé FichierGraphique puis les données sont formattée et une nouvelle page est insérée. Jusque là tout va bien. Cependant, quand je crée le graphique, au lieu de le mettre dans la feuille que je viens de créer dans FichierGraphique, il la met dans la feuille de FichierMacro!!!

Pourtant tout fonctionne bien quand je l'exécute manuellement...

Pouvez-vous m'aider? Les références ne fonctionnent plus à partir du moment où j'utilise ActiveSheet.... J'ai essayé d'ajouter un Activate mais cela ne fonctionne pas plus (je ne l'avais pas dans la version manuelle de la macro et cela fonctionnait)

Code:
Dim sFichier As String
Dim sDate As String
Dim sAnnee As String
Dim sMois As String
Dim sJour As String
Dim sPath As String

    sPath = "C:\testexcel\"
    sDate = Date - 1
    sAnnee = Year(sDate)
    sMois = Month(sDate)
    If Len(sMois) < 2 Then
        sMois = "0" & sMois
    End If
    sJour = Day(sDate)
    If Len(sJour) < 2 Then
        sMois = "0" & sJour
    End If
    

    'Creation nom de fichiers
    sFichier = Right(sAnnee, 2) & sMois & sJour & "_essai"
    sFichierNouv = Right(sAnnee, 2) & sMois & sJour & "Graph_essai"

    'Vérifie si fichier existe
    If FileFolderExists(sPath & sFichier & ".xls") Then

    'Ouvre fichier avec les données
        Workbooks.Open Filename:=sPath & sFichier & ".xls"
        
     'Renomme le fichier
        ActiveWorkbook.SaveAs Filename:= _
            sPath & sFichierNouv & ".xls", FileFormat:=xlExcel8, _
            Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
            CreateBackup:=False
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
            ), Array(14, 1), Array(15, 1)), TrailingMinusNumbers:=True
        
       Workbooks(sFichierNouv & ".xls").Activate
       ActiveWorkbook.CheckCompatibility = False
       
    'Creation du graphique
        ActiveWorkbook.Sheets.Add.Name = "Graphique"
        'ActiveSheet.Name = "Graphique"
        ActiveWorkbook.Sheets("Graphique").Activate
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlXYScatterLines
        ActiveChart.HasTitle = True
        ActiveChart.ChartTitle.Text = sJour & "-" & sMois & "-" & sAnnee
    'Ajout courbe 1
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(1).Name = "=""Courbe 1 (%)"""
        ActiveChart.SeriesCollection(1).XValues = _
           "='" & sFichier & "'!$B$7:$B$12"
        ActiveChart.SeriesCollection(1).Values = _
           "='" & sFichier & "'!$C$7:$C$12"
    'Ajout courbe 2
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(2).Name = "=""Courbe 2"""
        ActiveChart.SeriesCollection(2).XValues = _
            "='" & sFichier & "'!$B$7:$B$12"
        ActiveChart.SeriesCollection(2).Values = _
            "='" & sFichier & "'!$D$7:$D$12"
    'Ajout courbe 3
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(3).Name = "=""Courbe3"""
        ActiveChart.SeriesCollection(3).XValues = _
            "='" & sFichier & "'!$B$7:$B$12"
        ActiveChart.SeriesCollection(3).Values = _
            "='" & sFichier & "'!$E$7:$E$12"
    'Ajout courbe 4
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(4).Name = "=""Courbe 4"""
        ActiveChart.SeriesCollection(4).XValues = _
            "='" & sFichier & "'!$B$7:$B$12"
        ActiveChart.SeriesCollection(4).Values = _
            "='" & sFichier & "'!$G$7:$G$12"
    
        'Workbooks(sFichierNouv & ".xls").Activate
        'ActiveWorkbook.Save
        'ActiveWorkbook.Close
         
        'Application.Quit
    
    End If

Merci de m'aider je patauge un peu.

Marie
 

youky(BJ)

XLDnaute Barbatruc
Re : Macro ne fonctionne plus dans Workbook_Open

Bonjour Marie1982,
Bienvenue, le forum c'est comme les macros faut pas avoir peur de pousser les portes.
C'est aussi le meilleur moyen d'apprendre et de s'en souvenir.
Pour en revenir à ta macro personnellement je là metterai dans module1 en l'appelant exemple "ouverture" donc......
Sub ouverture()
'ta macro
End Sub

et en workbook_Open
Private Sub Workbook_Open()
ouverture
End Sub

Je n'ai rien testé mais ceci reste à essayer en 1er lieu
Si tu as toujours le bug merci de bien nous indiquer la ligne (en Jaune)
A+
 

Marie1982

XLDnaute Nouveau
Re : Macro ne fonctionne plus dans Workbook_Open

Wow merci, parfois la solution la plus simple ne nous vient tout simplement pas...

Ta solution fonctionne à merveille, par contre je ne comprend pas trop pourquoi... Si quelqu'un peut m'expliquer ça m'aiderait probablement à mieux comprendre comment fonctionne les activations dans Excel...

Merci beaucoup encore une fois.
 

youky(BJ)

XLDnaute Barbatruc
Re : Macro ne fonctionne plus dans Workbook_Open

Ravis d'apprendre que tout fonctionne,

Expliquer le pourquoi c'est pas facile, sans doute les événements Open ou Activate
ne peuvent excécuter directement toutes sortes de choses.

A savoir je crée souvent des menus flottants que je trouve trés pratique ceux-ci étant fabriqué à l'ouverture de tel ou tel fichier en Open et je me suis rendu compte qu'il faut
obligatoirement en passer par une macro en module.
Bien Amicalement
 

skoobi

XLDnaute Barbatruc
Re : Macro ne fonctionne plus dans Workbook_Open

Bonjour Marie1982, youky(BJ),

Wow merci, parfois la solution la plus simple ne nous vient tout simplement pas...

Ta solution fonctionne à merveille, par contre je ne comprend pas trop pourquoi... Si quelqu'un peut m'expliquer ça m'aiderait probablement à mieux comprendre comment fonctionne les activations dans Excel...

Merci beaucoup encore une fois.

Quand tu veux manipuler d'autres classeurs ou feuilles dans les modules types documents (ThisWorkbook, Feuil1, Feuil2, etc), il est préférable d'affecter ces objets à des variables que tu manipules par la suite car en effet, utiliser Activate dans ces modules peux jouer des mauvais tour et tu nous en donne un parfait exemple.
Voici un exemple:
Code:
Dim Wb as WorkBook, Sh as WorkSheet
Set Wb = Workbooks(sFichierNouv & ".xls")
Set Sh = Wb.Sheets.Add
Sh.Name = "toto"
Et ce code peut être placé dans n'importe quel module.
 

Marie1982

XLDnaute Nouveau
Re : Macro ne fonctionne plus dans Workbook_Open

En fait, j'ai un peu peur de modifier ce code, je ne sais pas par où commencer pour le rendre plus propre. Il fonctionne tel qu'il est alors je ne veux pas passer trop de temps pour le modifier.

Aussi, j'ai créé un autre fil de discussion mais j'ai voulu changer la propriété charttype de mon graph pour "xlXYScatterSmoothNoMarker" à la place de xlXYScatterLines mais le changement ne s'applique pas, le graph se crée toujours par défaut en xlXYScatterLines.

Je voudrais aussi redimensionner automatiquement le graph sur la page pour qu'il soit plus grand... j'ai pas encore trouvé comment...

Si vous avez des idées...
 

Discussions similaires

Réponses
0
Affichages
153

Statistiques des forums

Discussions
312 241
Messages
2 086 524
Membres
103 242
dernier inscrit
Patoshick