Verif des cellules vides

sadia

XLDnaute Occasionnel
Bonjour à tous,

je travaille sur un nouveau fichier et je voudrais faire une vérif automatique, sur 4 cellules.
sur la 1ere colonne on doit mettre une date ou pas (selon le mois de cloture) si oui, il faut absolument qu'il y ai un C ou D des l'une des 3 colonnes qui suivent.
si c'est pas le cas, je souhaite un message d'alerte.
J'ai 2000 lignes sur mon fichier.

merci à vous
 

Pièces jointes

  • sade.xls
    13.5 KB · Affichages: 34
  • sade.xls
    13.5 KB · Affichages: 32
  • sade.xls
    13.5 KB · Affichages: 39

CISCO

XLDnaute Barbatruc
Re : Verif des cellules vides

Bonsoir

Une possibilité en pièce jointe, avec une formule matricielle à valider avec Ctrl+majuscule temporaire + entrer.

Si tu as 2000 lignes, cela risque de poser problème, peut être. A tester donc...

@ plus
 

Pièces jointes

  • sade.xls
    17 KB · Affichages: 31
  • sade.xls
    17 KB · Affichages: 32
  • sade.xls
    17 KB · Affichages: 30

job75

XLDnaute Barbatruc
Re : Verif des cellules vides

Bonsoir sadia, CISCO,

Validation de données sur toute la colonne A du fichier joint :

Code:
=(LIGNE()=1)+ESTNUM(MOIS(A1))*(NB.SI(B1:D1;"C")+NB.SI(B1:D1;"D"))
A+
 

Pièces jointes

  • sade(1).xls
    13.5 KB · Affichages: 20

job75

XLDnaute Barbatruc
Re : Verif des cellules vides

Re,

Comme la validation de données ne fonctionne pas si l'on fait du copier-coller, voici une solution VBA :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, an%, mois As Byte, a%, m As Byte, flag As Boolean
Set r = Intersect(Target, [A2:A65536], Me.UsedRange)
If r Is Nothing Then Exit Sub
an = Year([G2]) 'cellule à adapter
mois = Month([G2])
For Each r In r 'si entrées multiples (copier-coller)
  If r <> "" Then
    a = 0: m = 0
    If IsDate(r) Then a = Year(r): m = Month(r)
    If a <> an Or m <> mois Or Application.CountIf(r(1, 2).Resize(, 3), "C") = 0 _
      And Application.CountIf(r(1, 2).Resize(, 3), "D") = 0 Then
      r = ""
      r.Select
      flag = True
    End If
  End If
Next
If flag Then MsgBox "Date du mois en colonne A et ""C"" ou ""D"" en colonnes B:D !"
End Sub
Fichier joint.

A+
 

Pièces jointes

  • sade VBA(1).xls
    42.5 KB · Affichages: 26
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Verif des cellules vides

Bonsoir Job75

Une variante donnant le n° des lignes ne convenant pas.

@ plus
 

Pièces jointes

  • sade.xls
    17.5 KB · Affichages: 25
  • sade.xls
    17.5 KB · Affichages: 26
  • sade.xls
    17.5 KB · Affichages: 30

job75

XLDnaute Barbatruc
Re : Verif des cellules vides

Re,

En fait ce que vous voulez c'est une vérification a posteriori.

Double-clic en colonne A, la macro recherche la 1ère erreur sous la cellule sélectionnée :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column > 1 Then Exit Sub
Dim an%, mois As Byte, i&, r As Range, a%, m As Byte
Cancel = True
an = Year([G2]) 'cellule à adapter
mois = Month([G2])
For i = Target.Row + 1 To [A65536].End(xlUp).Row
  Set r = Cells(i, 1)
  If r <> "" Then
    a = 0: m = 0
    If IsDate(r) Then a = Year(r): m = Month(r)
    If a <> an Or m <> mois Or Application.CountIf(r(1, 2).Resize(, 3), "C") = 0 _
      And Application.CountIf(r(1, 2).Resize(, 3), "D") = 0 Then
      r.Resize(, 4).Select
      MsgBox "Erreur en ligne " & i
      Exit For
    End If
  End If
Next
End Sub
Fichier (2).

A+
 

Pièces jointes

  • sade VBA(2).xls
    43 KB · Affichages: 28

sadia

