[VB6 -> VB.NET]Doublons lors de la sauvegarde d'un xls [Résolu]

Signaler
-
 Azhdarz -
Bonjour et désolé pour ce titre très peu clair

Dans une de mes fonctions qui me remplit un fichier xls depuis une base sql ,
j'ai l'impression qu'un fichier supplémentaire est créé en plus de celui que j'enregristre , en effet je voit apparaitre des petit pop up avec des noms tel que classeur 3 classeur 4 etc ...

Le problème vient je pense de cette partie la car pour être honnête que j'ai faites à partir de divers copier coller sans forcement comprendra la logique .

SaveFileDialog_test.Filter = "Fichiers excel (*.xls)|*.xls"
        SaveFileDialog_test.Title = "DIALOG1"
        SaveFileDialog_test.ShowDialog()
        var = SaveFileDialog_test.FileName
        If IsOpen(var) = False Then
            If var <> "" Then
                xlsclasseur.SaveAs(var)
            End If
            xls.Application.Quit()
            xls = Nothing
            MsgBox("EXPORTATION REUSSI", vbOKOnly + vbInformation, "FABRICATION 2013")
            System.Diagnostics.Process.Start(var) 'ouverture du xls créé
            Fab_main.Close()
            Close()
        Else
            MsgBox("Impossible d'enregistrer sur cet emplacement le fichier est déjà ouvert.", vbOKOnly + vbInformation, "ERREUR FICHIER OUVERT")
        End If


Merci par avance

Ps : je ne pense pas que le reste du code soit nécessaire pour résoudre mon problème

21 réponses

Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2013
1
Je reviens sur ce que j'ai dit mais si le fichier existe déjà tu fermes pas le fichier excel qui est créé il faut le détruire si il existe déjà...Si il te demande de fermer classeur1 classeur2 etc c'est qu'ils sont encore ouvert dans les processus...donc ils n'ont pas été correctement fermés. Si jamais le classeur existe tu mets bien un message d'erreur mais le fichier reste ouvert dans les processus (attention faire un xlsclasseur.Close(False) pour qu'il ne demande pas de sauvegarder les modifs)


  If IsOpen(var) And System.IO.File.Exists(var) Then 'si fichier Existant ET ouvert 
            MsgBox("Impossible d'enregistrer sur cet emplacement le fichier est déjà ouvert.", vbOKOnly + vbInformation, "ERREUR FICHIER OUVERT")
            xlsclasseur.Close(False) 'on ne sauvegarde pas les modifs
            xls = Nothing
        Else
            If var <> "" Then
                xlsclasseur.SaveAs(var)
                xlsclasseur.Close()
                MsgBox("EXPORTATION REUSSI", vbOKOnly + vbInformation, "FABRICATION 2013")
                System.Diagnostics.Process.Start(var) 'ouverture du xls créé
            End If
            xls = Nothing
            Fab_main.Close()
            Close()
        End If





et là ça fonctionne...
Est ce que ça résout ton problème???


-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2013
1
Salut

Tu as :

xls.SaveWorkspace("c:\test.xls")


pour te permettre d'enregistrer ton fichier, ce qui t'ouvre une boite de dialogue...pas besoin de openfiledialog....





------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Justement je veut une boite de dialogue
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2013
1
bah c'est ce que je te dis....C'est la boite de dialogue de excel lui même...


-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
La si je ne m'abuse tu me donne la ligne de commande pour enregistrer le fichier mais comment générer ma boite de sauvegarde pour saisir mon emplacement de sauvegarde ?

Ma version actuelle du code :
SaveFileDialog_test.Filter = "Fichiers excel (*.xls)|*.xls"
        SaveFileDialog_test.Title = "DIALOG1"
        SaveFileDialog_test.ShowDialog()
        var = SaveFileDialog_test.FileName
        If IsOpen(var) And System.IO.File.Exists(var) Then
            MsgBox("Impossible d'enregistrer sur cet emplacement le fichier est déjà ouvert.", vbOKOnly + vbInformation, "ERREUR FICHIER OUVERT")

        Else
            If var <> "" Then
                xlsclasseur.SaveAs(var)
                xlsclasseur.Close()
            End If
            xls.Application.Quit()
            xls = Nothing
            MsgBox("EXPORTATION REUSSI", vbOKOnly + vbInformation, "FABRICATION 2013")
            System.Diagnostics.Process.Start(var) 'ouverture du xls créé
            Fab_main.Close()
            Close()
        End If
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2013
1
euh t'as essayé au moins !!

