Macro : auvegarde dans le même classeur une feuille via un bouton

lis3

XLDnaute Nouveau
Bonjour,

Je débute en vba et je viens de passer la journée à chercher une solution à mon problème mais je vais finalement devoir solliciter votre aide

Voici mon problème :

J'ai créé un bouton qui permet de "sauvegarder" (plus exactement copier) l'onglet choisi et qui demande à l'utilisateur le nom qu'il veut donner à son nouvel onglet.
Jusque là, ça fonctionne.
le problème est que l'onglet que je souhaite sauvegarder (Feuil1) à des valeurs qui dépendent de la Feuil2. Et moi je voudrais que, une fois sauvegardé, la sauvegarde de la Feuil1 ne dépende plus de la Feuil2.
c'est à dire que je puisse changer les valeurs dans la Feuil2 sans que cela change les valeurs dans la sauvegarde mais que cela change les valeurs dans la Feuil1.

J'ai mis en pièce joint un fichier pour illustrer mon souci :
Une fois la Feuil1 sauvée, si je change des valeurs dans le Tableau A (Qui se trouve Feuil2), il y a à la fois les données de la Feuil1 qui sont modifiées et celle de ma sauvegarde.
Donc ma sauvegarde n'est plus une sauvegarde mais juste une copie ce que je ne souhaite pas.

En espérant avoir été clair sur mon problème.
Merci d'avance
 

Pièces jointes

  • test.xls
    36 KB · Affichages: 61
  • test.xls
    36 KB · Affichages: 69
  • test.xls
    36 KB · Affichages: 80

Pierrot93

XLDnaute Barbatruc
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Bonjour,

pas ouvert ton fichier, mais regarde ci-dessous code pour supprimer les liens du classeur actif :
Code:
Option Explicit
Sub test()
Dim t() As Variant, i As Integer
With ActiveWorkbook
    t = .LinkSources(1)
    For i = LBound(t) To UBound(t)
        .BreakLink t(i), 1
    Next i
End With
End Sub

A noter que l'on peut également faire un copier / collage spécial...

bonne soirée
@+
 

Dranreb

XLDnaute Barbatruc
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Bonjour
Le plus simple c'est de rajouter:
VB:
ActiveSheet.Cells.Value = Feuil1.Cells.Value
À supposer que la nouvelle feuille créée soit bien active.
À+
 

Dranreb

XLDnaute Barbatruc
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

A noter qu'ainsi les formats de cellules sont perdus...
Eh, non ! pas si la feuille résulte d'un Déplacer la feuille avec création d'une copie, voyons.
Pour figer les valeurs on peut d'ailleurs aussi faire:
VB:
ActiveSheet.Cells.Value = ActiveSheet.Cells.Value
Bonne soirée
À+
 
Dernière édition:

lis3

XLDnaute Nouveau
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Bonjour paspat,

Dans ce que tu as fais, tu as enlevé le lien entre la Feuil1 et la Feuil2. (les valeurs du tableau de la Feuil1 doivent être égale à celles du tableau A de la Feuil2)
Et dans ce que tu m'as envoyé, il n'y a plus de {cellule C2 Feuil1=Feuil2!B4}

J'espère que je suis clair
 

lis3

XLDnaute Nouveau
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Bonjour Pierrot93 et Dranreb,

Vos deux solutions fonctionnent. Mais cela prend un temps certain pour créer mon nouvel onglet d'ou ma nouvelle question :

Est ce possible d'accélérer le temps pour sauvegarder? en appliquant "ActiveSheet.Cells.Value = ActiveSheet.Cells.Value" mais qu'a certaine cellule et pas a toute la feuille ce qui permettrait de sauvegarder plus vite

Merci à vous
 

Pierrot93

XLDnaute Barbatruc
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Bonjour,

peut être avec ceci :
Code:
'début de procédure
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
'ton code

'fin de procédure
With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With
tu peux également de la même façon interrompre les procédures événementielles le cas échéant (Application.EnableEvents)

ensuite à voir, selon le code que tu as utilisé...

@+
 

lis3

XLDnaute Nouveau
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Oula je débute en vba, ce n'est que ma 2nd macro : "Application.EnableEvents" je n'ai pas compris

Le code que tu viens de me donner ralentit encore plus la procédure (plus de 2min pour créer mon nouvel onglet)

Je n'ai besoin que "ActiveSheet.Cells.Value = ActiveSheet.Cells.Value" n'agisse que sur un tableau de 10 valeurs par sur toute la feuille

Mon code est le suivant :


Private Sub CommandButton1_Click()
Dim Faute As Long
If Me.TextBox1 = "" Then Exit Sub
On Error Resume Next
Sheets(Me.TextBox1.Text).Visible = True
Faute = Err.Number
On Error GoTo 0
If Faute > 0 Then
Sheets("Feuil1").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Cells.Value = ActiveSheet.Cells.Value
ActiveSheet.Name = Me.TextBox1
Else
MsgBox "Feuille existante"
End If
Unload Me
End Sub
 

Pièces jointes

  • test.xls
    36 KB · Affichages: 59
  • test.xls
    36 KB · Affichages: 69
  • test.xls
    36 KB · Affichages: 65

Pierrot93

XLDnaute Barbatruc
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Re,
remplace la copie des cellules par uniquement celles qui sont concernées...
Code:
Range("C8:H8,C10").Value = Range("C8:H8,C10").Value

Oula je débute en vba, ce n'est que ma 2nd macro : "Application.EnableEvents" je n'ai pas compris
dans l'éditeur vba, curseur positionné sur un mot et touche de fonction F1 te donne ra plein d'info...
 

lis3

XLDnaute Nouveau
Re : Macro : auvegarde dans le même classeur une feuille via un bouton

Je pensais à un truc comme ça :

ActiveSheet.Cells.Range("C8:H11").Value = ActiveSheet.Cells.Range("C8:H11").Value

Pour ne copier que quelques cellule j'ai fais ceci mais sans résultat :

Private Sub CommandButton1_Click()
Dim Faute As Long
If Me.TextBox1 = "" Then Exit Sub
On Error Resume Next
Sheets(Me.TextBox1.Text).Visible = True
Faute = Err.Number
On Error GoTo 0
If Faute > 0 Then
Sheets("Feuil1").Range("C8:H8,C10").Value.Copy after:=Sheets(Sheets.Count)
ActiveSheet.Cells.Value = ActiveSheet.Cells.Value
ActiveSheet.Name = Me.TextBox1
Else
MsgBox "Feuille existante"
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 049
Membres
104 012
dernier inscrit
baffyt2