Probleme avec la fonction NB.SI.ENS / tranche de date comme 2ème condition

Bonjour à tous,

J'ai un classeur contenant 3 feuilles : une base de donnée, une feuille d'affichage des résultats et une feuille de paramétrage.

Ma feuille d'affichage des résultats contient deux cases prévues pour saisir les dates en critères (date de début et date de fin).

Ma feuille de base de donnée (commencant à partir de la 11ème ligne) contient un tableau avec les dispositions suivantes :

- 1 ere colonne : DATE

- 2 ème colonne : NUM D'IDENTIFICATION

- 3 eme colonne : REPONSE AU QUESTIONNAIRE (question numéro 1) , possibilité de réponse : "1" ou "2" ou "3"

- 4 eme colonne : REPONSE AU QUESTIONNAIRE (question numéro 2) , possibilité de réponse : "1" ou "2" ou "3"

Etc..... jusqu'à la 10ème colonne.

Je souhaite donc faire apparaitre le nombre de valeur correspondant par exemple à la réponse "1" comprises entre les dates saisies dans la feuille affichage des résultats pour une analyse selon la période.

La formule choisie pour cela : =NB.SI.ENS('BASE DE DONNEES'!$C$11:$C$1500;"1";'BASE DE DONNEES'!$A$11:$A$1500;">=" & RESULTAT!$E$10;'BASE DE DONNEES'!$A$11:$A$1500;"<=" & RESULTAT!$H$10)

Cellule E10 de la feuille résultat : date de début

Cellule H10 de la feuille résultat : date de fin

Le problème étant que le résultat m'affiche "0". Alors qu'il y a des données comprises entre les deux tranches de dates. Il peut arriver aussi que la formule fonctionne mais que pour les données répondants au critère d'une seule colonne au lieu de prendre en compte l'ensemble des colonnes.

Je ne peux pas mettre le fichier en pièce jointe car c'est un fichier confidentiel.

Merci beaucoup pour vos retours.

Bonjour,

Les dates sont elles correctement formatées ? Pouvez vous joindre un fichier anonymisé sur lequel le problème se pose ?

Oui.

J'essai de faire un fichier et je vous le fait parvenir. Merci

Finalement PEDRO en faisant un deuxième fichier je me suis rendu compte que l'erreur est causé par le formulaire de saisie, je m'explique :

La date saisie dans la feuille "base de données" est saisie automatiquement par le biais d'un formulaire de saisie. Du coup lors de la validation du formulaire et de l'apparition de la date ma formule nb.si.ens ne s'actualise pas. Par contre lorsque je viens sur mon tableau et que je supprime la date affichée par le biais du formulaire et que je la saisie manuellement, alors la formule s'actualise.

Finalement PEDRO en faisant un deuxième fichier je me suis rendu compte que l'erreur est causé par le formulaire de saisie, je m'explique :

La date saisie dans la feuille "base de données" est saisie automatiquement par le biais d'un formulaire de saisie. Du coup lors de la validation du formulaire et de l'apparition de la date ma formule nb.si.ens ne s'actualise pas. Par contre lorsque je viens sur mon tableau et que je supprime la date affichée par le biais du formulaire et que je la saisie manuellement, alors la formule s'actualise.

C'est donc bien un problème de formatage de la date. Une date valide est convertible en nombre, une date stockée sous forme de texte peut être convertie grâce à la fonction DATEVAL par exemple.

Et comment le convertir à partir du code vba ?

Et comment le convertir à partir du code vba ?

L'équivalent VBA de DATEVAL() est CDate(). Si vous souhaitez une aide plus précise, il va falloir poster ici le code VBA en question.

Merci Pedro encore pour ton retour.

La formule que j'utilise est la suivante pour afficher la date à partir de mon formulaire (formule du bouton valider) :

Private Sub btnValider_Click()
On Error GoTo 1

If TxtDate.Value <> Format(TxtDate.Value, "dd/mm/yyyy") Or Len(TxtDate.Text) <> 10 Then
MsgBox "Format de date incorrect", vbCritical, "ERREUR DE SAISIE"
TxtDate = ""
Exit Sub

Else

Sheets("BASE DE DONNEES").Activate
Range("A9").Select
Selection.End(xlDown).Select 'Sélection de la dernière ligne non vide
Selection.Offset(1, 0).Select 'On se décale d'une ligne vers le bas
ActiveCell = TxtDate.Value
Unload Me
UserForm2.Show


End If
1
End Sub

Dès que je saisie la date par le biais du formulaire alors mes formules de tableurs ne reconnaissent pas la date. C'est seulement lorsque je double clique + entrée sur la date que les formats sont pris en compte.

Bonjour,

Par définition, une Textbox contient du texte. Même si ce texte ressemble à une date, ça reste du texte... C'est au moment de l'exporter dans une cellule qu'il faut réaliser la conversion. Une proposition à tester :

Private Sub btnValider_Click()
On Error GoTo 1

If Not TxtDate.Value Like "##/##/####" Then
    MsgBox "Format de date incorrect", vbCritical, "ERREUR DE SAISIE"
    TxtDate = ""
    Exit Sub
Else
    Sheets("BASE DE DONNEES").Range("A9").End(xlDown).Offset(1, 0) = CDate(TxtDate.Value)
    Unload Me
    UserForm2.Show
End If
1:
End Sub

Bonjour Pédro

Merci pour ton assistance c'est impeccable !

Bonjour Pédro

Merci pour ton assistance c'est impeccable !

Merci du retour !

Attention, la conversion peut poser problème dans le cas des jours <= 12, où il peut y avoir inversion du mois et du jour (JJ/MM/AAAA --> MM/JJ/AAAA).
On peut alors soit proposer 3 TextBox pour saisir séparément le jour, le mois et l'année, soit pousser un peu plus loin la conversion :

'Remplacer :
CDate(TxtDate.Value)
'Par :
DateSerial(Split(TxtDate.Value, "/")(2),TxtDate.Value, "/")(1),TxtDate.Value, "/")(0))

Split permet de découper une chaîne de caractère en fonction d'un séparateur défini (ici /). Le résultat correspond à une variable tableau, on peut ensuite faire référence à un élément de ce tableau avec sont index (Tableau(i)). Si l'on fait les 2 en-même temps, ça donne Split(Texte,Séparateur)(i).

Rechercher des sujets similaires à "probleme fonction ens tranche date comme 2eme condition"