Pb sur code VBA

Bonjour à tous,

je dois mettre en place un code qui permet , à l'activation d'un classeur, de mettre en fond jaune les cellules qui contiennent un code fournisseurs qui n'est pas compris entre 1 et 999. Si une telle valeur est sélectionner un message d'erreur doit apparaitre.

Voila ce que j'ai fais mais quand j’exécute en pas à pas les lignes d’instruction sont sauter et rien ne marche ...

Sub CodeFournisseur()

Range("A2:A100").Select ' selection cellules

For Each Cell In Selection 'Pour chaque cellule selectionnée

If Cell.Value < 1 Then

Cell.Interior.ColorIndex = 6 'couleur de la cellule = jaunne

End If

If Cell.Value > 999 Then 'Si la valeur > 999 alors

Cell.Interior.ColorIndex = 6 'couleur de la cellule = jaunne

End If

If 1 < Cell.Value < 999 Then

Cell.Interior.ColorIndex = xlColorIndexNone

End If

Next

End Sub

Sub ContrainteCodeFournisseur()

If 1 > ActiveCell.Value Then

TextBox = "Le code founisseur doit être compris entre 1 et 999"

End If

If ActiveCell.Value > 999 Then

TextBox = "Le code founisseur doit être compris entre 1 et 999"

End If

End Sub

MERCI

Bonjour

Tu remplaces tes 2 macros par celle ci mais sans support (fichier) pas facile à tester

Sub CodeFournisseur()

  For Each cell In Range("A2:A100")  'Pour chaque cellule selectionnée
    If cell.Value < 1 Or cell.Value > 999 Then
      TextBox = "Le code founisseur doit être compris entre 1 et 999"
    Else
      cell.Interior.ColorIndex = xlColorIndexNone
    End If
  Next
End Sub

Si ce n'est pas le résultat escompté

Bonjour Banzai64, conibrx,

à tester (surement à alléger)

Sub CodeFournisseur()
Application.ScreenUpdating = False
c = 0
Range("A2:A100").Select ' selection cellules

For Each Cell In Selection 'Pour chaque cellule selectionnée
If Cell.Value <> "" Then
If Cell.Value < 1 Or Cell.Value > 999 Then
Cell.Interior.ColorIndex = 6 'couleur de la cellule = jaunne
c = 1
ElseIf 1 < Cell.Value < 999 Then
Cell.Interior.ColorIndex = xlColorIndexNone
End If

Premier test pour ne pas colorer les cellules vides (Excel considère = à 0)
Else
Cell.Interior.ColorIndex = xlColorIndexNone
End If
Next
If c = 1 Then
MsgBox "Le code founisseur doit être compris entre 1 et 999"
End If
Application.ScreenUpdating = True
End Sub

En fait il faut que lorsque l'opérateur entre sur la feuille , les cellule ne comprenant pas de valeur entre 1 et 9999 soit jaune et lorsqu'il veut rentrer une valeur différent de 1 to 999 une msgbox apparaisse.

merci


ok, je comprend pas à quoi correspond le c= 0 et c=1

et j'ai un message d'erreur d’exécution 1004

merci pour votre aide

7dm-forum.xlsm (17.26 Ko)

Bonjour

Avec une macro événementielle

A tester

Le c était uniquement pour indiquer si il y avait ou non un Code Fournisseur hors limite, auxquel cas on affichait un message de rappel une fois les cellules "fausses" colorées en jaune.

Si votre fichier n'est pas trop gros et que vous n'etes pas trop à l'aise avec les macros, vous pouvez aussi utiliser une Mise en Forme Conditionnelle .

=SI(ET(($A2<>"");OU(($A2<1);($A2>999)));1;0)

Format : Remplissage "Jaune" et Appliqué à $A$2:$A$200 (Si on veut toute la ligne en Jaune, agrandir de $A2:$J$200 d'après votre exemple)

On peut aussi mettre une validation de données sur l'intervalle A2 à A200 en nombre entier (si on ne veut pas de code avec des chiffres à virgules) et mettre un message d'information indiquant à l'utilisateur que sa saisie n'est pas correcte.

Le code de Banzai64 fonctionne quelque soit la taille de votre fichier (c'est une des limites des Mises en Forme Conditionnelles).

j'ai réussi:

'Contrainte d'écriture sur Code fournisseurs'

Sub CodeFournisseur()

Range("A2: A50").Select

For Each plage In Selection

Select Case plage.Value

Case Is = ""

plage.Interior.ColorIndex = xlColorIndexNone

Case Is < 1

plage.Interior.ColorIndex = 6

MsgBox ("fuck")

Case Is > 999

plage.Interior.ColorIndex = 6

MsgBox ("fuck")

End Select

Next

End Sub

Maintenant le problème c'est que je voudrais que cette macro s'effectue à chaque fois que l'opérateur entre une valuer ou ouvre le classeur...

Le code de Banzai64 le faisait.

Voir Screenshot

Note pour plus tard : Toujours se relire avant de poster, ça évitera de marquer de grosses conneries ( "Regarde le code que de Banzai64"), ("différentes option"), ("à chaque changment de feuille").

evennement
Rechercher des sujets similaires à "code vba"