XL 2019 message d'alerte si une cellule est vide

CYNO68

XLDnaute Junior
Bonjour a tous

je suis en train de réaliser un bon de commande sur EXCEL et je sèche sur un code ...
ce document comporte 64 lignes
pour chaque ligne on va renseigner la référence, la quantité puis le prix va s'afficher automatiquement
SI on souhaite faire une promotion au client et que l'on force le prix on doit indiquer le "type de promotion" sur la même ligne
j'aimerai qu'un message d'alerte apparaisse si l'opérateur force le prix et oublie d'indiquer la raison
En bref, l'idée est
Si la cellule X est pleine et que la cellule Y est vide alors il faut un message d'erreur indiquant ce qu'il faut renseigner la cellule Y
cela doit se répéter pour les 64 lignes du bon de commande
j espère avoir été suffisamment clair
merci d’avance !
 

job75

XLDnaute Barbatruc
Bonjour CYNO68, shinozak,

Si comme c'est probable on renseigne la cellule X avant Y il y aura systématiquement une alerte.

Ce sera extrêmement lassant pour l'utilisateur !

Il vaut beaucoup mieux prévoir un code VBA qui sélectionne la cellule Y et empêche qu'on la quitte tant qu'elle n'est pas renseignée.

A+
 

jmfmarques

XLDnaute Accro
Bonjour
nul besoin d'un fichier (les choses étant en l'occurrence suffisamment bien exposées).
Je te suggère d'analyser, de comprendre et d'adapter cela à ton classeur :
VB:
Private force As Range

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 2 And Target.Value <> "" Then
    If Range("F" & Target.Row).Value = "" Then Set force = Range("F" & Target.Row)
  End If
  If Not force Is Nothing Then
     If force.Value <> "" Then Set force = Nothing
  End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not force Is Nothing Then force.Select
End Sub




saisis à ton gré en colonne B et tu te trouveras forcé de saisir également en colonne F
 

job75

XLDnaute Barbatruc
Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
With ListObjects(1).Range 'tableau structuré
    For Each c In .Columns(6).Cells
        If Not IsEmpty(c(1, 0)) And IsEmpty(c) Then ScrollArea = c.Address: Exit Sub 'bloque la sélection
    Next
    ScrollArea = "" 'libère la sélection
End With
End Sub
Le tableau est un tableau structuré, il s'agrandit automatiquement.

Salut jmfmarques.
 

Pièces jointes

  • Promotions(1).xlsm
    19.5 KB · Affichages: 26

jmfmarques

XLDnaute Accro
Bonjour job75
Sauf si l'on ferme et rouvre le fichier...
Le principe reste le même.
Les parades sont nombreuses :
Celle qui vient en premier à l'esprit est l'utilisation de l'évènement BeforeClose, mais en cette période de pandémie, montrons-nous encore plus prudents que les Chinois et faisons face à tout, y compris à une interruption brutale de l'alimentation électrique.
Comment ? --->> ainsi (en dédiant une cellule à la conservation en mémoire, en lieu et place de la variable force. Ici, je dédie A1 de la même feuille, à seul titre d'exemple) --->>
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 2 And Target.Value <> "" Then
    If Range("F" & Target.Row).Value = "" Then Range("A1").Value = Range("F" & Target.Row).Address
  End If
  If Range("A1").Value <> "" Then
     If Range(Range("A1").Value) <> "" Then Range("A1").Value = ""
  End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Range("A1").Value <> "" Then Range(Range("A1").Value).Select
End Sub
 

job75

XLDnaute Barbatruc
Compléments dans ce fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
With ListObjects(1).Range 'tableau structuré
    For Each c In .Columns(6).Cells
        If Not IsEmpty(c(1, 0)) And IsEmpty(c) Then c.Select: ScrollArea = c.Address: Exit Sub 'bloque la sélection
    Next
    ScrollArea = "" 'libère la sélection
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Worksheet_Change ActiveCell 'lance la macro
End Sub
Testez avec des entrées multiples en colonne E
 

Pièces jointes

  • Promotions(2).xlsm
    20.1 KB · Affichages: 11

CYNO68

XLDnaute Junior
Bonjour a tous les 2 et merci de me prêter main forte !
je vous sens très calés sur le sujet et j'ai une difficulté supplémentaire :
1585123591764.png

il faut que quand je force le prix dans la colonne L (action co) ou je selectionne "REPRISE RMA TEK1.0", on me force a sélectionner le type de promo en colonne G
cette regle ne dois pas marcher si je sélectionne:
-gratuit geste co
-gratuit RMA
-Gratuit accord RR
-Gratuit SAV CANO

le fichier étant trop volumineux je ne peux pas le mettre en PJ ...
merci
 

job75

XLDnaute Barbatruc
le fichier étant trop volumineux je ne peux pas le mettre en PJ ...
Bah il suffit d'une feuille avec quelques lignes représentatives du problème.

Mais a priori avec vos explications ceci devrait convenir :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
With Range("A1", UsedRange)
    For Each c In .Columns(7).Cells 'colonne G
        If IsEmpty(c) And c(1, 6) = "REPRISE RMA TEK1.0" Then c.Select: ScrollArea = c.Address: Exit Sub 'bloque la sélection
    Next
    ScrollArea = "" 'libère la sélection
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Worksheet_Change ActiveCell 'lance la macro
End Sub
 

job75

XLDnaute Barbatruc
Il n'y a pas de liste de validation en colonne L mais bon j'avais zappé le cas où cette colonne contient des valeurs numériques donc utilisez :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
For Each c In [G18:G81] 'plage adaptable au besoin
    If IsEmpty(c) And (IsNumeric(CStr(c(1, 6))) Or c(1, 6) = "REPRISE RMA TEK1.0") _
        Then c.Select: ScrollArea = c.Address: Exit Sub 'bloque la sélection
Next
ScrollArea = "" 'libère la sélection
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Worksheet_Change ActiveCell 'lance la macro
End Sub
 

CYNO68

XLDnaute Junior
Trop fort JOB75 !!!
franchement merci vous êtes au top ça marche !:D
du coup j'ai une autre question ;)
mes commerciaux doivent générer un fichier EXCEL et PDF une fois la commande saisie et le déposer dans un dossier spécifique
j'aimerai créer une macro qui génère ces fichiers, les nomme comme je le souhaites et les enregistre au bon emplacement
je pense pouvoir le faire sur mon poste mais vu que l’emplacement (donc le chemin) diffère en fonction de chacun des postes cela se complique
comment puis je faire pour que le chemin pour trouver l'emplacement du dossier s'adapte en fonction du poste ?
merci
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400