Sauvegarder des infos et les protéger

  • Initiateur de la discussion Initiateur de la discussion marabbeh
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

marabbeh

Guest
Bonjour,

Un problème que je pensais avoir résolu...
Je fais une petite appli de paye, et je souhaite sauvegarder (juste un Selection.Copy et Range("XX").Paste) chaque bulletin dans le classeur, pour m'en servir pour divers usages à caractère légal. Malheureusement, si l'onglet qui doit recevoir la sauvegarde est protégé ou masqué, ça ne semble pas fonctionner... Or je ne peux pas laisser cet onglet affiché et sans protection.

Y a-t-il une autre solution ? J'ai regardé plusieurs applis de paye sous Excel et aucune ne fait de sauvegarde. Est-ce une limitation de Excel ?

Merci de votre aide
 
Bonjour à tous,


Comme ta feuille est protégée, il suffit de la déprotéger en début de code ou juste avant ta copie, puis de la protéger comme suit:



sub tamacro()


sheets("Tafeuiilededestination").Unprotect "Tonmotdepasse"


Bla..bla..



sheets("Tafeuiilededestination").Unprotect "Tonmotdepasse"


end sub



A+++



PS Toujours des soucis avec le forum, c'est la 3eme fois que je poste ma réponse
 
salut,

Et si tu ne veux pas que les informations s'affichent pendant la procédure, tu ajoutes avant de déprotéger ta feuille,

application.ScreenUpdating=False

comme ça plus rien ne se passe en arrière plan sur ton écran, mais surtout après avoir re-protéger et cacher ta feuille, ne pas oublier de rétablir la commande de raffraichissement de l'écran.

application.ScreenUpdating=true

Bien à toi.

john

Ps: la désactivation du raffraichissement de l'écran est super pratique dans certains cas et surtout il permet de gagner du temps dans le traitement des informations vu qu'il ne doit plus s'occuper de l'affichage.
 
J'ai essayé, mais ça ne fonctionne pas. J'ai une erreur sur la ligne qui colle la sélection dans l'onglet protégé. Est-ce que Excel n'a as eu le temps de le déprotéger?

Mais j'ai essayé la même chose en affichant l'onglet et en le masquant à la fin de la procédure. Et là ça marche. Comme la protection ne me sert que pour éviter à l'utilisatrice d'écrire dans l'onglet, j'imagine que ça suffit puisque de toutes façons c'est elle qui saisit tous les salaires.
 
OK, Zon, je ne sais si c'est à moi que tu causes, mais voilà ma Sub.

Une question subsidiaire avant d'envoyer : l'utilisatrice est un peu perturbée par les "machins qui clignotent", cad la zone sélectionnée dans la feuille. J'ai essayé "Unselect" mais ça n'existe pas. Y a-t-il aut'chose ?

Voici mon code

' Sauvegarde d'un bulletin de paye
' dans la feuille de l'année correspondante
Sub Sauve_bulletin()
Application.ScreenUpdating = False
' Mois, Année de paye et nom du salarié
Dim Mois, Ligne, Col, NumBulletin, N As Integer
Dim NomMois, An, Personne As String
Dim Ajout As Boolean
With Sheets("bulletins")
Mois = Range("N6").Value
NomMois = Range("M6").Value
An = CStr(Range("M5").Value)
Personne = Range("M8").Value
' Copie du bulletin de paye (partie utile)
Range("C8:H51").Select
Selection.Copy
End With

' Afficher et déprotéger la feuille correspondant à l'année
Sheets(An).Visible = True

' Déterminer où coller le bulletin
' Chercher l'onglet correspondant à l'année
N = Numer😵nglet(An)

' Si l'onglet n'a pas été trouvé, on le crée à la suite de l'année précédente
If (N > Sheets.Count) Then
Nouvel_An_Archives (An)
Ligne = 0
Col = 0
Ajout = True
NumBulletin = 0

' Si l'onglet est trouvé on cherche où y coller le bulletin
Else:
' On commence par l'afficher
Sheets(An).Visible = True
Ajout = True
Ligne = (Mois - 1) * 45
Sheets(N).Select
' On cherche s'il y a déjà des bulletins
' c'est indiqué par un n° sous le nom du mois
If Range("B5").Offset(Ligne, 0).Value = "" Then
NumBulletin = 0
Else: NumBulletin = Range("B5").Offset(Ligne, 0).Value
End If
' On cherche d'abord si on n'a pas déjà un bulletin de cette personne
If NumBulletin > 0 Then
N = Cherche_Bulletin(Personne, NumBulletin, "D6", Ligne)
If N < NumBulletin Then
Ajout = False
End If
Col = N * 7
Else: Col = 0
End If
End If

' On colle maintenant notre bulletin
Range("C3").Offset(Ligne, Col).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
If Ajout = True Then
NumBulletin = NumBulletin + 1
Range("B5").Offset(Ligne, 0).Value = NumBulletin
End If

' On contrôle que le bulletin est bien là
N = Cherche_Bulletin(Personne, NumBulletin, "D6", Ligne)
If N = NumBulletin Then
MsgBox ("Le bulletin de salaire de " & Personne & " n'a pu être sauvegardé. Veuillez en aviser le responsable du programme")
End If

' On masque l'onglet
Sheets(An).Visible = False

' Et on revient à l'onglet "bulletins"
Sheets("bulletins").Select
Range("L27").Select
End Sub
 
zon,

Tu peux travailler sur son fichier aussi, car je dis tjrs qu'il y a + dans 2 têtes que dans une.

Et personne ne programme de la même façon, donc marabbeh choisira la façon qu'elle préfére (donc la plus compréhensible pour elle).

@+++

John
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour