Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Verif des cellules vides

  • Initiateur de la discussion Initiateur de la discussion sadia
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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

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

Dernière édition:
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

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...
 
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 !
 
Re : Verif des cellules vides

Re sadia,

C'était donc moi 😀 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

Dernière édition:
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

Dernière édition:
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+
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
403
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…