XLDnaute Occasionnel
Re : Verif des cellules vides

Alors ma colonne de date se trouve en colonne I
mes 3 cellules a vérifier en j, k, l
et j'ai mis la date en AE2


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column > 1 Then Exit Sub
Dim an%, mois As Byte, i&, r As Range, a%, m As Byte
Cancel = True
an = Year([AE2]) 'cellule à adapter
mois = Month([AE2])
For i = Target.Row + 1 To [I65536].End(xlUp).Row
Set r = Cells(i, 1)
If r <> "" Then
a = 0: m = 0
If IsDate(r) Then a = Year(r): m = Month(r)
If a <> an Or m <> mois Or Application.CountIf(r(1, 2).Resize(, 3), "C") = 0 _
And Application.CountIf(r(1, 2).Resize(, 3), "D") = 0 Then
r.Resize(, 4).Select
MsgBox "Erreur en ligne " & i
Exit For
End If
End If
Next
End Sub


depuis mes modifs, il se passe plus rien... j'ai du oublier qlq chose...
 

sadia

XLDnaute Occasionnel
Re : Verif des cellules vides

j'avais pas vu !!!!! je crois que je suis pas bien reveillée !!!!!!!!

merci à vous 2 !!!!!!

je pense que finalement, je vais prendre une formule... ca sera plus simple en cas d'absence...

bonne jouurnée à vous et bon week end !
 

job75

XLDnaute Barbatruc
Re : Verif des cellules vides

Re sadia,

C'était donc moi :D j'en suis fort aise.

Il faut aussi adapter à la colonne de recherche I (colonne 9) :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 9 Then Exit Sub
Dim an%, mois As Byte, i&, r As Range, a%, m As Byte
Cancel = True
an = Year([AE2]) 'cellule à adapter
mois = Month([AE2])
For i = Target.Row + 1 To [I65536].End(xlUp).Row
  Set r = Cells(i, 9)
  If r <> "" Then
    a = 0: m = 0
    If IsDate(r) Then a = Year(r): m = Month(r)
    If a <> an Or m <> mois Or Application.CountIf(r(1, 2).Resize(, 3), "C") = 0 _
      And Application.CountIf(r(1, 2).Resize(, 3), "D") = 0 Then
      r.Resize(, 4).Select
      MsgBox "Erreur en ligne " & i
      Exit For
    End If
  End If
Next
End Sub
Fichier (3).

PS : bien sûr vous pouvez utiliser la formule de CISCO, elle est très bien, c'est une autre méthode.

A+
 

Pièces jointes

  • sade VBA(3).xls
    43.5 KB · Affichages: 26
Dernière édition:

job75

XLDnaute Barbatruc
Re : Verif des cellules vides

Re,

Allez, j'y vais aussi de ma formule matricielle, en N2 :

Code:
=PETITE.VALEUR(SI((I$2:I$9<>"")*MOIS(""&AE$2);SI(ESTERR(LN((ANNEE(I$2:I$9)=ANNEE(AE$2))*(MOIS(I$2:I$9)=MOIS(AE$2))*(NB.SI(DECALER(J$1:L$1;LIGNE($2:$9)-1;);"C")+NB.SI(DECALER(J$1:L$1;LIGNE(I$2:I$9)-1;);"D"))));LIGNE($2:$9)));LIGNES($2:2))
Edit : ajouté *MOIS(""&AE$2) dans la formule, c'est un peu du pinaillage.

Fichier joint.

A+
 

Pièces jointes

  • sade formule matricielle(1).xls
    43.5 KB · Affichages: 30
Dernière édition:

job75

XLDnaute Barbatruc
Re : Verif des cellules vides

Re,

J'ai testé la durée d'exécution de la formule matricielle pour un tableau de 2000 lignes.

Sur Win XP - Excel 2003, avec une seule cellule calculée en colonne N, la durée est de 0,013 seconde.

A multiplier par le nombre de cellules calculées en colonne N.

A+
 

job75

XLDnaute Barbatruc
Re : Verif des cellules vides

Re,

J'ai testé aussi sur 2000 lignes la formule de CISCO.

Elle s'exécute en 0,163 seconde, et elle ne contrôle pas le mois et l'année.

L'analyse des caractères avec concaténation, NBCAR et SUBSTITUE prend donc beaucoup de temps.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise