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 ?
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
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)
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
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
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 ?
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
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) ?
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