Tableau d'heure

Résolu
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011 - 9 avril 2010 à 09:18
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011 - 13 avril 2010 à 21:51
Bonjour,
je fais un tableau pour ma boss, il faut que je rentre mon heure d'arrivée dans une case disons a1, ensuite quand je vais déjeuner, il faut que je retape sur une autre case, disons a2 et ainsi de suite pour la journée, et sur tout le mois et il ne faut pas que a1 et les autres cases puissent être modifiées, donc il faudrait pouvoir bloquer ces cases dès que l'on appuis dessus et que l'heure apparait.
Je suis vraiment novice sur excel, j'ai même acheté "excel pour les nuls"
je travaille sur excel 2002 je t'envois ce que j'ai trouvé sur le net, cela fonctionne

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("D6:D44")) Is Nothing Then ActiveCell.Value = Now()
End Sub

De plus, peut tu me dire pourquoi je ne peux plus accéder à cette formule, l'onglet reste inactif (gris)

Par avance merci, en espérant que je me suis bien exprimé



eric2027

15 réponses

cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
13 avril 2010 à 21:51
j'ai oublier de donner le code rectifié de façon que quand tu click sur la cellule, ça marque l'heure, et que quand tu essaie de modifier l'heure, on te demande le mot de passe de la feuille, avec la base de ta formule, j'ai bidouillé et c ok
je te l'envois en piece


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("D6:D44")) Is Nothing Or Not Intersect(Target, Range("e6:e44")) Is Nothing Or Not Intersect(Target, Range("h6:h44")) Is Nothing Or Not Intersect(Target, Range("i6:i44")) Is Nothing Then
If ActiveCell.Locked False Or ActiveCell.Value "" Then
'Cette variable va servir à garder l'état initiale de l'affichage des messages d'alerte
Dim afficherMessage As Boolean
'On récupère l'état d'affichage des messages d'alerte
afficherMessage = Application.DisplayAlerts
'On désactive les messages d'alerte
Application.DisplayAlerts = False
'Déprotège la feuille pour insérer l'heure
Target.Worksheet.Unprotect "mot de passe"
'Change le format de la date du jour au format heure : minutes
'A modifier selon tes besoins
ActiveCell.Value = VBA.Format(Now(), "hh:mm")
'Vérouille la cellule saisie
ActiveCell.Locked = True
'Protège la feuille
Target.Worksheet.Protect "mot de passe"
'Enregistre le classeur à chaque saisie
ThisWorkbook.Save

'On remet l'état d'affichage des messages d'alerte à l'origine
Application.DisplayAlerts = afficherMessage
End If
End If
End Sub

il faut d'après ce que j'ai compris, pour que les autres novices comme moi, que tu acceptes de clôturer le sujet

je te remercie pour tout le temps que tu m'as accordé, je progresse et c cool
je te remercie 10000fois

Éric
3
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
9 avril 2010 à 12:11
Bonjour Eric, je n'ai pas complétement compris ?
De plus, peut tu me dire pourquoi je ne peux plus accéder à cette formule, l'onglet reste inactif (gris)

Quand tu parles de formule tu parles du code VB dans l'éditeur ou bien de la valeur de la cellule ?

Pour ce qui est du reste j'ai un peu modifié le code que tu as fournis en ajoutant le vérouillage / dévérouillage de la cellule et une condition qui ne modifie pas la valeur de la cellule si celle-ci n'est pas déja saisie.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("D6:D44")) Is Nothing Then
        'On n'indique l'heure que si la cellule est vide ou n'est pas vérouillé
        If ActiveCell.Locked False Or ActiveCell.Value "" Then
            'Déprotège la feuille pour insérer l'heure
            Target.Worksheet.Unprotect
            'Change le format de la date du jour au format heure : minutes
            'A modifier selon tes besoins
            ActiveCell.Value = VBA.Format(Now(), "hh:mm")
            'Vérouille la cellule saisie
            ActiveCell.Locked = True
            'Protège la feuille
            Target.Worksheet.Protect
        End If
    End If
End Sub


Il ne te reste plus qu'as faire la formule qui permettra de compter le nombre d'heure mensuelle.
Chose que tu as déjà du faire je pense.
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
9 avril 2010 à 14:42
Bonjour Daffy17

Un grand grand merci à toi, pour m'avoir sorti de la galère ou j'étais, j'ai testé et c trop cool, tu es balèze et très réactif, oui je parlais de vba pour formule et je ne savais pas que l'on pouvais écrire en français dans vba.

encore merci

eric2027
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
9 avril 2010 à 16:03
re bonjour Daffy17

je n'arrive pas à faire fonctionner cette vba sur des autres colonnes, j'ai beau essayé de bidouiller, mais pas possible, te serai t il possible de me faire une autre vba sur une autre colonne de façon que je puisse faire la comparaison avec la première et comprendre le fonctionnement de cette vba.

par avance merci



eric2027
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
9 avril 2010 à 16:55
Il te suffit de modifier la ligne suivante :
If Not Intersect(Target, Range("D6:D44")) Is Nothing Then

Si tu observe bien on définit la plage des cellules D6 à D44.
Pour modifier la plage, modifie juste les valeur de cette ligne.
Par exemple pour pouvoir travailler de E1 à E20 écrit :
If Not Intersect(Target, Range("E1:E20")) Is Nothing Then


Si tu veux travailler sur plusieurs plages de données ajoute autant de fois que nécessaires entre
Is Nothing
et
Then
le code
Or Not Intersect(Target, Range("F1:F20")) Is Nothing


Ce qui te donnera
If Not Intersect(Target, Range("D6:D44")) Is Nothing Or Not Intersect(Target, Range("E1:E20")) Is Nothing Then


ou bien un autre exemple

If Not Intersect(Target, Range("D6:D44")) Is Nothing Or Not Intersect(Target, Range("D50:D75")) Is Nothing Or Not Intersect(Target, Range("E1:E20")) Is Nothing Then
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
9 avril 2010 à 20:43
Bonsoir
C super cool de ta part de m'aider ainsi, je vais essayer dès ce soir, je crois que je vais faire beaucoup de progrès si j'arrive à comprendre le fonctionnement des vga, que me conseil tu comme livre pour progresser parce que j'ai envie d'en connaitre plus, j'aime beaucoup office que je ne connaissait pas, ça m'a l'air d'être illimité.
C'est toujours écrit en anglais ?
Encore 1000 merci

eric2027
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
10 avril 2010 à 19:05
bonjour Daffy17
tout fonctionne, c vraiment cool sauf, petit problème quand j'enregistre et que je ré ouvre mon fichier, le code ne fonctionne plus, je ne comprends pas pourquoi, j'essaie d'enregistrer sous ,etc, mais j'ai l'impression que le fichier doit rester toujours ouvert, y a t il une solution pour que le code reste actif, là je bug, sinon je commence à comprendre les fonctions mais c hard, ouah c le pied mais dis dont il faut que je me remette a l'anglais.
par avance merci et bon we

eric2027
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
11 avril 2010 à 12:21
Bonjour Daffy
j'ai trouvé la solus pour le message que je t'ai envoyé hier, mais j'ai un autre souci, je peux quand même modifier mes cellules puis qu'il me demande d'ôter la protection de la feuille et je débloque je peux remettre l'heure que je veux,
Une autre question, est il possible de figer le texte de ma vba, ou mettre un mot de passe de façon a ne pas pouvoir y toucher si on essaie de l'ouvrir, j'ai peur que quel qu'un ne me la trafique
J'essaie pas de truc mais ça ne le fait pas
par avance merci pour ton aide précieuse


eric2027
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
12 avril 2010 à 12:20
Bonjour eric, désolé je ne suis pas souvent actif sur le forum le weekend.
Pour ce qui est du livre je ne pourrais pas te conseiller car ayant effectué un BTS informatique j'ai eu des cours de développement dispensé, et pour ce qui est de vba, j'ai appris "sur le tas" et en majeur partie grâce à des forums comme celui-ci.

J'ai améliorer la macro pour que celle-ci demande un mot de passe la première fois, si aucun n'as été défini.
Donc lorsque tu saisira la première heure, un mot de passe te sera demandé(Initialisation).
Par la suite lors des prochaines ouvertures, ce premier mot sera redemandé (Une seul fois par ouverture du classeur).
J'ai ajouté une ligne qui permet d'enregistrer le classeur à chaque saisie.
ThisWorkbook.Save

Si tu trouves cela trop lourd, qu'un enregistrement soit fait à chaque cliques sur une cellule tu peux toujours mettre une quote ' devant la ligne pour que vba la considère comme un commentaire.

