IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Sauvegarde WorkBook Excel : mémoire protégée


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Par défaut Sauvegarde WorkBook Excel : mémoire protégée
    Bonjour à tous.

    J'ai un petit souci lors de la sauvegarde d'un fichier Excel créé via mon programme VB.NET.

    Lors de la commande WorkBook.SaveAs(FileName), j'obtiens le message d'erreur
    Tentative de lecture ou d'écriture de mémoire partagée. Cela indique souvent qu'une autre mémoire est endommagée.
    Malgré de longues recherches, je ne vois pas d'où peut venir le problème.
    Un peu d'aide serait le bienvenu.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     Dim AppXL As Excel.Application = Nothing
            Dim WorkBook As Excel.Workbook
            Dim WorkSheet As Excel.Worksheet
            Dim ReportDay As String = Date.Today.AddDays(-1).ToString("dd-MM-yyyy")
            Dim XLLine As Integer
     
            Try
     
                If _reportDatas.Rows.Count > 0 Then
     
                    FileName = Application.StartupPath & "\Alertes " & ReportDay & ".xls"
                    AppXL = New Excel.Application
                    AppXL.SheetsInNewWorkbook = 1
     
                    AppXL.Visible = True
                    AppXL.DisplayAlerts = False
     
                    WorkBook = AppXL.Workbooks.Add()
     
                    WorkSheet = WorkBook.ActiveSheet
     
                    With WorkSheet
                        .Name = "Alertes"
     
                        .Range("A1:G1").Font.Bold = True
                        .Range("A1:G1").Interior.ColorIndex = 15
     
                        .Cells(1, 1).Value = "V"
                        .Cells(1, 2).Value = "Description"
                        .Cells(1, 3).Value = "Lieu"
                        .Cells(1, 4).Value = "Secteur"
                        .Cells(1, 5).Value = "Start"
                        .Cells(1, 6).Value = "Stop"
                        .Cells(1, 7).Value = "Durée"
     
     
                        XLLine = 2
                        Dim DeltaT As New TimeSpan(0)
     
                        For Each row As DataRow In _reportDatas.Select("", "NAME ASC, BEGINTIME ASC")
     
                            .Cells(XLLine, 1).Value = row.Item("NAME").ToString
                            .Cells(XLLine, 2).Value = row.Item("TEXT").ToString
                            .Cells(XLLine, 3).Value = row.Item("LOCATION").ToString
                            .Cells(XLLine, 4).Value = row.Item("SECTEUR").ToString
                            .Cells(XLLine, 5).Value = CDate(row.Item("BEGINTIME")).ToString("dd/MM/yyyy HH:mm:ss")
                            .Cells(XLLine, 6).Value = CDate(row.Item("ENDTIME")).ToString("dd/MM/yyyy HH:mm:ss")
     
                            DeltaT = TimeSpan.FromSeconds(CDbl(row.Item("DURATION")))
     
                            .Cells(XLLine, 7).Value = DeltaT.Hours.ToString("00") & ":" & _
                                                      DeltaT.Minutes.ToString("00") & ":" & _
                                                      DeltaT.Seconds.ToString("00")
     
                            'Mise en forme selon durée
                            Select Case CDbl(row.Item("DURATION"))
     
                                Case Is >= (60 * 20) 'Plus de 20 minutes
     
                                    .Range("G" & XLLine).Font.Bold = True
                                    .Range("G" & XLLine).Font.ColorIndex = 2
                                    .Range("G" & XLLine).Interior.ColorIndex = 3
     
                                Case Is >= (60 * 5) 'Plus de 5 minutes
     
                                    .Range("G" & XLLine.ToString).Interior.ColorIndex = 44
     
                            End Select
     
                            XLLine += 1
                        Next
     
                        'Mise en page
                        .Range("A1:G" & XLLine).HorizontalAlignment = -4108
                        .Range("B2:C" & XLLine).HorizontalAlignment = -4131
     
     
                        'Statistiques
                        .Cells(XLLine + 2, 5).Value = "Nombre d'alarmes"
                        .Cells(XLLine + 2, 7).Value = _reportDatas.Rows.Count
     
                        .Cells(XLLine + 3, 5).Value = "Total des arrêts"
                        DeltaT = TimeSpan.FromSeconds(CDbl(_reportDatas.Compute("SUM(DURATION)", "")))
                        .Cells(XLLine + 3, 7).Value = DeltaT.Hours.ToString("00") & ":" & _
                                                      DeltaT.Minutes.ToString("00") & ":" & _
                                                      DeltaT.Seconds.ToString("00")
     
                        .Range("G" & XLLine + 2 & ":G" & XLLine + 3).HorizontalAlignment = -4108
     
                        .Range("A1:G" & XLLine).Select()
                        AppXL.Selection.AutoFilter()
     
                        .Columns.AutoFit()
     
                        'Légende
                        .Cells(XLLine + 2, 3).Value = "Durée >= 20 min."
                        .Range("C" & XLLine + 2).Font.Bold = True
                        .Range("C" & XLLine + 2).Font.ColorIndex = 2
                        .Range("C" & XLLine + 2).Interior.ColorIndex = 3
     
                        .Cells(XLLine + 3, 3).Value = "Durée >= 5 min."
                        .Range("C" & XLLine + 3).Interior.ColorIndex = 44
     
                        .Range("C" & XLLine + 2 & ":C" & XLLine + 3).HorizontalAlignment = -4108
     
                    End With
     
                    If System.IO.File.Exists(FileName) Then System.IO.File.Delete(FileName)
     
                    WorkBook.SaveAs(FileName)
     
                End If
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                res = False
            Finally
                AppXL.Quit()
                WorkSheet = Nothing
                WorkBook = Nothing
                AppXL = Nothing
            End Try

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Essaye d'enregistrer/créer le fichier au début du code puis de d'enregistrer à la fin.

    Et par la même occassion si un fichier Excel existe déjà, tu peux créer une nouvelle feuille plutot que d'écrase le fichier!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Par défaut
    Bonjour sinople et merci pour ta réponse.

    Le fichier doit être unique, il s'agit d'un rapport quotidien qui sera envoyé automatiquement par mail. C'est pourquoi je le supprime si il existe déjà.

    J'ai essayé ce que tu m'as proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FileName = Application.StartupPath & "\Alertes " & ReportDay & ".xls"
     
                    If System.IO.File.Exists(FileName) Then System.IO.File.Delete(FileName)
     
                    AppXL = New Excel.Application
                    AppXL.SheetsInNewWorkbook = 1
     
                    AppXL.Visible = True
                    AppXL.DisplayAlerts = False
     
                    WorkBook = AppXL.Workbooks.Add()
                    WorkBook.SaveAs(FileName)
    Mais rien n'y fait, toujours la même erreur au niveau du SaveAs...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Par défaut
    Bon beh voilà, j'ai trouvé la solution :

    Remplacer le SaveAs par SaveCopyAs.

    Merci encore sinople.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauvegarde fichier excel avec la date
    Par Renardo dans le forum Access
    Réponses: 8
    Dernier message: 03/09/2006, 14h20
  2. Tentative de R/W de mémoire protégée
    Par BenjaminLustrement dans le forum C++/CLI
    Réponses: 3
    Dernier message: 29/06/2006, 11h18
  3. Sauvegarde Fichier Excel
    Par Xav++ dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/06/2006, 19h23
  4. [VBA-E]Sauvegarde feuille Excel avec VBA
    Par jojo2303 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/03/2006, 19h06
  5. Sauvegarde fichier excel
    Par tiopan dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/10/2003, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo