![]() |
|
Forum
|
|
|
#1 (permalink) |
|
Guest
Messages: n/a
|
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. |
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
Guest
Messages: n/a
|
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é |
|
|
#3 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#4 (permalink) |
|
Guest
Messages: n/a
|
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. |
|
|
#5 (permalink) |
|
Guest
Messages: n/a
|
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 For Each Cell In Range("A2,A4,C2,C4,B6:B7,E7") '<<<< a définir ici... If Cell = "" Then Message = Message & vbCrLf & Cell.Address(0, 0) Next Cell If Message <> "" Then 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 |
|
|
#6 (permalink) |
|
Guest
Messages: n/a
|
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é |
| Liens sociaux |
| Outils de la discussion | |
|
|