Sauvegarde de données et protection VBA Excel

Fermé
merehas - 18 févr. 2010 à 16:08
 merehas - 18 févr. 2010 à 17:54
Bonjour,
Je suis débutant en VBA Excel et j'aurai besoin d'un coup de pouce...

Je vous présente le projet:

J'ai deux feuilles sur un classeur. La première sert à rentrer des données et calcule des scores ) à parrtir de ces données. Seule les cellules où l'utilisateur entre les données ne sont pas verrouillées.
Sur cette feuille apparait aussi un bouton "Sauvegarder" qui enregistre les données entrées ainsi que les scores calculé sur la deuxième feuille. Cette feuille constituera à terme une sorte de base de données.

Ci dessous le code de ce bouton:

Option Explicit
Sub CmdSave_Click()

' CmdSave_Click() copie les résultats entré ainsi que les scores calculés dans le tableau de la feuille 2 puis vide la colonne résultat et sauvegarde le classeur

'Séléction de la première ligne vide à partir de la 6eme ligne
Dim k As Integer
k = 6
Do While Worksheets(2).Cells(k, 2) <> ""
k = k + 1
Loop

'Insertion d'une ligne sur laquelle on va enregistrer les données
Sheets("Données Sauvegardées").Select
    Rows(k).Select
    Selection.Copy
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove


'transposition des données d'identification
    Range("B" & k & ":E" & k).Select
    Selection.FormulaArray = _
        "=TRANSPOSE('Remplissage du Questionnaire'!R1C4:R4C4)"
    
'transposition des résultats
    Range("F" & k & ": AO" & k).Select
    Selection.FormulaArray = _
        "=TRANSPOSE('Remplissage du Questionnaire'!R9C3:R44C3)"
    
'transposition des scores
    Range("AP" & k & ":AX" & k).Select
    Selection.FormulaArray = _
        "=TRANSPOSE('Remplissage du Questionnaire'!R16C8:R32C8)"

'transposition de l'indice de cohérence
    Range("AY" & k).Select
    Selection.FormulaArray = "='Remplissage du Questionnaire'!R11C9"

'transposition de PCS
    Range("AZ" & k).Select
    Selection.FormulaArray = _
        "='Remplissage du Questionnaire'!R40C8"

'transposition de  MCS
    Range("BA" & k).Select
    Selection.FormulaArray = _
        "='Remplissage du Questionnaire'!R42C8"

ThisWorkbook.Save 'Sauvegarde du classeur

End Sub


Mes problemes sont les suivants:

1 - Lorsque je rentre de nouvelles données dans la feuille 1, les données et scores précédemment enregistrées via le bouton sont eux aussi transformées, or je souhaite pouvoir les garder

2 - La deuxième feuille doit être protégé en écriture pour les utilisateurs. Seule la macro "bouton de sauvegarde" doit pouvoir créer une nouvelle ligne et inscrire les données à sauvegarder, puis bien sur sauvegarder!!!

Est-ce que quelqu'un à une idée de réponse?
Merci d'avance.
A voir également:

4 réponses

Bonjour,

Pour protéger toutes les cellules, le code est :
ActiveSheet.Protect

Avec mot d epasse :
ActiveSheet.Protect ("mot de passe")

Pour déprotéger :
ActiveSheet.UnProtect

Pour déprotéger avec mot de passe :
ActiveSheet.Unprotect ("mot de passe")

Je te conseille par défaut de protéger ton classeur.
A l'ouverture, d'utiliser cette macro :

sub auto-open () ' se déclenche à l'ouverture du classeur
activesheet.unprotect ' enlèves la protection
range(cells(1,1),cells(3,2)).select 'sélectionnes de la cellule A1 à B3 (cells, ligne, colonne)
Selection.Locked = False 'déverrouilles la protection des cellules sélectionnées
activesheet.protect 'tu reprotèges la feuille, les utilisateurs ne peuvent saisir qu'en A1 à B3

end sub

En protégeant par défaut, ca oblige les utilisateurs à activer les macros.
Ainsi, une fois les macros activées, ils ne peuvent saisir que la ou tu le souhaites.
Quant à la sauvegarde, quel type de sauvegarde veux tu? Une sauvegarde du fichier, dans une autre feuille?
2
Merci melanie 1324,

Je vais essayer ce que tu m"as dit pour la protection.

Pour ce qui est de la sauvegarde....

les utilisateurs entreront des données dans certaines cellules de la feuille 1. Sur cette meme feuille, des scores sont calculés (à partir des données saisies).
Je souhaite que lorsque l'uitilisateur clique sur le bouton sauvegarder, la macro liée à ce bouton copie d'une part les données entrées et d'autre part les scores calculés. Puis colle l'ensemble dans le tableau de la feuille 2.
Cette partie est dèjà faite dans le code ci dessus.

Imaginons qu'un utilisateur rentre ses données puis sauvegarde. Jusque là tout va bien.
Mon probleme pour l'instant est que lorsq'un second utilisateur entre ses données puis sauvegarde, la macro crée une ligne sur laquelle sont enregistrées les données de l'utilisateur 2 MAIS les résultats enregistré par l'utilisateur 1 (sur la ligne du dessus) sont aussi changés en ceux de l'utilisateur 2.
Ce qui ne m'avance à rien vu que je souhaite garder les résultats des différents utilisateurs.

J'espère que j'ai été plus compréhensible.
Merci à tout ceux qui se pencheront sur mon probleme.
0
Re,

j'ai une solution pour toi.
Tu copies la ligne du 1er utilisateur, et tu fais un copiage valeur sur cette ligne.
Le code pour copiage valeur :
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

En espérant avoir pu t'aider
0
Re,

Le système de protection/dé-protection marche bien!

En revanche je n'ai pas compris l'histoire de copier la ligne du premier utilisateur... peux tu être plus explicite (step by step ;) sachant qu'à terme, il devrait y avoir plus de 10 000 utilisateurs différents.

Merci encore
0