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
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...
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}
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
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é...
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
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