Figer une date sous condition [Résolu]

astreal - 20 déc. 2013 à 14:34 - Dernière réponse :  astreal
- 30 déc. 2013 à 10:08
Bonjour,
Je suis débutante VBA et je suis bloqué depuis plusieurs jours sur une formule. J'aurais besoin d'aide.
Ma première colonne va chercher avec la fonction rechercheV les donné sur une autre feuille, la deuxième c'est la fonction stxt pour prendre juste le texte que je souhaite dedans, et la troisième (c'est la que j'ai un problème) s'il y a écrit "TCLO" dans la seconde elle doit comporter une croix, la quatrième c'est une formule, et la cinquième c'est du vba pour figer la date.

ça me donne le code suivant:

Private Sub worksheet_change(ByVal value As Excel.Range)

If Not Application.Intersect(value, Range("ad4:ad" & [ad65000].End(xlUp).Row)) Is Nothing Then
If vCellule = "x" Then
target.Columns.Offset(0, 3) = Now
Else
target.Columns.Offset(0, 3).ClearContents
End If
End If

End Sub

a mon avis ce qui bug c'est ce que j'ai mis en gras.
pourriez vous m'aidez.
Il faut que la croix se mette automatiquement dès que le mot TCLO apparait dans la case d'à côté.
Afficher la suite 

Votre réponse

23 réponses

Meilleure réponse
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 16:14
1
Merci
Tu peux tester cette macro :
Bien sur ...A toi de l'adapter à tes besoins
Sub test()
For l = 1 To 100
'Si, sur la ligne "l" la cellule en A contient TCLO
' et celle en B contien X  et qu'en colonne D la cellule est vide alors:
If Cells(l, 1).Value = "TCLO" And Cells(l, 2).Value = "x" And Cells(l, 4).Value = "" Then
  'on inscrit la date
  Cells(l, 4).Value = Now

End If
Next
End Sub


nb: cette macro est à lancer "manuellement". mais tu peux tout aussi bien la mettre dans Private Sub Worksheet_Activate() ou toute autre méthode de déclenchement "automatique"

Merci jordane45 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de jordane45
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscriptionModérateurStatut 28 août 2015 Dernière intervention - 20 déc. 2013 à 14:45
0
Merci
Salut

Deux choses me paressent étranges :
- La déclaration de "Worksheet_Change"
Il n'est pas judicieux d'avoir modifié la déclaration originale.
"value" est un mot clé du langage et pourrait poser problème.
(normalement, c'est "Target" que d'ailleurs on retrouve plus bas dans tes lignes)
- Syntaxe
Tu écris "If vCellule = ..."
Mais où est définie "vCellule" ?
Mieux vaut toujours écrire les syntaxes complètes :
"If vCellule.Text = ..."
ou "If vCellule.Value = ..."
ou "If vCellule.Value2 = ..."

Pense à utiliser le debogage pour suivre ce que fait ton programme :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage.
Lors de l'arrêt, survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6/VBA) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
Commenter la réponse de cs_Jack
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 14:48
0
Merci
Bonjour,

Tu as remplacé TARGET par value...pourquoi ?

Target te retourne une RANGE (une plage de cellles..)

pour l'utiliser c'est comme ça :
Private Sub Worksheet_Change(ByVal Target As Range)
mavaleur = Target.Value
ligne = Target.Row
colonne = Target.Column
adresse = Target.Address

MsgBox mavaleur
MsgBox ligne
MsgBox colonne
MsgBox adresse


End Sub

J'ai remplacé target par value parce que j'ai une formule dans la cellule ou je prend mon information et avec target tout seul, ça bug.

la macro que j'avais trouvé qui ne buggé pas c'est celle-ci :
Private Sub worksheet_change(ByVal target As Excel.Range)
If Not Application.Intersect(target, Range("ad4:ad" & [ad65000].End(xlUp).Row)) Is Nothing Then
If target = "x" Then
target.Columns.Offset(0, 3) = Now
Else
target.Columns.Offset(0, 3).ClearContents
End If
End If

End Sub

Mais pour celle-ci je dois mettre la "x" à la main, hors pour mon fichier elle doit se mettre automatiquement dès que dans la cellule précédent le mot "TCLO" parait.(cela sur toute la colonne)
Et je ne sait pas comment le formaliser en vba.
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 15:38
J'ai remplacé target par value parce que j'ai une formule dans la cellule ou je prend mon information et avec target tout seul, ça bug.
Hein ??

Target correspond à la cellule modifiée ( à la main...) .. la cellule dans laquelle tu es entrée pour y saisir quelque chose....
Exemple:.. si tu clics dans la cellule A1 et que tu y saisies quelquechose;. c'est A1 qui sera contenu dans Target... pas autre chose.

je dois mettre la "x" à la main
Oui.. c'est bien ce que je viens de t'expliquer.



Peux-tu expliquer clairement ce que tu souhaites faire ?
Par exemple :
- Je saisie une valeur " toto" dans la cellule ..A1 ou la colonne B...
- Si cette valeur = "X" alors je mets dans la colonne Z la valeur "toto"...
Commenter la réponse de jordane45
0
Merci
Désolés de vous embêter encore, mais mon fichier ne fonction toujours pas.
Comme je l'écrit plus au, avec la macro qui ne bug pas je dois mettre le "x" à la main, hors pour mon fichier il doit se mettre automatiquement dès que dans la cellule précédent le mot "TCLO" parait.(cela sur toute la colonne)
Et je ne sait pas comment le formaliser en vba.
Commenter la réponse de astreal
0
Merci
Bonjour jordan45

