Microsoft 365 VBA : Si une cellule contient alors

Chessnocoma

XLDnaute Junior
Bonjour,

Je bloque sur une macro assez simple elle est censé retourné une valeur dans la colonne J si une cellule est égal à S11.
Sachant que la colonne A résulte d'une formule, cela ne fonctionne pas.
Je ne peux pas utiliser de formule car du type Si(A1="S11"; S11;"") voila pourquoi j'essaie de le faire sous VBA.
Si j'écrit manuellement S11 dans la colonne cela fonctionne.

Mon code actuel est le suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Target.Column = 1 Then

Select Case Target.Value
Case "S11"
Cells(Target.Row, 11) = "S11"

Case Else
Cells(Target.Row, 11) = ""

End Select
End If
End Sub

Je vous joint un fichier, dans l'idéal, si la colonne B contient "S11" alors dans la colonne J je retrouve S11.

Merci de votre aide,

A bientôt,

Jessy
 

Pièces jointes

  • Test si cellule contient.xlsm
    14.1 KB · Affichages: 51
Solution
Bonsoir le fil

Il fait gris dehors, faut que je m'occupe
Alors voici comment ...je perds mon temps dans VBA
(alors qu'un tableau structuré et les formules idoines pourraient suffire)
• Mais je me demande bien pourquoi le demandeur veut du VBA

VB:
Private Sub Worksheet_Change(ByVal T As Range)
If T.Column <> 2 Then Exit Sub
T(1, 10) = IIf(T = "S11", "S11", Null)
T(1, 0) = IIf(T = "S11", "S11", Null)
End Sub

Staple1600

XLDnaute Barbatruc
Merci beaucoup soan et
2115.jpg

A bientôt,
Jessy
De rien, you're welcome ;)
 

soan

XLDnaute Barbatruc
Inactif
Bonjour @Chessnocoma, le fil,

tu avais écrit : « dans l'idéal, si la colonne B contient "S11" »

avec le fichier de mon post #11, résultat après modif des cellules :


Image.jpg


il y a bien le texte "S11" en colonnes A et K si le texte de la colonne B contient "S11" ;
on le voit pas sur l'image, mais le résultat sera identique si tu mets seulement "S11"
en B1 et B2 (c'est-à-dire le texte entier et pas seulement une partie du texte).




d'autre part, il y a une contradiction entre le texte de l'énoncé et le code VBA de cet énoncé :

1) « Je bloque sur une macro assez simple, elle est censée retourner une valeur dans la colonne J
si une cellule est égale à S11. »

2) « dans l'idéal, si la colonne B contient "S11" alors dans la colonne J je retrouve S11. »

3) code du Select Case :


Case "S11"
Cells(Target.Row, 11) = "S11"

Case Else
Cells(Target.Row, 11) = ""

* pour les points 1) et 2) : J est la colonne n° 10
* pour 3) : la colonne n° 11 est la colonne K




c'est pour ça que mon code VBA met les résultats en A et K et pas en A et J.
je m'étais dit : « ce sera au demandeur Jessy d'adapter si besoin ». 😜

dans mon code VBA, pour écrire en colonne J au lieu de K :
remplacer les deux .Offset(, 9) par .Offset(, 8)


soan
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Comme la météo s'y prête, je vais ajouter du commentaire pour le code du post#13.
VB:
Private Sub Worksheet_Change(ByVal T As Range)
'si nous ne sommes pas en colonne B, on sort
If T.Column <> 2 Then Exit Sub
'si la cellule active est égale à S11
'alors on inscrit S11 en colonne A et K, sinon rien
T(1, 10) = IIf(T = "S11", "S11", Null)
T(1, 0) = IIf(T = "S11", "S11", Null)
End Sub
Avec ces commentaires, Chessnocoma devrait déduire que pour titiller la colonne J, il fallait écrire
T(1, 9) = IIf(T = "S11", "S11", Null)
PS: Comme je l'avais précisé
Il fait gris dehors, faut que je m'occupe
Alors je m'occupe dans VBE en écrivant mes tites macros, et parfois y'a du décalage dans la colonne ;)
 

Discussions similaires