Microsoft 365 VBA Max

Keiko

XLDnaute Occasionnel
Bonjour à tous,

je fais des petites recherches sur internet et je vois qu'il est possible de bloquer une celulle à un maximum déterminé par une autre celulle.
Par exemple C2 ne peut pas écrire plus que C3.
Pour cela, il faut que je clique sur l'onglet et que je visualise le code et qu'ensuite j'incruste le code vba dedans.
Mais aucun code ne fonctionne ou peut etre que je le fais mal.

Pouvez vous m'aider?
 
Solution
Re,

Si j'ai bien compris la cellule où se fait la saisie (D76) doit être supérieure ou égale à la cellule C73 et inférieure ou égale à la cellule C79 ?

Dans ce cas, la liste de validation aura la formule: =ET(D76>=C73;D76<=C79)

Keiko

XLDnaute Occasionnel
Merci mais comment incorporer le code dans la cellule?

1581418158835.png
 

James007

XLDnaute Barbatruc
Dans le code le mot Target dans ce cas recouvre la cellule C2 ...

et toujours dans le code Target.Offset(1,0) signifie la cellule C3 ...

Si tu as besoin du même code ... sans que la valeur maximale ne soit visible dans la Feuille ...
tu peux ajouter 1000 directement dans le code

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then Target = Application.WorksheetFunction.Min(Target, 1000)
End Sub

En espèrant que tout cela soit un peu plus clair ...

P.S. Tu ne m'as toujours pas répondu au sujet du fonctionnement ...
Est-ce-que cela fonctionne ... ou pas ...???
 

James007

XLDnaute Barbatruc
Re,

Les macros standard ( avec boutons ) sont stockées dans des modules standards ...

Tandis que les macros qui sont évènementielles ... parce qu'elles sont déclenchées par un évènement ( et pas par un bouton ) doivent êtres stockées dans le module de la feuille concernée ...

Dans ton fichier test ... la macro évènementielle est stockée dans le module de la feuille ...
 

patricktoulon

XLDnaute Barbatruc
bonjour
si ca ne concerne que C2 et C3
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$2" And Target <> "" Then
        If Target.Value > Target.Offset(1) Then
            Application.EnableEvents = False
            Target = ""
            Application.EnableEvents = True
            MsgBox "plus grand que ""[C3]"""
            Target.Select
        End If
    End If
End Sub

si ça concerne toute les cellules de la colonne "C"
et que le principe est jamais plus grand que celle d'en dessous
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 And Target <> "" Then
        If Target.Offset(1) <> "" And Target.Value > Target.Offset(1) Then
            Application.EnableEvents = False
            Target = ""
            Application.EnableEvents = True
            MsgBox "plus grand que ""[""" & Target.Offset(1).Address(0, 0) & "]"""

            Target.Select
        End If
    End If
End Sub
on peut limiter le champs d'action a certaines lignes aussi
 

Discussions similaires

Réponses
12
Affichages
321

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet