MsgBox "vous n'avez pas renseigner tel champ"

D

David

Guest
Bonjour à tous,

Comment faire comprendre par une macro, que lorsque on est en train de saisir des données à l'intérieur de la plage A1:F10 et si on a ommis de saisir une donnée en B7 alors une msgBox s'ouvre "Vous n'avez pas renseigner tel champ" ?

merci çà tous,
David.
 
H

Hervé

Guest
Bonjour

Une proposition :

Public Sub vev()
Dim c As Range
Dim message As String
message = "Cellules non remplies :"
For Each c In Range("a1:f10")
If c = "" Then message = message & vbCrLf & c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
Next c
MsgBox message
End Sub

Salut
Hervé
 
@

@+Thierry

Guest
Bonjour David, Hervé, le Forum

Une autre approche de celle d'Hervé, qui propose de lancer un contrôle une fois la saisie finie, qui se base sur une Macro évènementielle sur chaque changement dans la plage...

A placer dans le Private Module de la Feuille en question (pas dans un module standard)

Const Msg As String = "Vous n'avez pas renseigné la cellule : "

Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("A1:F10")) Is Nothing Then Exit Sub

If Target.Value = "" Then Exit Sub

On Error Resume Next
   If Target.Offset(0, -1) = "" Then MsgBox Msg & Target.Offset(0, -1).Address: Exit Sub
   If Target.Offset(-1, 0) = "" Then MsgBox Msg & Target.Offset(-1, 0).Address

End Sub


Cette macro offre l'avantage de traîter l'oubli en temps réél, par contre c'est sûrement assez stressant pour l'utilisateur !

Bon Après Midi
@+Thierry
 
D

David

Guest
Bonjour Hervé et Thierry

Voici mon exemple Zipé

En fait mon classeur est constitué de plusieurs plage de cellule (comme celle a1/f10) à l'intérieur même de la feuille.

L'intêret serait que lorsque l'on quitte la plage a1/f10 pour une autre et si la cell b7 n'a pas était renseignée, alors la msgbox s'affiche..

Est-ce possible ?

Merci, david.
 

Pièces jointes

  • RenseignerTelChamp.zip
    5.3 KB · Affichages: 22
@

@+Thierry

Guest
re Bonjour David, Hervé, le Forum

En fait alors il faudrait faire une sorte de "Mix" entre la proposition d'Hervé et la mienne...

Par contre il faudrait que tu définisses clairement quelles cellules doivent être renseignées car manifestement selon ton exemple, ce ne sont pas toutes les cellules de A1 à F10 mais simplement "B7"...

Option Explicit


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Message As String
Dim Cell As Range
If Not Application.Intersect(Target, Range("A1:F10")) Is Nothing Then Exit Sub

&nbsp; &nbsp; For Each Cell In Range("A2,A4,C2,C4,B6:B7,E7") '<<<< a définir ici...
&nbsp; &nbsp; &nbsp; &nbsp; If Cell = "" Then Message = Message & vbCrLf & Cell.Address(0, 0)
&nbsp; &nbsp; Next Cell

&nbsp; &nbsp; If Message <> "" Then
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox "Cellules non remplies :" & vbCrLf & Message, vbCritical
End If
End Sub

Par ailleurs pour ta connaissance, j'ai remarqué que tu avais tenté de mettre en Private Module la Sub "vev()" d'Hervé en Private Module de la Feuille "Feuil1", mais dans ce genre de Module on ne met normalement que des Macros évènementielles...

A propos de Macros évènementielles, tu noteras que cette fois ci je me base sur l'évènement "Worksheet_SelectionChange" ...

Bonne Soirée
@+Thierry
 
H

Hervé

Guest
re David

Bonsoir thierry

En somme tu veux interdire le déplacement en dehors de la zone a1:f10 si la cellule b7 est vide.

Alors essaye ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.Intersect(Target, Range("a1:f10")) Is Nothing Then
If Range("b7") = "" Then
MsgBox "Merci de remplir la cellule B7"
Range("b7").Select
End If
End If
End Sub

A placer dans le module de la feuille et non dans un module standard.

Salut
Hervé
 

Discussions similaires

Statistiques des forums

Discussions
314 200
Messages
2 107 116
Membres
109 754
dernier inscrit
agaderm