Vérifier si des cellules sont vide dans une range
Bonjour,
Je ne sais pas si le titre dit bien quel est mon problème. En fait j'ai dans mon classeur, quelques feuilles identiques et je voudrait quand un utilisateur clique sur une certains zones que le code VBA vérifie que la cellule dans la colonne n'est pas vide si elle est alors message.
Ex. Si on clique sur E7 ou F7 et que B7 vide alors message, ensuite si on clique sur E8 ou F8 et si B8 vide alors message, ensuite etc...
Voici le code que j'essaie de mettre en place mais il ne marche pas comme je voudrait. Dans mes colonnes E et F j'ai déjà mis la validation comme quoi elle devront êtres des heures donc je doit passer par VBA. Merci pour votre aide, j'ai essaye déjà 5 jours de trouver la solutions mais je n'arrive pas.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim myRange As Range
Dim cell As Range
Set myRange = Range("b7:b40") 'this is a plage where can be cell with date
For Each cell In myRange
If Not Application.Intersect(Target, Range("E7:F40")) Is Nothing Then
If cell.Value = "" Then ' when i do this ih B7 is empty all cell from E7 to E13 can not be fil it. is B7 is not empty all cells can be fil it. Or it should be B7 empty E 7 NO, B8 no empty E7 Yes
Selection.Offset(0, -1).Select
MsgBox "test", vbOKOnly + vbCritical, "titre"
End If
End If
Exit For
Next cell
End Sub
Je joints un fichier exemple ce que je voudrais faire car mon fichiers est assez grands.
Merci encore une fois pour votre aide et j'ai essaye de recherche dans le forum la solution de mon problème mais je n'est pas trouve? J'ai juste trouve quand il faut vérifier uniquement une cellule qui n'est pas vide et pas quand cette cellule change en fonction sur quel ligne on se trouve.
Bonjour
Bonnes fêtes
Je n'ai pas tout compris
Si on clique dans la zone E7:E40 le code vérifie si la cellule B.... n'est pas vide, et dans le cas contraire affiche un message
Remplaces ton code par celui-ci
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Range("E7:F40"), Target) Is Nothing Then
If Range("B" & Target.Row) = "" Then
MsgBox "Manque la date", vbCritical + vbOKOnly, "Alerte"
End If
End If
End Sub
Banzai64 a écrit :Je n'ai pas tout compris
Si on clique dans la zone E7:E40 le code vérifie si la cellule B.... n'est pas vide, et dans le cas contraire affiche un message
Bonne fêtes à toi aussi et merci d'avoir répandu, je n'est pas encore eu de temps de vérifier ton fichier mais ce que je voudrais faire c'est si on clique dans la zone E7:E40 par exemple et que c'est la cellule E9 qui est sélectionner que le code vérifie que la cellule B9 est vide ou non si elle est vide alors message sinon on peut modifier la cellule E9.
Puis si on clique sur E15 le code vérifie B 15, puis F16 code vérifie B16
Merci pour ton aide et dès que je regarde ton fichier je revient avec des nouvelles, merci encore une fois
Merci Banzai64,
C'est exactement ce que je cherche par contre j'ai encore une question comme est ce que je peut faire que quand le message est affiche une fois quand on le valide la cellule qui est dans la colonne E ou F (où se situe target) soit sélectionner par rapport à la première ligne non vide de la colonne B.
Exemple :
A B C D E F
L7 vide
L8 vide
L9 non vide
L10 non vide
L11 non vide
L12 vide
L13 vide
Si on clique sur E7 le message est affiche et la cellule qui doit être ensuite sélectionner sera E9
Si on clique sur E 13 le message est affiche et la cellule qui doit être ensuite sélectionner sera E11
Merci encore une fois pour ton aide et je ne connaissais pas ceci :
If Range("B" & Target.Row)
Que B est pour la colonne B et target.row pour la ligne où on clique sur la feuille
et si on a deux colonne on l'écrit comme ceci : range ("B:C" & target.row si on veut vérifie deux conditions Sur A et B par contre si on veut vérifier A ou B ???
Merci encore une fois et bonne fêtes
Bonjour
Tu prépares un fichier afin d'expliquer tes questions, je ne comprend pas ce que tu veux faire
Ce que je comprend
Si la cellule B est vide il faut se placer sur la cellule E d'une ligne dont la cellule E est pleine, mais le plus près de la cellule E cliquée
Trop compliqué, donnes des exemples dans ton fichier
nunizgb a écrit :et si on a deux colonne on l'écrit comme ceci : range ("B:C" & target.row si on veut vérifie deux conditions
Il faut tester chaque cellule et à toi de déterminer si c'est une des deux conditions ou les deux remplies (avec Or ) ou les deux conditions remplies (avec And)
Il faut au minimum une condition
If Range("B" & Target.Row) = "" Or Range("C" & Target.Row) = "" Then
Il faut les 2 conditions
If Range("B" & Target.Row) = "" And Range("C" & Target.Row) = "" Then
Merci pour l'aide et voici donc ce fichier ce que j'ai envie de faire, j'ai mis en dur dans le code :
Selection.Offset(2, 0).Select
Afin quand on clique sur E 9 la cellule E 11 est sélectionne mais comme faire pour que le code cherche dans la colonne B la première ligne qui n'est pas vide et ensuite sélectionne la cellule de la colonne E ou F par rapport où se situe target afin de dire où on doit mettre les donnes dans cette colonne.
En tous cas merci pour l'aide et la solution et bonne fêtes
Bonjour Banzai64,
Merci beaucoup cela marche nickel chrome
Afin de mieux comprendre ce que tu as mis :
If IsDate(Range("B" & Target.Row).Offset(Ligne, 0)) Then
Range("E" & Target.Row).Offset(Ligne, 0).Select
Est- ce que peut m'expliquer, si tu as le temps bien sûr , l'action de offset ? Si un jour je voudrais que ceci soit appliquer zone par zone
If Not Intersect(Range("zone1, zone2 car actuellement quand on clique sur zone 1 et que la première ligne non vide est loin cela vas sur zone 2 alors que je voudrait qu'il reste sur la zone 1
Puis comment puis-je ajouter une deuxième action pour d'autre cellules avec d'autres évènements en plus de celui là car on peut y avoir qu'une " _SelectionChange"
Est-ce que à la fin de mon IF et avant End Sub je met cette deuxième action ?
En tous cas BRAVO pour ta réactivité chapeau bas
Bonjour
Offset(Ligne,Colonne) indique un décalage depuis la position active soit vers le haut (ligne en négatif) soit vers le bas (ligne en positif) et même principe pour Colonne
Une astuce
Dans l'éditeur VB tu places ton curseur sur le mot Offset et tu appuies sur F1
nunizgb a écrit :cela vas sur zone 2 alors que je voudrait qu'il reste sur la zone 1
Pas impossible à faire mais très compliqué car il faudra connaitre exactement les limite de la zone et tester si le décalage (Offset) n'emmène pas hors de ces limites
Une seule zone serait simple à gérer, mais plusieurs dur dur
nunizgb a écrit :Puis comment puis-je ajouter une deuxième action pour d'autre cellules
If Not Intersect(Zone 1.........
' 1ère cation
'
ElseIf Not Intersect(Zone 2 ........
' 2ème action
'
End If
Merci pour l'information et encore une fois merci pour l'aide, bonne soirée