voilà essaye ça sur un bouton tu verras :


 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim oXL As Excel.Application
        Dim oWB As Excel.Workbook
        Dim oSheet As Excel.Worksheet


        oXL = CreateObject("Excel.Application")
        oWB = oXL.Workbooks.Add
        oSheet = oWB.ActiveSheet


        oSheet.Cells(1, 1).Value = "toto"
      
        oXL.SaveWorkspace()

        oSheet = Nothing
        oWB = Nothing
        oXL.Quit()
        oXL = Nothing


    End Sub



c'est pour cela que t'as pas besoin de ton SaveFileDialog_test.


-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Te sens pas obligé de m'agresser comme ça .
Sinon comment faire pour récupérer la lieu d'enregistrement via ta méthode ?
Et ta méthode cherche à réécrire sur le même emplacement de fichier à chaque fois
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,
Il me semble que règne la plus grande confusion, assez bien traduite par :
que j'ai faites à partir de divers copier coller sans forcement comprendra la logique .

car que vient faire là-dedans la création d'un objet Excel (que tu ne définis d'ailleurs même pas) puisque tout ce que tu sembles vouloir faire est de renommer un fichier existant.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2013
1
Il créé bien un fichier excel puisqu'il dit :

Dans une de mes fonctions qui me remplit un fichier xls depuis une base sql


par contre je ne vois pas ce que tu veux faire?? la fonction que je t'ai donné fait un "Enregistrer sous" qui ouvre une boite de dialogue et tu l'enregistres où tu veux...tu peux lui donner le chemin si tu veux...



-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour, biolo24fr,
Je me garderai bien d'en être aussi certain que toi, en ce qui concerne son mécanisme réel.

Questions, donc au demandeur :
1) confirme-nous que tu développes bien sous VB.Net et non sous le VBA de Access ou de Excel
2) confirme-nous que tu "pilotes" Excel depuis une autre application (seule explication de la création de ton objet Excel)
3) montre-nous (si en pilotage et en précisant depuis quoi) comment (avec quel code) tu as rempli ton fichier xls

Pour résumer : expose techniquement tous les tenants et aboutissants

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
1) Oui c'est bien du VB.NET
2) & 3) Je pense que le code répondra à ces 2 questions
Le DataRow est remplit depuis une base SQL
 
 'declaration 
 Dim xls As Excel.Application
 Dim xlsfeuille As Excel.Worksheet
 Dim xlsclasseur As Excel.Workbook
 xls = CreateObject("Excel.Application")
 xlsclasseur = xls.Workbooks.Add
 xlsfeuille = xlsclasseur.Worksheets(1)
     
  For Each Ligne As DataRowView In NB_V_M_date_view
                xlsfeuille.Cells(i, "B").value = Ligne("artnrlev").ToString
                xlsfeuille.Cells(i, "C").value = Ligne("artnr").ToString
                xlsfeuille.Cells(i, "D").value = Ligne("artbeskr").ToString            
                i = i + 1
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        'remplissage entête
        'xlsfeuille.Cells(1, "E").value = pub_Designation
        xlsfeuille.Cells(1, "A").Value = "Quantité"
        xlsfeuille.Cells(1, "B").Value = "Référence fournisseur"
        xlsfeuille.Cells(1, "C").value = "N° Article"
        xlsfeuille.Cells(1, "D").value = "Desc article"
        xlsfeuille.Cells(1, "E").value = "Desc article cde " ' mr.ordartbeskr
        xlsfeuille.Cells(1, "F").value = "Texte specifique commande" 'mr.orpradtexte
        xlsfeuille.Cells(1, "G").value = "??"
        xlsfeuille.Cells(1, "H").value = "Dimension 1 " 'mr.dimension1
        xlsfeuille.Cells(1, "I").value = "Dimension 2 " 'mr.dimension 2
        'xls_a_remplir.Cells(1, "E").value = Requete
        'boite de sauvegarde
        SaveFileDialog_test.Filter = "Fichiers excel (*.xls)|*.xls"
        SaveFileDialog_test.Title = "Sauvegarde Config"
        SaveFileDialog_test.ShowDialog()
        var = SaveFileDialog_test.FileName
        If IsOpen(var) And System.IO.File.Exists(var) Then 'si fichier Existant ET ouvert 
            MsgBox("Impossible d'enregistrer sur cet emplacement le fichier est déjà ouvert.", vbOKOnly + vbInformation, "ERREUR FICHIER OUVERT")

        Else
            If var <> "" Then
                xlsclasseur.SaveAs(var)
                xlsclasseur.Close()
                MsgBox("EXPORTATION REUSSI", vbOKOnly + vbInformation, "FABRICATION 2013")
            End If
            xls.Application.Quit()
            xls = Nothing
            System.Diagnostics.Process.Start(var) 'ouverture du xls créé
            Fab_main.Close()
            Close()
        End If
