VBA : enregistrer une feuille et supprimer les liaisons

Résolu
Maud1681 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
Maud1681 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'utilise le code ci-dessous pour copier une feuille d'un doc excel et l'enregistrer :
1) on clique sur le bouton
2) la feuille est copiée/enregistrée sous un nom et le bouton de la macro disparait
3) le doc source se ferme sans sauvegarde
Le doc source a des cellules dont le contenu est lié à une autre feuille du classeur.

Pb : la feuille copiée garde les liaisons que je voudrais supprimer... savez vous comment modifier mon code ?

Private Sub CommandButton4_Click()
'Macro : quand le fichier est complété, on clique sur le bouton 4, la feuille est copiée et Le fichier d'origine est effacé et fermé.
Dim nomfichier As String
Dim FileExtStr As String
Dim FileFormatNum As Long
ThisWorkbook.ActiveSheet.Copy
ActiveSheet.Shapes("CommandButton4").Visible = False
FileExtStr = ".xlsm": FileFormatNum = 52
ActiveSheet.SaveAs Filename:= _
"\\xxxxx\xxxx\xxx\xx\test\" & "test" & ".xls"
ThisWorkbook.Close SaveChanges:=False
End Sub

Vous remerciant d'avance

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    En passant par une feuille intermediaire, pas un classeur (
    ThisWorkbook.ActiveSheet.Copy
    ), genera pas puisque vous fermez sans enregistrer

    Private Sub CommandButton4_Click()
        'Macro : quand le fichier est complété, on clique sur le bouton 4, la feuille est copiée et Le fichier d'origine est effacé et fermé.
        Dim nomfichier As String
        Dim FileExtStr As String
        Dim FileFormatNum As Long
        
        With ActiveSheet
            .Shapes("CommandButton4").Visible = False
            .Cells.Copy
        End With
        Sheets.Add After:=ActiveSheet
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        ActiveSheet.SaveAs Filename:="\\xxxxx\xxxx\xxx\xx\test\" & "test" & ".xls", FileFormat:=56
        ThisWorkbook.Close SaveChanges:=False
    End Sub
    0
    1. Maud1681 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour,
      J'ai appliqué ta méthode mais cela copie la feuille en supprimant les liaisons mais j'aimerais conserver la mise en forme et des boutons de macro qui doivent être actifs pour l'utilisateur suivant...
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Maud1681 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
         
        Re,

        Ok, je regarde

        suite:

        Peut-etre le nom de feuille copiee a voir

        Private Sub CommandButton4_Click()
            'Macro : quand le fichier est complété, on clique sur le bouton 4, la feuille est copiée et Le fichier d'origine est effacé et fermé.
            Dim nomfichier As String
            Dim FileExtStr As String
            Dim FileFormatNum As Long
            
            With ActiveSheet
                .Shapes("CommandButton4").Visible = False
                .Copy After:=ActiveSheet
            End With
            With ActiveSheet
                nom = .Name
                .Select
                .UsedRange.Copy
                .Range("A1").Select
            End With
                
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            'ActiveWorkbook.SaveAs Filename:="d:\_acsv\" & "essai_test_lien" & ".xls", FileFormat:=56
            ActiveSheet.SaveAs Filename:="\\xxxxx\xxxx\xxx\xx\test\" & "test" & ".xls", FileFormat:=56
            Sheets(nom).Copy
            ThisWorkbook.Close SaveChanges:=False
        End Sub
        0
    2. Maud1681 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      je check et te dis... merci.
      0
    3. Maud1681 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      J'y suis finalement allée comme une barbare en faisant un copier/collage spécial des cellules qui avaient des liaisons :

      Range("A35:C35").Select
      Selection.Copy
      Range("A35").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False

      Merci beaucoup pour ton aide
      0