Concrètement si :
A1="TCLO" (s'est un abrégé de terme technique:ma condition obtenu avec la formule recherchev)
B1="x" (pour la colonne terminé)
et 2 cellule plus loin je veux que la date du jours s'inscrive et se fige. pour que le lendemain elle ne change plus.

Et cela sur la totalité des ligne des colonnes

Est-ce plus compréhensible?
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 16:06
j'ai une formule dans chaque cellule.Je te l'ai dit je suis une débutante..
Il faut bien commencer un jour ^^
Par contre ça ne répond pas à mes questions..
Mais comment je peut automatiser le fait de mettre un "x" dans la case B1 si A1 = "TCLO" et figer la date du jour 3 cellule plus loin, avec ma formule vba ci dessous:


Private Sub worksheet_change(ByVal target As Excel.Range)
If Not Application.Intersect(target, Range("ad4:ad" & [ad65000].End(xlUp).Row)) Is Nothing Then
If target = "x" Then
target.Columns.Offset(0, 3) = Now
Else
target.Columns.Offset(0, 3).ClearContents
End If
End If

End Sub
En faite je travail sur un fichier avec des délais.
La croix "x" ne changera jamais, elle indique que l'action a bien été réalisée. Elle ne s'inscrira que si dans un fichier se trouvant dans une autre page se trouve la bonne information qui mettra l'information "TCLO" dans la case A1 pour toi avec la formule recherchev. Et si l'action et réalisé donc la case coché avec un "x" je veux que la date du jour apparaisse et se fige 3 cellules plus loin.

Cela répond mieux à tes questions?
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 16:18
If target = "x" Then

' Utilise .value pour ton target !
If target.value = "x" Then 
 
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 16:21
On est d'accord également que tu souhaites lancer ta macro lorsque tu cliques dans la colonne AD de ta feuille ?
http://forum.excel-pratique.com/cours-astuces/utilisation-de-la-methode-intersect-t1314.html
Commenter la réponse de astreal
0
Merci
Merci je l'ai un peu modifier pour que la croix ce mette toute seule quand l'action est terminé dans le fichier transverse.
Cela donne :

Sub test()
For l = 1 To 100
'Si, sur la ligne "l" la cellule en A contient TCLO
' et celle en B contien X et qu'en colonne D la cellule est vide alors:
If Cells(l, 29).value = "TCLO" And Cells(l, 30).value = "" And Cells(l, 34).value = "" Then
'on inscrit la date
Cells(l, 34).value = Now And Cells(l, 30).value = "x"

End If
Next
End Sub

et en vba j'ai mis
Option Explicit
Private Sub worksheet_Activate()

Call test
End Sub

mais rien ne ce passe est ce normal?
Sub test()
For l = 1 To 999
'Si, sur la ligne "l" la cellule en A contient TCLO
et celle en B contien X et qu'en colonne D la cellule est vide alors:
If Cells(l, 29).value = "TCLO" And Cells(l, 30).value = "" And Cells(l, 33).value = "" Then
'on inscrit la date
Cells(l, 33).value = Now
Cells(l, 30).value = "x"

End If
Next
End Sub
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 17:00
-As tu essayé de lancer ce code ne mode pas à pas ?
- Est ce que les cellules (lors de l'execution de cette macro ) ont bien les valeurs attendues ?


Essayes de rajouter des instructions de "debugage" dans ton code pour essayer de comprendre ce qui se passe :
Sub test()
For l = 1 To 1000
'Si, sur la ligne "l" la cellule en A contient TCLO
' et celle en B contien X et qu'en colonne D la cellule est vide alors:
col1 = Cells(l, 29).Value
col2 = Cells(l, 30).Value
col3 = Cells(l, 34).Value
Debug.Print "col1: " & col1 & "col2: " & col2 & "col3: " & col3
If col1 = "TCLO" And col2 = "" And col3 = "" Then
  'on inscrit la date
  Cells(l, 34).Value = Now
  Cells(l, 30).Value = "x"
   Debug.Print " --> Valeurs ajoutées"
End If
Next
End Sub

Ça fonctionne!!!!!!
Merci beaucoup je vais pouvoir partir en vacances l'esprit tranquille!
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 20 déc. 2013 à 17:09
n'oublie pas de passer ce sujet en RESOLU stp;

Bonnes vacances
Désolés pour le retard, j'étais trop pressé de partir en vacances. Problème résolu. Encore Merci.
Commenter la réponse de astreal
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 20/12/2013 à 17:57
0
Merci
Bonjour,
L'éternel problème du "mixage" de formules et de code vba. Les premières et le second s'exécutant dans deux fils (threads) totalement distincts, aucun évènement Change n'est provoqué par les premières.
Ainsi : aucune de tes formules en colonnes A, B et C ne provoqueront le déclenchement d'un évènement Change dans lequel tu pourrais mettre du VBA pour modifier la colonne D.
Il te faut donc :
-soit en effet passer par une boucle (lent, donc)
- soit agir sur l'évènement Change de la ou des cellule(s) sur ta feuille sur laquelle tu recherches avec rechercheV (ta formule en colonne A). Cette ou ces cellules doit/doivent alors ne pas contenir elle(s)-même(s) une formule, mais une constante (que cette constante soit saisie ou importée ou qu'elle soit calculée par VBA)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.