Et pour préciser le besoin je souhaite simplement une boite de dialogue standard me permettant d'enregistrer mon fichier nouvellement créé .
L'une des syntaxes données par biolo24fr avait pour défaut de réécrire sur le précédent fichier
N'ayant toujours pas trouvé de solution , je me permet de relancer

Merci par avance
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2013
1
Salut,

bah à toi de générer un nom différent en testant si le fichier existe et en générant un nouveau nom avec la date par exemple...Est ce que ça t'ouvre bien la boite de dialogue "Enregistrer sous..." de excel au moins???



-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Oui , mais le problème est que lors de la fermeture de la session sur laquelle j'ai créé ses xls via mon vb.net j'ai des demandes pour savoir si je veux enregistrer classeur1 classeur2 etc ... alors que je n'ai aucun excel de lancé et que mes fichiers créé via mon vb ont été sauvegardé sous un autre nom .
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2013
1
C'est que tes fichiers excel ne sont pas correctement fermés. Est ce que tu peux donner un exemple de ton code en simplifié que je teste ça de chez moi?

-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Private Sub Remplissage(ByVal Dataset_result As DataSet, ByVal Dataset_op As DataSet, ByVal Dataset_caisson As DataSet)
        Dim xls As Excel.Application
        Dim xlsfeuille As Excel.Worksheet
        Dim xlsclasseur As Excel.Workbook
        Dim var As String
        Dim i As Integer
        Dim loc_antal, loc_formule As String
        Dim Nb_V_F_data_view, NB_V_M_data_view As New DataView(Dataset_result.Tables("Materiel"))
        Dim Type_Op_data_view As New DataView(Dataset_op.Tables("materiel"))
        Dim caisson_data_view As New DataView(Dataset_caisson.Tables("materiel"))
        Dim SaveFileDialog_test As New SaveFileDialog()
        xls = CreateObject("Excel.Application")
        xlsclasseur = xls.Workbooks.Add
        xlsfeuille = xlsclasseur.Worksheets(1)
        xlsfeuille.Name = "Config"


     
           
        SaveFileDialog_test.Filter = "Fichiers excel (*.xls)|*.xls"
        SaveFileDialog_test.Title = "Sauvergarde Config"
        SaveFileDialog_test.ShowDialog()
        var = SaveFileDialog_test.FileName
        If IsOpen(var) And System.IO.File.Exists(var) Then 'si fichier Existant ET ouvert 
            MsgBox("Impossible d'enregistrer sur cet emplacement le fichier est déjà ouvert.", vbOKOnly + vbInformation, "ERREUR FICHIER OUVERT")
        Else
            If var <> "" Then
                xlsclasseur.SaveAs(var)
                xlsclasseur.Close()
                MsgBox("EXPORTATION REUSSI", vbOKOnly + vbInformation, "FABRICATION 2013")
                System.Diagnostics.Process.Start(var) 'ouverture du xls créé
            End If
            'xls.Application.Quit()
            xls = Nothing
            Fab_main.Close()
            Close()
        End If
    End Sub


Voici la partie du code gérant le fichier xls , le reste étant simplement le remplissage de celui-ci