IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

macro pour figer une cellule avec date et heure


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut macro pour figer une cellule avec date et heure
    Bonjour,

    j'ai une feuille excel dans laquelle des opérateurs viennent renseigner une date et une heure précise à laquelle ils font une opération.

    pour éviter les mauvaises saisies, je voulais faire une macro ou la date et l'heure s'inscrit toute seule en fonction de la cellule de la colonne précédente est vide ou pas

    Nom : Sans titre.png
Affichages : 3025
Taille : 15,0 Ko

    j'ai commencé à écrire un bout de code (mais je suis débutante) , et du coup a chaque nouvel enregistrement les dates déjà inscrites se mettent à jour et changent d'heure, car la j'ai utilisé la formule now() et du coup tout ce mets a jour. il faudrait qu'une fois inscrite la formule disparaisse mais que la valeur reste.



    Ce que je souhaite :

    - que l'opérateur, lorsqu'il saisi son nom en cellule A, la date et heure s'incrivent toutes seules dans la cellule B

    - Que la date et heure ne change pas après l'enregistrement du fichier (du style copie/colle valeur),


    je vous remercie pour votre aide

    bonne soirée à vous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par karlgina Voir le message
    Bonjour,


    A placer dans le module de votre onglet de saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
         If Target.Count > 1 Then Exit Sub
     
         If Not Intersect(Target, Columns(1)) Is Nothing Then
     
            If Target.Offset(0, 1) = "" Then
               Target.Offset(0, 1) = Now()
            End If
     
         End If
     
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Par défaut
    - Que la date et heure ne change pas après l'enregistrement du fichier (du style copie/colle valeur)
    Il faudrait manuellement faire le unlock the toutes les cellules, proteger la feuille et puis mettre la propriete de la cellule .Locked=True a la fin du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Target.Offset(0, 1) = "" Then
          Target.Offset(0, 1) = Now()
          Me.Unprotect
          Target.Offset(0, 1).Locked = True
          Me.Protect
    End If

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut
    merci beaucoup,

    en ce qui concerne la protection des cellules, j'y ai pensé mais les opérateurs ont parfois besoin de modifier à la main.

    ça fera peut-être parti d'un projet un peu plus complexe.

    une petite chose encore ,

    est ce qu'il est possible de calculer automatiquement via la macro l'écart entre en heure entre une cellule date entrée et une cellule date sortie si cette dernière est renseignée.

    je vous ai mis ce que je souhaite dans un fichier.


    merci encore pour votre aide
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Par formule

    =TEXTE(D2-B2;"hh:mm:ss")
    Il faut savoir qu'une date seule est un entier.
    Si des heures, minutes, secondes viennent s'y greffer, alors ces nombres sont avec virgule.
    Les heures, minutes, secondes reviennent ainsi au fractionnement d'une journée.

    A titre d'information, tu peux consulter le tutoriel de Silkyroad et la FAQ à ce sujet .

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut
    Bonjour,

    en fait je ne veux pas de formule a proprement dit dans mon tableau, car les opérateurs arrivent toujours à me la foutre en l'air

    donc je préfére une macro

    je vais regarder le tuto

    merci encore

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,


    A placer dans le module de votre onglet de saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
         If Target.Count > 1 Then Exit Sub
     
         If Not Intersect(Target, Columns(1)) Is Nothing Then
     
            If Target.Offset(0, 1) = "" Then
               Target.Offset(0, 1) = Now()
            End If
     
         End If
     
    End Sub
    et qu'est ce qui empeche de surécrire sur existant hein!!!???? manuellement ou par VBA!!!!
    Nom : demo3.gif
Affichages : 2660
Taille : 96,8 Ko

    si il n'y a pas de memo ou protection c'est pas possible

    pour le memo un tableau fait l'affaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim tablo As Variant
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count > 1 Or Target.Column > 1 Then Exit Sub
        If IsEmpty(tablo) Then tablo = Range("A:B")
        If tablo(Target.Row, 1) <> "" And tablo(Target.Row, 1) <> Target.Value Then Target.Value = tablo(Target.Row, 1) Else Target.Offset(, 1) = Now()
        tablo = Range("A:B")
    End Sub
    Nom : demo3.gif
