Problème de changement de texte dans cellule

Résolu
GregMIA Messages postés 7 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 septembre 2008 - 8 sept. 2008 à 10:34
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 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 ?


Merci

10 réponses

pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
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
3
cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 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)

thierry la fronde
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
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
0
GregMIA Messages postés 7 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 septembre 2008
8 sept. 2008 à 13:26
En effet, c'est plus simple comme ça, mais le résultat est le même :

Ca fonctionne, mais une fois le texte changé dans C23, il y a un lag d'environ cinq secondes.

A quoi est-ce du ? Cette condition demande-t-elle autant de calcul que ça au CPU ?
0

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

Posez votre question
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
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
0
GregMIA Messages postés 7 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 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 ?

Un gros merci en tout cas !
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
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
0
GregMIA Messages postés 7 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 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) ?

En tout cas merci, très chouette ce forum !
0
GregMIA Messages postés 7 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 11 septembre 2008
8 sept. 2008 à 15:37
En effet, ça fonctionne nickel, merci pour le truc !
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 14
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

A+
0
Rejoignez-nous