Sauvegarder des infos et les protéger

  • Initiateur de la discussion marabbeh
  • Date de début
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
 
Z

Zon

Guest
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
 
J

john

Guest
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.
 
M

marabbeh

Guest
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.
 
M

marabbeh

Guest
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 = Numero_Onglet(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
 
J

john

Guest
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
 

Discussions similaires

Statistiques des forums

Discussions
314 653
Messages
2 111 578
Membres
111 205
dernier inscrit
Adrien25