Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
For i = 2 To Range("G" & Rows.Count).End(xlUp).Row
If Range("G" & i).Text = "Besoin 2009" And Target.Row <> i Then
If Range("D" & i).Text = vbNullString Then MsgBox ("complétez la colonne D de la ligne " & i): Exit Sub
If Range("E" & i).Text = vbNullString Then MsgBox ("complétez la colonne E de la ligne " & i): Exit Sub
If Range("F" & i).Text = vbNullString Then MsgBox ("complétez la colonne F de la ligne " & i): Exit Sub
End If
Next i
End Sub
bonjour mattwarend,
je te propose ce code à mettre sur la feuille (clic droit sur l'onglet --> Visualiser le code) :
Code:Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Integer For i = 2 To Range("G" & Rows.Count).End(xlUp).Row If Range("G" & i).Text = "Besoin 2009" And Target.Row <> i Then If Range("D" & i).Text = vbNullString Then MsgBox ("complétez la colonne D de la ligne " & i): Exit Sub If Range("E" & i).Text = vbNullString Then MsgBox ("complétez la colonne E de la ligne " & i): Exit Sub If Range("F" & i).Text = vbNullString Then MsgBox ("complétez la colonne F de la ligne " & i): Exit Sub End If Next i End Sub
si tu as saisi "Besoin 2009" dans la colonne G et que tu sélectionne une autre ligne sans avoir complété les colonnes D, E, et F, une MsgBox apparait.
a+
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
For i = 2 To Range("[B][COLOR=Red]H[/COLOR][/B]" & Rows.Count).End(xlUp).Row
If Range("[COLOR=Red][B]H[/B][/COLOR]" & i).Text = "[B][COLOR=Red]A conserver[/COLOR][/B]" And Target.Row <> i Then
If Range("D" & i).Text = vbNullString Then MsgBox ("complétez la colonne D de la ligne " & i): Exit Sub
If Range("E" & i).Text = vbNullString Then MsgBox ("complétez la colonne E de la ligne " & i): Exit Sub
If Range("F" & i).Text = vbNullString Then MsgBox ("complétez la colonne F de la ligne " & i): Exit Sub
End If
Next i
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
For i = 2 To Range("H" & Rows.Count).End(xlUp).Row
If Range("H" & i).Text = "A conserver" And Target.Row <> i Then
If Range("D" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne D"): Exit Sub
If Range("E" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne E"): Exit Sub
If Range("F" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne F"): Exit Sub
End If
Next i
End Sub
Super, merci pour ta réponse. Ca répond parfaitement à mon besoin.
Y'a cependant un truc que je ne parviens pas à faire, je préfèrerais en message, "compléter la ligne X de la colonne E" mais je ne parviens pas à modifier le code...
J'ai écrit ça mais ça ne fonctionne pas :
Code:Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Integer For i = 2 To Range("H" & Rows.Count).End(xlUp).Row If Range("H" & i).Text = "A conserver" And Target.Row <> i Then If Range("D" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne D"): Exit Sub If Range("E" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne E"): Exit Sub If Range("F" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne F"): Exit Sub End If Next i End Sub
re,
je t'ai fait un exemple plus précis.
il y a du code à trois endroit différents :
- au niveau de la feuille (comme avant)
- au niveau du classeur (pour empêcher l'enregistrement)
- et dans le module "Module1"
a+
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
For i = 2 To Range("[COLOR=Red][B]H[/B][/COLOR]" & Rows.Count).End(xlUp).Row
If Range("[B][COLOR=Red]H[/COLOR][/B]" & i).Text = "A conserver" And Target.Row <> i Then
If Range("D" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne D"): Exit Sub
If Range("E" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne E"): Exit Sub
If Range("F" & i).Text = vbNullString Then MsgBox (" complétez la ligne (& i) de la colonne F"): Exit Sub
End If
Next i
End Sub
bonjour mattwarend,J'ai pu légèrement modifier le fichier avec les informations que tu m'as communiqué.
Je te le met en PJ comme demandé.
On peut faire en sorte que lorsque une information est changée dans la colonne I et que la ligne correspondante est rouge dans la colonne A, on oblige à saisir un nouveau nom sur la ligne correspondante dans la colonne B, avec comme maximum 15 caractères... ?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nouveauNomRepertoire As String
'si ce n'est pas la colonne I qui a été modifiée, quitter la macro
If Target.Column <> 9 Then Exit Sub
'si la cellule de la même ligne, colonne A à le texte rouge, alors
If Range("A" & Target.Row).Font.ColorIndex = 3 Then
'demander la saisie du nouveau "Nom Répertoires" (tant que > à 15 caractères)
Do
nouveauNomRepertoire = Application.InputBox("Saisir un nouveau ""Nom Répertoires"" (15 caractères max.) :", "Saisie", , , , , , 2)
Loop Until Len(nouveauNomRepertoire) <= 15
'saisir la nouvelle valeur en colonne B
Range("B" & Target.Row).Value = nouveauNomRepertoire
End If
End Sub