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

Bonsoir

A tester

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

Rechercher des sujets similaires à "verifier vide range"