Affichages : 2640
Taille : 306,5 Ko


    et encore il y a des failles


    si on veut vraiment pas pouvoir bousiller ces deux colonnes
    comme ceci c'est top
    on ne peut pas modifier manu ou par vba les deux colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Dim tablo As Variant    'variable tablo globale!!!!
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count > 1 Then Exit Sub    ' si il y a plus d'une cellule on sort (CA POURRAIT ETRE LA SEULE FAILLE!!!! )
    '
        If Target.Column = 1 Then    ' si on est dans la colonne 1
    '
            If IsEmpty(tablo) Then tablo = Range("A:B")    'si tablo n'a pas encore été dimentionné on dimentionne provisoirement a deux colonnes entieres
    '
    'si l'item tablo en colonne 1 meme ligne que target  n'est pas vide et different de target alors...
            If tablo(Target.Row, 1) <> "" And tablo(Target.Row, 1) <> Target.Value Then
                '
                Target.Value = tablo(Target.Row, 1)    'on le remet
                '
            Else    'autrement
                '
                Target.Offset(, 1) = Now()    'on met la date
                '
            End If    'fin de control pour target en colonne 1
            '
        ElseIf Target.Column = 2 Then    ' si target est en colonne 2
            '
            If tablo(Target.Row, 2) <> "" Then Target = tablo(Target.Row, 2)    'on remet la date du tablo colonne 2 meme ligne que targetsi l'item du tablo n'est pas vide
            '
        End If    'fin de control target en colonne 2
        '
        tablo = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row + 1)    ' on rememorise tablo mais cette fois ci a la dimmention de la plage utilisée en "A:B" car on a au moins une ligne de rempli
        '
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Juste pour information.
    Si tu es débutant en VBA, pourquoi ne profites-tu pas des facilités d'excel et de ces raccourcis
    Tu mets la date et l'heure dans deux colonnes séparées il suffit alors d'expliquer aux utilisateurs deux petits raccourcis Ctrl + ; (pour insérer la date du jour) et Ctrl + : (pour insérer l'heure)
    Si tu souhaites ensuite avoir la date et l'heure sur une même colonne, une simple addition des deux cellules fera l'affaire.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    la memorisation par vba dans une quelconque variable peut etre une faille en elle meme
    en effet si dans une autre feuille ou module une erreur est declenché la memoire est vidé
    il ne reste plus que la memorisation dans un object qui ne sera pas detruit par une erreur vba
    les commentaires peuvent etre une des solutions


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count > 1 Or Target.Column > 2 Then: Exit Sub
        If Target.Column <= 2 Then
            Application.DisplayCommentIndicator = xlNoIndicator
            If Target.Comment Is Nothing Then
                If Target.Value <> "" Then
                    With Target: .AddComment: .Comment.Text Text:=Target.Text: .Comment.Visible = False: .Comment.Shape.Width = 0: .Comment.Shape.Height = 0
                        If .Column = 1 Then .Offset(, 1).Value = Now()
                    End With
                End If
            Else
                Target.Value = Format(Target.Comment.Text, Target.Comment.Text)
            End If
        End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.DisplayCommentIndicator = IIf(Target.Column > 2, True, False)
    End Sub
    une fois qu'une cellule en colonne 1 ou 2 a son commentaire c'est fini tu ne peut plus la modifier
    je les reduit a la taille de zero et l'indicateur de commentaire est inhibé si la selection se trouve en colonne 1,2 pour la commodité visuelle
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Patrick bonjour
    On peut toujours modifier le commentaire.

    On peut aussi modifier la cellule par copier/ coller

Discussions similaires

  1. [XL-2016] Macro pour Copier une cellule avec mise en forme
    Par ggerphagnon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2017, 22h08
  2. [XL-2010] Macro pour écrire une formule avec des variables (cellule)
    Par xuan203 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2017, 10h29
  3. [XL-2003] macro pour modifier une cellule déverouillée par mot de passe
    Par jayroom dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 23/04/2012, 11h39
  4. [XL-2003] macro pour remplir une cellule en fonction d'une autre
    Par kamilane dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/07/2010, 15h40
  5. [XL-2003] Macro pour copier une cellule d'un classeur à un autre sous condition
    Par mairiemeudon dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 14/06/2010, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo