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

lis3

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

oui oui,

mais je ne sais copier que des sheets entière quand je ne veux copier que des cellules de la Feuil1 j'ai mis :

Sheets("Feuil1").Range("C8:H8,C10").Value.Copy after:=Sheets(Sheets.Count)
 

lis3

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

je te remercie Pierrot, cela va un tout petit peu plus vite.

Un truc genre : J

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

n'existe pas et ne serait pas plus efficace?

une dernière chose : est ce possible de créer la copie comme on le fait via le code mais que une fois la copie faite on reste sur la Feuil1? là, une fois la copie faite, on bascule directement sur le nouvel onglet. je préférerais cliquer sur Sauvegarder, que la sauvegarde sefasse mais que l'on reste sur la feuille initial
 

Dranreb

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

Bonjour.
En résumé, on devrait avoir ça maintenant:
VB:
Private Sub CommandButton1_Click()
Dim ÀCréer As Boolean
If Me.TextBox1 = "" Then Exit Sub
On Error Resume Next
Sheets(Me.TextBox1.Text).Activate
If Err Then
   If MsgBox("Cette feuille existe déjà." & vbLf & "Voulez vous néanmoins y inscrire les nouvelles valeurs ?", _
      vbYesNo + vbQuestion, "Sauvegarde valeurs instantanées") = vbNo Then Exit Sub
   End If
On Error GoTo 0
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Me.TextBox1.Text
ActiveSheet.Range("C8:H8,C10").Value = Sheets("Feuil1").Range("C8:H8,C10").Value
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Ensuite suivez nos recommandations: pour comprendre ce que ça veut dire placez le curseur texte sur un mot que vous ne comprenez pas et touche F1.
Mais j'ai essayé avec EnableEvents, j'avoue que ça ne doit pas être évident pour vous. Ça n'aura aucun effet pour l'instant, mais ça fait partie des éléments pouvant avoir une incidence sur la rapidité d'exécution.
Remarque: J'ignore si Range("C8:H8,C10").Value peut marcher et ça ne m'interesse pas de le savoir: je ne traite jamais en une fois les plages multizones, je les traite toujours zone par zone. Dans mon style j'aurais de toutes façon écrit:
VB:
ActiveSheet.[C8:H8].Value = Feuil1.[C8:H8].Value: ActiveSheet.[C10].Value = Feuil1.[C10].Value
À+
 
Dernière édition:

lis3

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

En grand merci a vous pour votre aide, le code :

ActiveSheet.[C8:H8].Value = Feuil1.[C8:H8].Value

fonctionne très bien et rend ma sauvegarde très rapide.

Mon ultime intérrogation serait :

est ce possible de créer la copie comme on le fait via le code mais que une fois la copie faite on reste sur la Feuil1? là, une fois la copie faite, on bascule directement sur le nouvel onglet. je préférerais cliquer sur Sauvegarder, que la sauvegarde se fasse mais que l'on reste sur la feuille mère (Feuil1)
 

lis3

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

COOOOL, cela fonctionne parfaitement.

Une dernière chose après promis j’arrête de vous embêter.
je cherche depuis ce matin un moyen de fermer la Userform qui apparait une fois que l'on a cliquer sur SAUVEGARDER (la Userform demande le nom de la sauvegarder et permet de cliquer sur un bouton sauvegarder qui lance la macro et sauve l'onglet)
J'ai bien trouvé

OnTime Now + TimeValue("00:00:05"),

Mais ça ne donne pas ce que je veux :(
 

Discussions similaires

Statistiques des forums

Discussions
312 616
Messages
2 090 250
Membres
104 467
dernier inscrit
Sklerijenn59