GregMIA
Messages postés7Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention11 septembre 2008
-
8 sept. 2008 à 10:34
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 2013
-
8 sept. 2008 à 15:44
Bonjour,
Je débute en VBA. J'aimerai que le texte d'une cellule change par rapport à une autre. J'ai créé le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("F21").Text = "Texte 1" Then
Range("C23").Value = "Reponse1"
ElseIf Range("F21").Text = " Texte2" Then
Range("C23").Value = "Reponse1"
Else: Range("C23").Value = "Reponse2"
End If
End Sub
L'idée étant que la Cellule C23 affiche "Reponse" 1 si la F21 affiche "Texte 1" ou "Texte 2". Sinon, elle affichera "Reponse 2".
Cela fonctionne, mais il y a un long lag (5 secondes environ) à chaque fois que la fonction est appelée. Comment faire ?
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 8 sept. 2008 à 15:16
l'évenement change dans VBA excel ne s'applique que pour l'objet woksheet
donc pas possible de l'utiliser pour la cellule
et comme je n'ai jamais utilisé VBA pour ce genre d'action je ne vois pas trop que te dire
peut être utiliser target
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.column <>6 Or target.row<>21 then exit sub 'sortir imédiatement si ce n'est pas la cellule F21 qui a été modifiée
If Range("F21").Text "Texte 1" Or Range("F21").Text " Texte 2" Then
Range("C23").Value = "Reponse1"
Else
Range("C23").Value = "Reponse2"
End If
End Sub
c'est de la bidouille mais ça doit marcher
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
cs_thierry la fronde
Messages postés351Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention12 août 2009 8 sept. 2008 à 10:53
bonjour,
la fonction conditionnelle SI serait plus adaptée.. à mon avis; le code vba est inutile ici... à moins que ce ne soit pour apprendre.
remarque : les ":" après le else, je suppose que cette une erreur de frappe car sinon, c'est interprété comme une étiquette, me semble-t-il..
ensuite, utilise la methode Range("C23).Formula au lieu de text et value. (si mes souvenirs sont bons)
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 8 sept. 2008 à 13:06
bonjour
tu dis :" L'idée étant que la Cellule C23 affiche "Reponse" 1 si la F21 affiche "Texte 1" ou "Texte 2". Sinon, elle affichera "Reponse 2".
"
alors pourquoi ne l'écris tu pas dans ta macro ?If Range("F21").Text "Texte 1" Or Range("F21").Text " Texte2" Then
Range("C23").Value = "Reponse1"
Else
Range("C23").Value = "Reponse2"
End If
correspondrait mieux à ce que tu veux faire
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 8 sept. 2008 à 13:38
en fait ton probleme de lag vient à mon avis de l'évenement dans lequel tu as mis ton code
car quand il s'éxécute et qu'il change la valeur de la cellule C23 il se relance puisque c'est un changement dans la worksheet et de ce fait il s'éxécute un grand nombre de fois
un autre détail dans ton code il faudrait choisir si c'est " .text " ou ".value" mais éviter de mélanger ces deux propriétés non que ça change grand chose dans le cas présent mais c'est plus propre
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
GregMIA
Messages postés7Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention11 septembre 2008 8 sept. 2008 à 13:45
Oui, en effet, j'ai pensé à ça. Actuellement, mon événement c'est Worksheet_Change. Tu me conseilles quoi ? J'ai pas encore bien saisi tous les événements.
Sinon, merci pour le tuyau. C'est quoi la différence entre .texte et .value ? Tant qu'on reste dans les textes uniquement, on peut utiliser .texte, sinon faut utiliser .value ? C'est bien ça ?
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 8 sept. 2008 à 14:00
dans quel évenement le mettre ... cela dépend du reste de ton code et de ce que tu veux obtenir
quand à value plutot que text le différence et que value renvoit une donnée de type variant
alors que text renvoit une donnée de type string
donc un texte en .value se code avec 22 octets de plus qu'en .text
pour de petites applis ce n'est pas tres grave mais pour des trucs bien trapus ça peut ralentir l'éxécution de façon sensible
String
(longueur fixe), Longueur de la chaîne, 1 à environ 65 400, ----
Variant
(nombres), 16 octets, Toute valeur numérique, avec la même plage de valeurs
qu'une donnée de type Double, ----
Variant
(caractères), 22 octets + longueur de la chaîne, Même plage de valeurs qu'une donnée de type
String de longueur variable
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
GregMIA
Messages postés7Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention11 septembre 2008 8 sept. 2008 à 14:19
D'acc, merci pour les précisions quant à text/value.
Quant à ce que je veux obtenir, c'est pour l'instant rien de plus que ça : changer le texte d'une cellule en fonction de celui d'une autre.
Est-ce possible de créer une fonction dont l'événement est le changement d'une cellule (et non pas d'une worksheet, comme c'est le cas actuellement) ? Si oui, comment (syntaxe) ?
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201314 8 sept. 2008 à 15:44
Salut,
Pour completer la reponse de pile_poil :
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address (RowAbsolute:=False, ColumnAbsolute:=False) = "F21" then If .Text "Texte 1" Or .Text " Texte 2" Then
Range("C23").Value = "Reponse1"
Else
Range("C23").Value = "Reponse2"
End If
End if
End with
End Sub