Figer une date sous condition

Résolu
astreal - 20 déc. 2013 à 14:34
 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é.

7 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 déc. 2013 à 16:14
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"
1
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 déc. 2013 à 14:45
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 déc. 2013 à 14:48
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

0
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.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
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"...
0
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.
0

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

Posez votre question
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?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 déc. 2013 à 16:00
oui c'est un peu mieux.

Par contre
A1="TCLO" (s'est un abrégé de terme technique:ma condition obtenu avec la formule recherchev)

-Comment, selon toi, doit se déclencher le lancement de cette macro ?
-Est-ce que à un moment tu "modifie" cette feuille manuellement ou est-ce uniquement via des formules ?
(si le déclenchement doit s'effectuer au momment ou Excel actualise les "formules) tu peux essayer avec :
Private Sub Worksheet_Calculate()
0
j'ai une formule dans chaque cellule.Je te l'ai dit je suis une débutante....
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
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..
0
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
0
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?
0
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?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 déc. 2013 à 16:46
Déjà, pense à utiliser la coloration syntaxique lorsque tu colle du code sur le site...
(voir ICI si tu ne sais pas comment faire )

Ensuite;.. tu ne peux pas utiliser AND pour l'écriture des valeurs..
Cells(l, 34).Value = Now
'supprimer le AND entre les deux 
Cells(l, 30).Value = "x"
0
j'ai fait ce que tu m'a dit mais cela ne marche toujours pas
0
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
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

0
Ça fonctionne!!!!!!
Merci beaucoup je vais pouvoir partir en vacances l'esprit tranquille!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 20/12/2013 à 17:57
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
0
Rejoignez-nous