Aide VBA

Bonjour à tous,

Je cherche à programmer sous VBA, une plage de cellules où je peux mettre des codes à 4 caractères (que des valeurs numériques compris entre 0 et 9999 et aucun caractère de texte). Les codes n’ayant pas le bon format devront apparaitre sur fond jaune lorsque la feuille est activée.

Merci d’avance.

Bonjour,

Une MFC ne peut pas suffire ?

Cordialement,

VBABEGINNER

Bonjour,

Je ne sais pas ce que veut dire une MFC, mais je dois faire ça sou VBA.

merci.

Bonjour,

MFC = mise en forme conditionnelle. Dommage ça je savais faire

Cordialement,


Bonjour,

J'ai enregistrer une MFC avec l'enregistreur de macro et ça à l'air de faire l'affaire ...

A tester pour la plage L4:L20 :

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("L4:L20").FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=OR($L4<0;$L4>9999)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

Cordialement,

Bonjour,

pour l'ensemble de la feuille !! mais ça limite bcp les entrées !!!

clic droit sur l'onglet de la feuille / visualiser le code et coller ceci:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not IsNumeric(Target) Then

MsgBox ("Chiffres seulement !")

End If

End Sub

Merci bcp pour ta réponse.

Peux-tu m'envoyer le fichier stp?

Merci encore.

Re,

Patrick je crois que c'est pour toi le message

Cordialement,

Bonjour,

merci pour ta réponse, je cherche à limiter une plage et non l'ensemble de la feuille, avec un fond jaune.

Bonjour,

pour l'ensemble de la feuille !! mais ça limite bcp les entrées !!!

clic droit sur l'onglet de la feuille / visualiser le code et coller ceci:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not IsNumeric(Target) Then

MsgBox ("Chiffres seulement !")

End If

End Sub[/quote]


Nonn c'était pour toi car j'arrive pas à faire fonctionner ton code.

VBABEGINNER a écrit :

Re,

Patrick je crois que c'est pour toi le message

Cordialement,

ohhh ...

Voici un exemple alors ...

Cordialement,

14mfcemma.xlsm (13.27 Ko)

Marche pas sur mon fichier.. ci-joint.

VBABEGINNER a écrit :

ohhh ...

Voici un exemple alors ...

Cordialement,

18classeur1.xlsm (12.85 Ko)

Bonjour,

Une autre approche à tester.

Cdlt.

Public Sub DEMO()
Dim ws As Worksheet
Dim rngData As Range, Cell As Range

    Application.ScreenUpdating = False

    Set ws = ActiveSheet
    Set rngData = ws.UsedRange

    rngData.Interior.Color = xlNone

    For Each Cell In rngData
        If Not IsNumeric(Cell.Value) Or Cell.Value > 9999 Then Cell.Interior.Color = vbYellow
    Next Cell

    Set rngData = Nothing: Set ws = Nothing

End Sub

Re,

En effet,

C'est la MFC qui faisait le changement et pas la macro ... Je me suis fait avoir

Entre temps je vois que Jean-Eric t' apporte ses lumières. Il t'éclairera bien mieux que moi.

Cordialement,

Merci Jean-Eric, ça marche très bien sauf que la saisie en dehors de 0 à 9999 est toujours possible! aussi je souhaite l’exécuter sur une plage (A3àA15 par exemple) et non toute la page.

Merci encore..

Jean-Eric a écrit :

Bonjour,

Une autre approche à tester.

Cdlt.

Public Sub DEMO()
Dim ws As Worksheet
Dim rngData As Range, Cell As Range

    Application.ScreenUpdating = False

    Set ws = ActiveSheet
    Set rngData = ws.UsedRange

    rngData.Interior.Color = xlNone

    For Each Cell In rngData
        If Not IsNumeric(Cell.Value) Or Cell.Value > 9999 Then Cell.Interior.Color = vbYellow
    Next Cell

    Set rngData = Nothing: Set ws = Nothing

End Sub

Re,

A tester...

Cdlt.

12emma-38.xlsm (16.89 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim newValue

    If Not Intersect(Target, Range("A3:A15")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Application .EnableEvents = False
        newValue = Target.Value
        If Not IsNumeric(newValue) Or newValue > 9999 Then
            Application.Undo
        End If
        Application.EnableEvents = True
    End If

End Sub

Re,

Merci encore.

Il fonctionne bien mais ce n’est pas tout à fait ce que je cherche… je vais essayer d’expliquer autrement mon problème…

Je souhaite avoir un programme qui permet dans un premier temps de tester la plage A3 à A20, et donc mettre les codes n’ayant pas le bon format (0à 9999) sur fond jaune.

Ensuite bloquer la saisie hors la règle (0à9999) et afficher un message d’erreur.

Jean-Eric a écrit :

Re,

A tester...

Cdlt.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim newValue

    If Not Intersect(Target, Range("A3:A15")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Application .EnableEvents = False
        newValue = Target.Value
        If Not IsNumeric(newValue) Or newValue > 9999 Then
            Application.Undo
        End If
        Application.EnableEvents = True
    End If

End Sub

Re,

Un nouvel essai.

Et il n"est pas utile de rappeler les codes VBA à chacun de tes messages...

Cdlt.

14emma-38.xlsm (26.65 Ko)
Private Sub cmdDEMO_Click()
Dim ws As Worksheet
Dim rngData As Range, Cell As Range

    Application.ScreenUpdating = False

    Set ws = ActiveSheet
    Set rngData = ws.Range("A3:A15")

    With rngData
        .Validation.Delete
        .Interior.Color = xlNone
    End With

    For Each Cell In rngData
        If Not IsNumeric(Cell.Value) Or Cell.Value > 9999 Then Cell.Interior.Color = vbYellow
    Next Cell

    With rngData.Validation
        .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:="0", Formula2:="9999"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

    Set rngData = Nothing: Set ws = Nothing

End Sub

Merci infiniment Jean-Eric!!

une dernière chose stp, ton code s'applique sur la feuille ouverte, or je souhaite l'appliquer sur une feuille, feuil4 par exemple!

Est-ce possible de supprimer le bouton et exécuter la macro à l'ouverture du fichier?

emma_38 a écrit :

Merci infiniment Jean-Eric!!

une dernière chose stp, ton code s'applique sur la feuille active, or je souhaite l'appliquer sur une feuille, feuil4 par exemple!

Est-ce possible de supprimer le bouton et exécuter la macro à l'ouverture du fichier?

Bonjour,

Essaie cette nouvelle proposition.

Cdlt.

15emma-38.xlsm (28.66 Ko)
Rechercher des sujets similaires à "aide vba"