Problème avec la fonction =Maintenant().

  • Initiateur de la discussion Initiateur de la discussion ravenolhm
  • 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 !

R

ravenolhm

Guest
Bonsoir à tous !

Comme la plus part des personnes présentent sur ce forum, je viens poster car je suis embêté par un « truc » sur Excel.

Mon soucis concerne la fonction =MAINTENANT.

Mon fichier (exemple type) :

Une table « d’engagement » avec référence (X1 ;X2 ;X3 ;X….), quantité engagée et heure à laquelle la quantité de la ref à été engagée : pour cela j’ai utiliser la fonction suivante « =si(Bx=« » ; « » ; Maintenant()) ».

Shot at 2011-10-25


Shot at 2011-10-25

Le problème :

Lors que j’engage 22 pièces X2, la cellule de l’heure affiche 15 :25 :29. jusque la tout va bien. Mais dés que j’engage une nouvelle référence, toutes les heures sont mise niveau (c-a-d la dernière modification apportée.)


Shot at 2011-10-25

Mon souhait :

Chaque lignes soient indépendantes pour la fonction =Maintenant().

La solution :

Ba…. J’attends vos suggestions et réponses  merci d’avance pour vos commentaires !!! bonne soirée.
 
Re : Problème avec la fonction =Maintenant().

Bonjour à tous,
Bienvenue sur XLD,

Cette fonction est volatile : elle se recalcule à chaque... cacul.

Pour insérer rapidement l'heure courante : Ctrl + :
Ou un code qui pose l'heure en dur dans la cellule adjacente
A + à tous
 
Re : Problème avec la fonction =Maintenant().

Bonsoir JCGL, ravenolhm

Peut-être comme ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("B2:B65536")) Is Nothing Then Exit Sub
  If Not IsEmpty(Target) Then
    Cells(Target.Row, 3).Value = Now
  Else
    Cells(Target.Row, 3).Value = ""
  End If
End Sub
Klin89
 
Dernière édition:
Re : Problème avec la fonction =Maintenant().

Bonjour à tous et merci pour toutes ces réponses et ces idées, malheureusement, cela n'est pas très concluant. Mais peut être est-ce la fonction qui est mal adaptée à mon besoin, en réalité ce premier fichier excel "d'engagement" sert à un second qui créer une liste des références et quantités engagées dans l'ordre chronologique (d'engagement), d'où l'idée d'utiliser l'heure à laquelle elles ont été engagées.

Pour vous donner une idée j'ai 2600 références... et je n'ai pas le temps de parcourir les 2600 lignes et de faire du copié collé, surtout quant j'engage 1300 pièces par jours....

peut être qu'une fonction d'incrément serait plus appropriée : lorsque j'engage 10 pièces X1 => C3 = 1 (N°1)
puis 20 pièces de X3 ==> C5 = 2 etc...

Après quoi, une macro dans le fichier N°2 récupèrerait et copierait les informations des colonnes A, B et C du fichier N°1 toujours et encore dans l'ordre d'engagement

Cependant, et à tout moment, je dois pouvoir a nouveau ré engager x nouvelles pièces de X1 mais à ce moment la C3 n'est plus = 1 mais à un nouvel incrément....

j'essai d'être le plus claire possible... je sais (en tous cas pour moi) que ce n'est pas simple xD
Mais même si je débute, j'adore la logique de résolution c'est un peu comme une énigme 🙂

merci encore et d'avance pour votre aide !

Ps si vous avez le titre d'un bouquin pour Excel (formule + vba...) Je prends !!!
 
Re : Problème avec la fonction =Maintenant().

Bonjour à tous,
Salut Klin89,
Salut Jean-Marcel 🙂,

Ravenolhm : il me semble que le code de Klin89 devrait convenir.

Tu peux aussi utiliser la fonction MAX()
En C3 et vers le bas :
=SI(ET(B3<>"";A3<>"");MAX($C$2:C2)+1;"")
pour incrémenter de 1 à chaque nouvelle saisie en A ET B

Un fichier serait souhaitable si cela ne correspond pas à ta demande...

A+ à tous
 
Re : Problème avec la fonction =Maintenant().

Bonjour
une autre solution :
dans le code de la feuille ou tu veux entrer la date tu mets cette macro

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("C:C")) Is Nothing And IsEmpty(ActiveCell.Value) Then
        ActiveCell.Value = Now
    End If
    
    Cancel = True
 End Sub

quand tu fais un double clic dans une cellule de la colonne C, si la cellule est vide ça te met la date en dur (à toi de choisir le format qui te convient, avec l'heure ou pas) si la cellule contient déjà quelque chose ça ne fait rien. C'est super rapide quand il faut vérifier rapidement de longues listes.
 
Re : Problème avec la fonction =Maintenant().

Bonsoir à tous, j'ai finalement trouvé par hasard un sujuet similaire pour ne pas dire identique qui réponds tout à fait à mon premier cahier des charges :

www.excel-downloads.com/forum/24276-fonction-maintenant.html

la solution que propose robert à l'extreme avantage de n'avoir plus qu'à faire un simple copier coller...

Private Sub Worksheet_Change(ByVal Target As Range) 'à chaque modification
'n'agit que si la cellule active (Target) est dans la colonne A
'si l'intersection plage(A2:A65536) et Target n'est pas vide
If Not Application.Intersect(Target, Range("A2:A65536")) Is Nothing Then
'écrit l'équivalent de MAINTENANT() mais figé dans la cellule adjacente
Target.Offset(0, 1).Value = Now
'si tu effaces le code barre, efface aussi la date
If Target.Value = "" Then Target.Offset(0, 1).Value = ""
End If
End Sub

la seul choses que je ne comprends pas c'est comment VBA fonctionne pour dire "cellule adjacente"

la difficulté qui s'ajoute est que j'ai finalement deux colonnes de quantité... ce qui donne :

Ref ==> QT 1 ==> QT 2 ==> heure

j'ai essayé bêtement (oui car je n'ai que quelques heures sur VBA) d'agrandir ma page de sélection en remplaçant

"If Not Application.Intersect(Target, Range("A2:A65536")...... par (Target, Range("A2:B65536")....

je vous laisse deviner le résultat 😉

si vous pouviez juste m'éclairer sur cette modif et par la même occasion me guider aussi sur les ref d'un bouquin pour débutant légèrement atteint sur VBA Access et Excel !

Je vous souhaite à tous une excellente soirée !
 
Re : Problème avec la fonction =Maintenant().

Si tu avais testé ma proposition tu aurais vu qu'elle évite de créer une nouvelle colonne....

oui de fait il est utile de comprendre un minimum du langage de VBA pour se lancer. Tu trouveras des tutos sur ce site et également ici
Les macros Excel | www.excelabo.net

Il y a des tonnes de bouquins. Je te conseille de commencer par un petit, que tu as facilement sous la main et qui ne te décourage pas de continuer. Les bouquins de John Walkenbach sont une référence en la matière et il en a écrit pour tous les appétits (des bibles et des petits !). Le mieux c'est d'aller chez ton libraire préféré et de feuilleter.

Complément :
If Not Application.Intersect(Target, Range("A2:A65536"))... dans la macro de robert fait que la macro n'agit que dans la colonne A. Comme tes données sont dans la C, c'est pourquoi j'ai écrit
If Not Intersect(Target, Range("C:C")) ...

offset = décalage, ça te permet de définir une référence de cellule (ou de plage de cellule) à partir d'une autre : tu pars de H4 par exemple et tu décales de 1 ligne vers le bas et 2 vers la droite s'écrit
range("H4").offset(1,2)
 
Dernière édition:
- 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