problème de conditions en vba

blackjack

XLDnaute Occasionnel
Bonjour les amis,
J'ai un petit souci avec un code en vba
Voici mon code
Private Sub Worksheet_Change(ByVal Target As Range)
If Int(Range("A1")) <> 15 Then
Shapes("test").Visible = msoTrue
Else
Shapes("test").Visible = msoFalse
End If
End Sub
il fonctionne très bien, sauf que je voudrais augmenter les conditions (<> 50, <> 60 etc) étendre les cellules à vérifier sur la colonne A jusqu’à la ligne 122

La je ne sais pas comment faire ...
Avez vous une piste ?
Merci d'avance

BJ
 

youky(BJ)

XLDnaute Barbatruc
Bonjour BJ,
A essayer, j'ai pas testé car pas de fichier
Bruno
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
dim vu as boolean
dim lig as long
for lig=1 to 122' boucle
if int(cells(lig,1))=15 or int(cells(lig,1))=50 or int(cells(lig,1))=60 then vu =true:exit for
next
if vu=true then
Shapes("test").Visible = msoFalse
Else
Shapes("test").Visible = msoTrue
End If
End Sub
 

youky(BJ)

XLDnaute Barbatruc
j'avais pas vu que c'était en worksheet_change
donc j'ai mis 2 lignes en plus pour gérer et sans voir qlq données
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vu As Boolean
Dim lig As Long
If Target.Column > 1 Then Exit Sub
On Error Resume Next
For lig = 1 To 122 ' boucle
If Int(Cells(lig, 1)) = 15 Or Int(Cells(lig, 1)) = 50 Or Int(Cells(lig, 1)) = 60 Then vu = True: Exit For
Next
If vu = True Then
Shapes("test").Visible = msoFalse
Else
Shapes("test").Visible = msoTrue
End If
End Sub
Bruno
 

blackjack

XLDnaute Occasionnel
Bonjour Bruno
On y est presque!!
ça ne boucle pas, en fait cela fonctionne à la 1ère saisie(quelque soit la cellule) mais cela ne fonctionne plus après
tu as raison je joins un fichier pour plus de clarté
amicalement
BJ
 

Pièces jointes

  • test image sous condition.xlsm
    38.4 KB · Affichages: 28

youky(BJ)

XLDnaute Barbatruc
Ben........ avec un fichier ça va tout seul.
Attention tu as ce code en workbook il faut l'annuler et laisser que celui en worksheet
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vu As Boolean
Dim lig As Long
'target est la cellule modifiée
If Target.Column > 1 Then Exit Sub
On Error Resume Next
If Target = "" Or Int(Target.Value) = 15 Or Int(Target.Value) = 50 Or Int(Target.Value) = 60 Then
Shapes("test").Visible = msoFalse
Else
'Shapes("test").Top = Target.Top
Shapes("test").Visible = msoTrue
Target.Select
End If
End Sub
Bruno
 

blackjack

XLDnaute Occasionnel
Bonjour,
Après plusieurs essais, cela ne fonctionne que sur une cellule à la fois, je m'explique:
en A2 je saisie un code erroné ex "16" , le message apparait. Je saisie "15", il disparait là tout va bien ...
Maintenant en A2 je saisie "16 "et A3 "26".
Si je corrige en A2, le message disparait alors qu'en A3 il y a toujours un code erroné alors que le message devrait resté affiché.

Et pour ma culture: ce sont les cellules de la colonne A qui sont concernées. Comment désigner la colonne b ?
Merci du coup de main.
BJ
 

youky(BJ)

XLDnaute Barbatruc
Salut bien,
Pour la colonne A voici
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'target est la cellule modifiée
If Target.Column > 1 Then Exit Sub
On Error Resume Next
If Target = "" Or Int(Target.Value) = 15 Or Int(Target.Value) = 50 Or Int(Target.Value) = 60 Then
Shapes("test").Visible = msoFalse
Else
Shapes("test").Visible = msoTrue
Target.Select
MsgBox "Code Erronné: " & Target, vbExclamation, "ANNULATION"
Target = ""
End If
End Sub

code pour colonne B
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'target est la cellule modifiée
If Target.Column = 2 Then
On Error Resume Next
If Target = "" Or Int(Target.Value) = 15 Or Int(Target.Value) = 50 Or Int(Target.Value) = 60 Then
Shapes("test").Visible = msoFalse
Else
Shapes("test").Visible = msoTrue
Target.Select
MsgBox "Code Erronné: " & Target, vbExclamation, "ANNULATION"
Target = ""
End If
End If
End Sub
A la limite on peut utiliser que la MsgBox(boite message)
Bruno
 

Discussions similaires