'Cette variable "mdp" permettra de stocker le mot de passe pour
'vérouiller / dévérouiller la feuille et les cellules à chaques saisies
Public mdp As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("D6:D44")) Is Nothing Then
        'On indique l'heure que si la cellule est vide ou n'est pas vérouillé
        If ActiveCell.Locked False Or ActiveCell.Value "" Then
            'Cette variable va servir à garder l'état initiale de l'affichage des messages d'alerte
            Dim afficherMessage As Boolean
            'On récupère l'état d'affichage des messages d'alerte
            afficherMessage = Application.DisplayAlerts
            'On désactive les messages d'alerte
            Application.DisplayAlerts = False
            
            'Si le mot de passe est vide (on ne la pas encore saisie)
            If mdp = "" Then
                'Si la feuille n'est pas vérouillé
                If Target.Worksheet.ProtectContents = False Then
                    'On demande un mot de passe
                    mdp = InputBox("Veuillez saisir un mot de passe pour vérouiller la feuille :")
                    'On la vérouille
                    Target.Worksheet.Protect mdp
                Else
                    'Sinon c'est que la feuille est vérouillé, alors on demande de saisir le mot de passe
                    'pour pouvoir saisir les valeurs à l'avenir
                    mdp = InputBox("Veuillez saisir le mot de passe de la feuille :")
                End If
            End If
            'Déprotège la feuille pour insérer l'heure
            Target.Worksheet.Unprotect mdp
            'Change le format de la date du jour au format heure : minutes
            'A modifier selon tes besoins
            ActiveCell.Value = VBA.Format(Now(), "hh:mm")
            'Vérouille la cellule saisie
            ActiveCell.Locked = True
            'Protège la feuille
            Target.Worksheet.Protect mdp
            'Enregistre le classeur à chaque saisie
            ThisWorkbook.Save
            
            'On remet l'état d'affichage des messages d'alerte à l'origine
            Application.DisplayAlerts = afficherMessage
        End If
    End If
End Sub


Bien sur ce code n'est pas une solution universel, tout dépend de la méthode et des connaissances de chaque développeur. Un autre lecteur aurait pu te conseiller différemment.
J'ai essayé de commenté au maximum le code pour que tu puisse en comprendre tout le fonctionnement. Quelques notions de développement sont quand même requises pour comprendre les principes du "if"
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
12 avril 2010 à 12:50
Bonjour Daffy17

Cela fonctionne à merveille, du plus ça me passionne de plus en plus, je vais garder comme base ce que tu m'as envoyer et le décortiquer pour essayer de tout comprendre et faire des exercises et des tests.
Je te suis très reconnaissant de m'avoir accordé ton temps.
@ bientôt sur le forum.
Encore merci


eric2027
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
12 avril 2010 à 12:59
Plaisir que cela ai pu t'aider.
J'essaye d'aider autant que l'on as pu, et que l'on m'aidera encore sur les forums.
C'est grâce à la communauté que l'on progresse tous.

PS: Pense à cloturer le sujet en acceptant la réponse.
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
12 avril 2010 à 13:54
encore moi pour une autre question, comment fait on pour verrouiller le code vba, en effet si on click sur debocage, cela nous amène direct sur le code vba et il pourrait être trafiqué.
je te remercie



eric2027
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
12 avril 2010 à 14:00
Fait un clic droit sur VBAProject > Propriétés de VBAProject > Onglet Protection
Saisie le mot de passe et coche "Vérouiller le projet pour l'affichage"
Enregistre le fichier et à la prochaine ouverture il demandera le mot de passe pour modifier le code VBA.
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
12 avril 2010 à 15:28
ok je l'ai fait et ça fonctionne, je vais encore t'embêter, quand je click sur la cellule, il me demande le mot de passe si je fais annulé, il me mets l'heure, quand je veux changer manuellement, il me demande d'ôter la protection de la feuille, je vais dans ôter la protection de la feuille et là, je n'est plus qu'à taper l'heure que je veux, n'y a t il pas une astuce pour que soit protégée tout le temps les cellules
encore merci

eric2027
0
cs_eric2027 Messages postés 25 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 13 juillet 2011
13 avril 2010 à 17:36
Bonjour Daffy17

je ''avais laissé un dernier message mais après heure de galère, j'ai réussi ce que je voulais faire, je suis trop content, c trop cool

@+ sur le site


eric2027
0
Rejoignez-nous