Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Fonction maintenant en fonction d'autres cellules

narkoleptik

XLDnaute Junior
Salut

J'ai une question :
Je souhaite afficher dans une cellule B par exemple la date et l'heure en fonction de la cellule A.

Je m'explique :
La cellule A doint être checkée avec un "x" et je veux savoir la date et l'heure à laquelle elle a été remplie.

J'ai essayé la formule suivante :
SI(A="x";MAINTENANT();"")

Ca fonctionne mais quand le fais la même opération sur la cellule D qui doit être replie avec date/heure en fonction de la C, alors la B remet la date et l'heure de la D.

En fait, je souhaite afficher date et heure mais de manière figée. C'est un tableau de plusieurs centaines de cellules.

Si je me fais mal comprendre, dites le moi, je vous enverrai un exemple.

Slt
 

vgendron

XLDnaute Barbatruc
Re : Fonction maintenant en fonction d'autres cellules

Bonjour
la fonction Maintenant() est recalculé à chaque fois que Excel fait un nouvea calcul, et comme le temps n'est pas figé. il se met à jour

tu peux contourner le pb en écrivant ce bout de code dans l'évènement de la feuil1

Alt+F11 pour ouvrir l'éditeru VBA
clic droit sur la feuil1 du projet du nom de ton fichier
puis copie colle ce code
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 and target="x" Then Target.Offset(0, 1) = Time
End Sub

ici. dès qu'une cellule de la 1ere colonne (colonne A) change et qu'elle contient "x" , la date est mise dans la colonne B
 

narkoleptik

XLDnaute Junior
Re : Fonction maintenant en fonction d'autres cellules

Super, ça a l'air de fonctionner.
Par contre, pour l'adapter à mon fichier, il faut que je modifie un peu.
En fait, je dois vérifier sir les cellules des colonnes 7 et 8 sont vides. Si elles sont non vides, alors il faut inscrire la date et l'heure dans les cellules de la colonne 12.
Du coup, comme je ne maitrise pas VBA, je comprends bien la logique du début de ta forumle, mais pas la fin.
 

vgendron

XLDnaute Barbatruc
Re : Fonction maintenant en fonction d'autres cellules

Il faudrait que tu postes ton fichier exemple pour qu'on y voit plus clair
pour explication
Target: c'est la cellule sur laquelle tu as modifiée et qui a provoqué l'appel à l'évènement de la feuille Worksheet_Change
target.column, c'est la colonne de la cellule modifiée
target="x"; on teste le contenu de la cellule

Code:
If Target.Column = 1 and target="x" Then Target.Offset(0, 1) = Time

en français ca donne
si la colonne de la cellule est 1 (colonne A) ET contenu cellule="x" ALORS, la cellule d'a coté (décalage de 0 ligne, 1 colonne) prend l'heure

pour la suite. j'ai ma petite idée de ton besoin, mais je préfère voir ton fichier pour en etre sur ;-)
 

narkoleptik

XLDnaute Junior
Re : Fonction maintenant en fonction d'autres cellules

voilà le fichier exemple
J'ai bien compris la logique mais du coup, je rajoute des contraintes!
 

Pièces jointes

  • exmpl.xlsm
    11 KB · Affichages: 36
  • exmpl.xlsm
    11 KB · Affichages: 38
  • exmpl.xlsm
    11 KB · Affichages: 40

vgendron

XLDnaute Barbatruc
Re : Fonction maintenant en fonction d'autres cellules

Hello,

ci dessous le code à placer

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si modif de la colonne G

If Target.Column = 7 Then

    If (Target = "x" Or Target = "X") And (Target.Offset(0, 1) = "a" Or Target.Offset(0, 1) = "A" Or Target.Offset(0, 1) = "r" Or Target.Offset(0, 1) = "R" Or Target.Offset(0, 1) = "p" Or Target.Offset(0, 1) = "P") Then
        Target.Offset(0, 6) = Time
    End If
