XL 2013 un dossier qui ne veut pas etre supprimer avant la fermeture du fichier

patricktoulon

XLDnaute Barbatruc
Bonjour bonjour

aujourd'hui mon pc c'est levé du mauvais processeur le couillon devant mon l'ecran peu être un peu aussi
j'ai deux soucis
1° ma fonction saveallTo pngfile2 ne repond pas comme il devrait
en effet a la fin je supprime des fichiers et dossier temporaire mais là le dossier reste apparent sur le bureau tant que je ferme pas le fichier

le 2d soucis c'est que même avec application.CopyObjectsWithCells= false ca copie les shapes avec quand même

VB:
Sub Test_une_shape2()
    Dim Chemin$
    Chemin = ThisWorkbook.Path & "\mondossier"
    Set shap = ActiveSheet.Shapes(2)
    SaveAllToPngFile2 shap, Chemin
End Sub

Sub Test_Toutes_Les_Shapes2()
    Dim i&, Chemin$
    Chemin = ThisWorkbook.Path & "\mondossier"
    SaveAllToPngFile2 ActiveSheet.Shapes, Chemin
End Sub
Sub Test_une_Range2()
    Dim Chemin$
    Chemin = ThisWorkbook.Path & "\mondossier"
    Set r = ActiveSheet.Range("A1:f10")
    SaveAllToPngFile2 r, Chemin
End Sub


Sub SaveAllToPngFile2(OBJ, Chemin As String)
    Dim chemintemp, sh, Img$, Nom$
    Application.ScreenUpdating = False

    chemintemp = ThisWorkbook.Path & "\temp.htm"    'chemin temporaire du html

    If TypeName(OBJ) = "Shape" Then OBJ = Array(OBJ)    'si c'est une shape alors OBJ = un array avec juste la shape

    If TypeName(OBJ) = "Range" Then OBJ = Array(OBJ)    'si c'est une range alors OBJ = un array avec juste la range

    'si le dossier n'exite pas on le crée
    If Dir(Chemin, vbDirectory) = "" Then
        MkDir (Chemin)
    Else    'sinon on le vide
        Kill (Chemin & "\*.*")
    End If

    Application.CopyObjectsWithCells = False

    With Workbooks.Add    'ouvre un new classeur provisoire

        For Each sh In OBJ    'boucle sur OBJ
            If TypeName(sh) = "Range" Then
                Nom = Replace(sh.Address(0, 0), ":", "-")
                sh.Copy    'copie de la l'object itéré dans la boucle
            Else
                Nom = Replace(sh.Name, " ", "_") & ".png"
                sh.Copy    'copie de la l'object itéré dans la boucle
            End If

            ActiveSheet.Pictures.Paste    'colle en tant qu'image  dans le new classeur

            'publication en html
            With .PublishObjects.Add(xlSourceSheet, chemintemp, "Feuil1", "", xlHtmlStatic, "calque", "")
                .Publish (True)
                .AutoRepublish = False
            End With

            ActiveSheet.Pictures(1).Delete    'suppression de l'image collée

            'récupération du chemin complet de la premiere image png dans le dossier  affilié au html
            Img = ThisWorkbook.Path & "\temp_fichiers\" & Dir(ThisWorkbook.Path & "\temp_fichiers\" & "*.png")

            Name Img As (Chemin & "\" & Replace(Nom, " ", "_") & ".png")    'transfert dans le dossier désigné
        Next

        .Close False    'fermeture du classeur provisoire
    End With

    Kill chemintemp    'suppression du fichier html

    Kill ThisWorkbook.Path & "\temp_fichiers\*.*"    'vide le dossier affilié au html


    RmDir ThisWorkbook.Path & "\temp_fichiers\"    'supprime le dossier affilié au html

    Application.CutCopyMode = False
End Sub

quelqu'un peut me dire ou je me trompe ?
 
Dernière édition:
Solution
re et oui mais je n'ai plus le gridline
et voila le gridline

1668620450115.png


VB:
Sub SaveAllToPngFile2(OBJ, Chemin As String)
    Dim cheminHTMLtemp, sh, Img$, Nom$, OBJ2
    Application.ScreenUpdating = False    'Bloque le rafraichissement de l'ecran

    cheminHTMLtemp = ThisWorkbook.Path & "\temp.htm"    'chemin temporaire du html

    If TypeName(OBJ) = "Shape" Then OBJ = Array(OBJ)    'si c'est une shape alors OBJ = un array avec juste la shape

    If TypeName(OBJ) = "Range" Then OBJ = Array(OBJ)    'si c'est une range alors OBJ = un array avec juste la range

    'si le dossier n'exite pas on le crée
    If Dir(Chemin, vbDirectory) = "" Then
        MkDir (Chemin)
    Else    'sinon on le vide
        If Dir(Chemin &...

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re et oui mais je n'ai plus le gridline
et voila le gridline

1668620450115.png


VB:
Sub SaveAllToPngFile2(OBJ, Chemin As String)
    Dim cheminHTMLtemp, sh, Img$, Nom$, OBJ2
    Application.ScreenUpdating = False    'Bloque le rafraichissement de l'ecran

    cheminHTMLtemp = ThisWorkbook.Path & "\temp.htm"    'chemin temporaire du html

    If TypeName(OBJ) = "Shape" Then OBJ = Array(OBJ)    'si c'est une shape alors OBJ = un array avec juste la shape

    If TypeName(OBJ) = "Range" Then OBJ = Array(OBJ)    'si c'est une range alors OBJ = un array avec juste la range

    'si le dossier n'exite pas on le crée
    If Dir(Chemin, vbDirectory) = "" Then
        MkDir (Chemin)
    Else    'sinon on le vide
        If Dir(Chemin & "\*.*") <> "" Then Kill (Chemin & "\*.*")
    End If

    Application.CopyObjectsWithCells = False

    With Workbooks.Add    'ouvre un new classeur provisoire

        For Each sh In OBJ    'boucle sur OBJ
            If TypeName(sh) = "Range" Then
                Nom = Replace(sh.Address(0, 0), ":", "-")
                For Each OBJ2 In sh.Parent.Shapes
                    If Not Intersect(OBJ2.TopLeftCell, OBJ(0)) Is Nothing Then OBJ2.Visible = False
                Next OBJ2
                sh.Copy    'copie de la l'object itéré dans la boucle
                ActiveSheet.Pictures.Paste.Select    'colle en tant qu'image  dans le new classeur
                With Selection.ShapeRange.Fill
                    .Visible = msoTrue
                    .ForeColor.ObjectThemeColor = msoThemeColorBackground1
                    .ForeColor.TintAndShade = 0
                    .ForeColor.Brightness = 0
                    .Solid
                End With
                For Each OBJ2 In sh.Parent.Shapes
                    If Not Intersect(OBJ2.TopLeftCell, OBJ(0)) Is Nothing Then OBJ2.Visible = True
                Next OBJ2
            Else
                Nom = Replace(sh.Name, " ", "_") & ".png"
                sh.Copy    'copie de la l'object itéré dans la boucle
                With ActiveSheet
                    .Pictures.Paste    'colle en tant qu'image  dans le new classeur
                    .Shapes(.Shapes.Count).Select
                    With .Shapes(.Shapes.Count).ShapeRange.Fill
                        .Visible = msoTrue
                        .ForeColor.ObjectThemeColor = msoThemeColorBackground1
                        .ForeColor.TintAndShade = 0
                        .ForeColor.Brightness = 0
                        .Transparency = 0
                        .Solid
                    End With
                End With
            End If

            'publication en html
            With .PublishObjects.Add(xlSourceSheet, cheminHTMLtemp, "Feuil1", "", xlHtmlStatic, "calque", "")
                .Publish (True)
                .AutoRepublish = False
            End With

            ActiveSheet.Pictures(1).Delete    'suppression de l'image collée

            'récupération du chemin complet de la premiere image png dans le dossier  affilié au html
            Img = ThisWorkbook.Path & "\temp_fichiers\" & Dir(ThisWorkbook.Path & "\temp_fichiers\" & "*.png")

            Name Img As (Chemin & "\" & Replace(Nom, " ", "_") & ".png")    'transfert dans le dossier désigné
        Next

        .Close False    'fermeture du classeur provisoire
    End With

    Kill cheminHTMLtemp    'suppression du fichier html
    If Dir(ThisWorkbook.Path & "\temp_fichiers\*.*") <> "" Then Kill ThisWorkbook.Path & "\temp_fichiers\*.*"    'vide le dossier affilié au html
    RmDir ThisWorkbook.Path & "\temp_fichiers"    'supprime le dossier affilié au html

    Application.CutCopyMode = False
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
il te faut pas le faire dans le else sinon les shapes perdent leur transparence
le fond blanc c'est que pour le "Range"

code final adopté

VB:
Option Explicit

Sub Test_une_shape2()
    Dim Chemin$, shap
    Chemin = ThisWorkbook.Path & "\mondossier"
    Set shap = ActiveSheet.Shapes(2)
    SaveAllToPngFile2 shap, Chemin
End Sub

Sub Test_Toutes_Les_Shapes2()
    Dim i&, Chemin$
    Chemin = ThisWorkbook.Path & "\mondossier"
    SaveAllToPngFile2 ActiveSheet.Shapes, Chemin
End Sub

Sub Test_une_Range2()
    Dim Chemin$, r As Variant
    Chemin = ThisWorkbook.Path & "\mondossier"
    Set r = ActiveSheet.Range("A1:f10")
    SaveAllToPngFile2 r, Chemin
End Sub




Sub SaveAllToPngFile2(OBJ, Chemin As String)
    Dim cheminHTMLtemp, sh, Img$, Nom$, OBJ2
    Application.ScreenUpdating = False    'Bloque le rafraichissement de l'ecran

    cheminHTMLtemp = ThisWorkbook.Path & "\temp.htm"    'chemin temporaire du html

    If TypeName(OBJ) = "Shape" Then OBJ = Array(OBJ)    'si c'est une shape alors OBJ = un array avec juste la shape

    If TypeName(OBJ) = "Range" Then OBJ = Array(OBJ)    'si c'est une range alors OBJ = un array avec juste la range

    'si le dossier n'exite pas on le crée
    If Dir(Chemin, vbDirectory) = "" Then
        MkDir (Chemin)
    Else    'sinon on le vide
        If Dir(Chemin & "\*.*") <> "" Then Kill (Chemin & "\*.*")
    End If

    Application.CopyObjectsWithCells = False

    With Workbooks.Add    'ouvre un new classeur provisoire
        For Each sh In OBJ    'boucle sur OBJ
            If TypeName(sh) = "Range" Then
                Nom = Replace(sh.Address(0, 0), ":", "-")
                For Each OBJ2 In sh.Parent.Shapes
                    If Not Intersect(OBJ2.TopLeftCell, OBJ(0)) Is Nothing Then OBJ2.Visible = False
                Next OBJ2
                sh.Copy    'copie de la l'object itéré dans la boucle
                ActiveSheet.Pictures.Paste.Select    'colle en tant qu'image  dans le new classeur
                With Selection.ShapeRange.Fill
                    .Visible = msoTrue
                    .ForeColor.RGB = vbWhite
                    .Transparency = 0
                    .Solid
                End With
                For Each OBJ2 In sh.Parent.Shapes
                    If Not Intersect(OBJ2.TopLeftCell, OBJ(0)) Is Nothing Then OBJ2.Visible = True
                Next OBJ2
            Else
                Nom = Replace(sh.Name, " ", "_") & ".png"
                sh.Copy    'copie de  l'object itéré dans la boucle
                ActiveSheet.Pictures.Paste    'colle en tant qu'image  dans le new classeur
            End If

            'publication en html
            With .PublishObjects.Add(xlSourceSheet, cheminHTMLtemp, "Feuil1", "", xlHtmlStatic, "calque", "")
                .Publish (True)
                .AutoRepublish = False
            End With

            ActiveSheet.Pictures(1).Delete    'suppression de l'image collée

            'récupération du chemin complet de la premiere image png dans le dossier  affilié au html
            Img = ThisWorkbook.Path & "\temp_fichiers\" & Dir(ThisWorkbook.Path & "\temp_fichiers\" & "*.png")

            Name Img As (Chemin & "\" & Replace(Nom, " ", "_") & ".png")    'transfert dans le dossier désigné
        Next

        .Close False    'fermeture du classeur provisoire
    End With

    Kill cheminHTMLtemp    'suppression du fichier html
    If Dir(ThisWorkbook.Path & "\temp_fichiers\*.*") <> "" Then Kill ThisWorkbook.Path & "\temp_fichiers\*.*"    'vide le dossier affilié au html
    RmDir ThisWorkbook.Path & "\temp_fichiers"    'supprime le dossier affilié au html

    Application.CutCopyMode = False
End Sub
 

Discussions similaires