'si modif de la colonne H
ElseIf Target.Column = 8 Then
    If (Target.Offset(0, -1) = "x" Or Target.Offset(0, -1) = "X") And (Target = "a" Or Target = "A" Or Target = "r" Or Target = "R" Or Target = "p" Or Target = "P") Then
        Target.Offset(0, 5) = Time
    End If

End If


End Sub

il y a surement plus simple et plus court
exemple; faire un tableau contenant la liste des valeurs acceptées,
utiliser un upcase pour gerer minuscule et majuscule
éviter de faire quasiment le meme test en fonction de si on modifie la colonne G ou H
 

vgendron

XLDnaute Barbatruc
Re : Fonction maintenant en fonction d'autres cellules

voila déjà plus court avec le Ucase

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si modif de la colonne G

If Target.Column = 7 Then
    If UCase(Target) = "X" And (UCase(Target.Offset(0, 1)) = "A" Or UCase(Target.Offset(0, 1)) = "R" Or UCase(Target.Offset(0, 1)) = "P") Then
        Target.Offset(0, 6) = Time
    End If
'si modif de la colonne H
ElseIf Target.Column = 8 Then
    If (UCase(Target.Offset(0, -1)) = "X") And (UCase(Target) = "A" Or UCase(Target) = "R" Or UCase(Target) = "P") Then
        Target.Offset(0, 5) = Time
    End If
End If

End Sub
 

Eneg5510

XLDnaute Nouveau
Re : Fonction maintenant en fonction d'autres cellules

Tu peux tout simplement dans la cellule ou tu veux figer une date, appuyer sur les touches Ctrl et ; pour l'heure c'est la touche Ctrl et :
Essaie et dis moi ce que tu en pense
 

narkoleptik

XLDnaute Junior
Re : Fonction maintenant en fonction d'autres cellules

@ vgendron : Autant ça marchait avec le premier code, là ça ne fonctionne pas, ni sans le ucase ni avec.
@Eneg5510 : j'ai essayé rapidement, mais je ne comprends pas la logique.
 

vgendron

XLDnaute Barbatruc
Re : Fonction maintenant en fonction d'autres cellules

ha??
bizarre. chez moi ca marche bien. bon. sauf que je m'a gourré, l'heure se mettait en colonne M au lieu de L
donc modif
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si modif de la colonne G

If Target.Column = 7 Then
    If UCase(Target) = "X" And (UCase(Target.Offset(0, 1)) = "A" Or UCase(Target.Offset(0, 1)) = "R" Or UCase(Target.Offset(0, 1)) = "P") Then
        Target.Offset(0, 5) = Time
    End If
'si modif de la colonne H
ElseIf Target.Column = 8 Then
    If (UCase(Target.Offset(0, -1)) = "X") And (UCase(Target) = "A" Or UCase(Target) = "R" Or UCase(Target) = "P") Then
        Target.Offset(0, 4) = Time
    End If
End If

End Sub
avec le fichier en PJ pour une fois
 

Pièces jointes

  • exmpl.xlsm
    17.4 KB · Affichages: 41
  • exmpl.xlsm
    17.4 KB · Affichages: 42
  • exmpl.xlsm
    17.4 KB · Affichages: 39

narkoleptik

XLDnaute Junior
Re : Fonction maintenant en fonction d'autres cellules

Bon j'ai trouvé ce que je voulais :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si modif de la colonne G

If Target.Column = 7 Then
    If UCase(Target) = "X" Then
        Target.Offset(0, 6) = Time
    End If
'si modif de la colonne H
ElseIf Target.Column = 8 Then
    If (UCase(Target) = "A") Or (UCase(Target) = "P" Or UCase(Target) = "R") Then
        Target.Offset(0, 5) = Time
    End If
End If

End Sub

Dernière modif souhaitée : Avoir la date du jour où on check les colonnes G et H sur le même principe que l'heure mais en colonne-1 par rapport à l'heure.
 

JBOBO

XLDnaute Accro
Re : Fonction maintenant en fonction d'autres cellules

re,

Non car la formule fait reference à elle même. Par contre si tu effaces les colonnes ou tu inscrits "x" et "a, r, ou p", alors dans ce cas oui.
 

Discussions similaires

Réponses
2
Affichages
176
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…