Si format de cellule: date, ect

hedi -  
 hedi -
Bonjour, j'utilise If isdate(Range...) = True, ca me dit True quand une cellule est vide en format standard, que faire ?

Merci !

23 réponses

  • 1
  • 2
Résumé de la discussion

La discussion porte sur l'utilisation de IsDate(Range...) et le fait que la fonction retourne True lorsqu'une cellule est vide en format standard, ce qui complique la validation des dates.
Plusieurs réponses suggèrent d'ajouter des conditions autour des blocs imbriqués, d'utiliser IsDate pour vérifier le contenu et d'ajuster le code afin d'identifier les intervalles de disponibilité.
D'autres échanges évoquent des scénarios pratiques, notamment la gestion de dates de début et fin de disponibilité et des exemples d'achats et ventes, avec des tentatives qui n'aboutissent pas.
Des précisions signalent aussi que des espaces invisibles ou des formats mixtes peuvent influencer IsDate et que le nettoyage des données peut être nécessaire dans certains cas.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Où est situé ton code ? Peux-tu mettre ta procédure ici (en utilisant les balises qui vont bien avec la petite flèche juste à droite de <> dans le petit bandeau du haut de la réponse)?

    Peut-on savoir sur quelle feuille se trouvent tes dates ?

    Bref, toutes les infos qui pourraient être susceptibles de nous aider à résoudre ton problème...

    ;0)

    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    0
  2. hedi
     
    Je reformule ma question: est ce que isdate est bien ce qu'il faut utiliser ?
    0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Si tu veux savoir si le contenu de ta cellule est une date, oui c'est bien IsDate(laCellule) qu'il faut utiliser

    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. hedi
     
    Re bonjour, j'ai un programme qui ne fait pas ce qu'il faut, et je ne trouve pas le probleme. Dans le tableau de base (catalogue) on a des achat et des vente, avec des dates de debut de droits et des dates de fin de droits, si on a un titre en achat et qu'on est dans l'intervalle de droits et que le titre n'est pas vendu (on est pas dans l'intervalle de dates (debut-fin pour les ventes)), et qu'on a bien un fomat date pour le titre, en achat et pour toutes les ventes, alors le titre s'affiche dans le nouveau tableau. Je ne peux pas envoyer le tableau de base, donc je voulais savoir si il y a un probleme dans le programme (de plus il est tres lent):

    Private Sub Workbook_Open()

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    Range("A2:P5000").Clear

    Dim titre As String
    Dim wbk1 As Workbook
    Dim wbk2 As Workbook 'Pr utilisation et mise a jour: activer macros, enregistrer base et relancer
    titre = "X:\CATALOGUE ZYLO COMPLET (a jour).xlsx"
    Set wbk1 = ThisWorkbook
    Set wbk2 = Workbooks.Open(titre)
    Dim derniere_ligneB As Integer
    Dim derniere_ligneR As Integer
    derniere_ligneB = wbk2.Sheets(1).Range("C" & Rows.Count).End(xlUp).Row
    Dim k As Integer
    Dim g As Integer

    For i = 3 To derniere_ligneB

    derniere_ligneR = wbk1.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

    k = 0

    For j = 3 To derniere_ligneB

    If IsDate(wbk2.Sheets(1).Range("Z" & i).Value) = True And IsDate(wbk2.Sheets(1).Range("Y" & i).Value) = True Then
    If Date > wbk2.Sheets(1).Range("Z" & i).Value Or Date < wbk2.Sheets(1).Range("Y" & i).Value Then
    k = k + 1
    End If
    End If

    If IsDate(wbk2.Sheets(1).Range("Z" & i).Value) = True And IsDate(wbk2.Sheets(1).Range("Y" & i).Value) = True Then
    If wbk2.Sheets(1).Range("Y" & i).Value < Date < wbk2.Sheets(1).Range("Z" & i).Value And wbk2.Sheets(1).Range("C" & i).Value = wbk2.Sheets(1).Range("C" & j).Value And wbk2.Sheets(1).Range("B" & j).Value = "VENTE" Then
    If IsDate(wbk2.Sheets(1).Range("Z" & j).Value) = True And IsDate(wbk2.Sheets(1).Range("Y" & j).Value) = True Then
    If wbk2.Sheets(1).Range("Y" & j).Value < Date < wbk2.Sheets(1).Range("Z" & j).Value Then
    k = k + 1
    End If
    End If
    End If
    End If

    If wbk2.Sheets(1).Range("C" & i).Value = wbk2.Sheets(1).Range("C" & j).Value And (IsDate(wbk2.Sheets(1).Range("Z" & j).Value) = False Or IsDate(wbk2.Sheets(1).Range("Y" & j).Value) = False) Then
    k = k + 1
    End If

    Next

    If k = 0 And IsDate(wbk2.Sheets(1).Range("Z" & i).Value) = True And IsDate(wbk2.Sheets(1).Range("Y" & i).Value) = True And wbk2.Sheets(1).Range("B" & i).Value = "ACHAT" And wbk2.Sheets(1).Range("P" & i).Value <> "NON" Then
    wbk1.Sheets(1).Range("A" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("C" & i).Value
    wbk1.Sheets(1).Range("B" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("D" & i).Value
    wbk1.Sheets(1).Range("C" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("P" & i).Value
    wbk1.Sheets(1).Range("D" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("Z" & i).Value
    wbk1.Sheets(1).Range("E" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("G" & i).Value
    wbk1.Sheets(1).Range("F" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("H" & i).Value
    wbk1.Sheets(1).Range("G" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("I" & i).Value
    wbk1.Sheets(1).Range("H" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("J" & i).Value
    wbk1.Sheets(1).Range("I" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("K" & i).Value
    wbk1.Sheets(1).Range("J" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("BN" & i).Value
    wbk1.Sheets(1).Range("K" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("BO" & i).Value
    wbk1.Sheets(1).Range("L" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("BK" & i).Value
    wbk1.Sheets(1).Range("M" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("BJ" & i).Value
    wbk1.Sheets(1).Range("N" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("BI" & i).Value
    wbk1.Sheets(1).Range("O" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("BF" & i).Value
    wbk1.Sheets(1).Range("P" & derniere_ligneR + 1).Value = wbk2.Sheets(1).Range("BU" & i).Value
    End If

    Next

    wbk2.Close

    End Sub


    Merci de votre aide !
    0
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    As-tu passé le code pas à pas pour vérifier si toutes les conditions sont correctes ?

    A première vue, il y a des conditions IF plutôt étranges tel que :

    If wbk2.Sheets(1).Range("Y" & j).Value < Date < wbk2.Sheets(1).Range("Z" & j).Value Then
    k = k + 1
    End If


    Sans vérifier, il me semble que ça soit vrai quelques soient les valeurs testées !!!

    C'est un peu normal que ça rame avec des boucles For Next imbriquées ...

    0
  7. hedi
     
    Merci Polux, au fait on peut avoir la date du jour qui ne soit pas dans l'intervalle de vente donc ca ne serait pas vrai toujours je pense. Je vais reverifier le code. Merci ^^
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Admettons que l'interval de vente soit : 01/01/2014 à 31/01/2014, la date d'aujourd'hui 24/01/2014 dans ce cas est VRAI ... puisque selon ta condition :
      Si 01/01/2014 < 24/01/2014 < 31/01/2014 Alors ...

      Si l'interval est du 01/01/2014 au 15/01/2014, on a :
      01/01/2014 < 24/01/2014 < 15/01/2014 ... et le retour est VRAI puisque 01/01/2014 < 24/01/2014

      Il faut tester les 2 conditions :

      Si 01/01/2014 < 24/01/2014 ET 24/01/2014 < 15/01/2014 Alors ...
      0
    2. hedi
       
      MERCI ! I LOVE YOU x). Cela va surement resoudre le probleme
      0
  8. hedi
     
    Fausse joie Polux,

    J'ai modifié les 2 lignes ou il y avait ce problème en: rangeY<Date and Date<rangeZ

    Mais hélas il y a au moins un titre pour lequel ca ne marche pas, on est dans l'intervalle pour l'achat, il y a plusieurs vente qui sont terminées. On a un OUI en rangeP (pour l'achat). Et le titre ne s'affiche pas :(.
    0
  9. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Je n'ai jété qu'un coup d'oeil rapide et la condition citée plus haut m'a interpelé. Sans possibilité de faire du pas à pas pour vérifier toutes les conditions, il est difficile de voir où est le loup ... sans parler des For ... Next et des IF imbriqués ...

    Les conditions de tests énumérées ici sont loin d'être claires ...
    0
    1. hedi
       
      Ok je vais regarder encore, merci !
      0
  10. hedi
     
    Bonjour,

    Dit Polux, si je t'envoie les classeurs tu pourrais m'aider ?

    Merci, Hedi !
    0
  11. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Envoie les fichiers en passant par cjoint.com et vient mettre les liens ici. Je regarderai si je peux faire quelque chose.

    PS: Je ne prends pas de fichiers compressés.
    0
  12. hedi
     
    Ok merci Polux. Pour l'instant je ne vois pas par exemple le titre Dekker, qui devrait s'afficher dans dispo

    http://cjoint.com/?3AzvD5wpMOm
    http://cjoint.com/?3AzvEV8uKcC
    0
  13. hedi
     
    Bonjour Polux, je viens aux nouvelles car il me reste que quelques jours pour finir ce programme ^^.

    Merci !

    Hedi
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Bonjour,

      Je n'ai pas vraiment eu le temps de m'occuper de ça. Mais au premier test en pas à pas je me suis rendu compte que la boucle s'effectuait 1057 x 1057 fois !!!

      Impossible de tout tester .... d'autant que je n'ai pas de contrainte clairement définies pour les conditions des différents tests.

      Il faudrait un fichier base d'une dizaine d'exemples avec dedans les différents cas à tester identifier, ainsi que le résultat attendu après traitement pour pouvoir faire les vérifications pas à pas.
      0
  14. hedi
     
    Tres bien, je vais vous faire ca ! Merci Polux.
    0
  15. hedi
     
    Re, j'ai fait ce que tu voulais et ca marche :o :O, d'où peut venir le probleme alors :s je vais chercher un peu de nouveau.

    Merci Polux
    0
  16. hedi
     
    J'ai rajouté le titre qui pose probleme en copier coller, il ne s'affiche pas, donc voici es liens Polux, le probleme n'est donc pas au niveau du programme apparement.

    Merci !

    http://cjoint.com/?3ABpONdedlT
    http://cjoint.com/?3ABpPd3ppku
    0
    1. hedi
       
      J'ai trouvé une petite erreur, j'ai ajouté la condition que en A & i on a un achat, ce avant chaque bloc de If imbriqués, mais ca n'ajoute toujours pas Dekker. :(
      0
    2. hedi
       
      le probleme se poserait donc quand on a plusieurs ventes
      0
  17. hedi
     
    Bonjour Polux, toujours pas eu le temps ?

    Merci.
    0
  18. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Il y a des conditions que je ne m'explique pas comme celles ci:

    If IsDate(wbk2.Sheets(1).Range("D" & i).Value) = True And IsDate(wbk2.Sheets(1).Range("C" & i).Value) = True Then
    If wbk2.Sheets(1).Range("C" & i).Value < Date And Date < wbk2.Sheets(1).Range("D" & i).Value And wbk2.Sheets(1).Range("B" & i).Value = wbk2.Sheets(1).Range("B" & j).Value And wbk2.Sheets(1).Range("A" & j).Value = "VENTE" Then
    If IsDate(wbk2.Sheets(1).Range("D" & j).Value) = True And IsDate(wbk2.Sheets(1).Range("C" & j).Value) = True Then
    If wbk2.Sheets(1).Range("C" & j).Value < Date And Date < wbk2.Sheets(1).Range("D" & j).Value Then
    k = k + 1
    End If
    End If
    End If
    End If


    Pourquoi par exemple la date de fin de la ligne 25 doit être égale à la date de fin de la ligne 2 ???

    Comme ici
    wbk2.Sheets(1).Range("B" & i).Value = wbk2.Sheets(1).Range("B" & j).Value And wbk2.Sheets(1).Range("A" & j).Value = "VENTE" Then


    Dans la boucle i = 25 et j = 2 !!!

    Sans les conditions et contraintes claires pour savoir ce qu'il faut extraire, je ne peux rien faire de plus...

    0
  19. hedi
     
    Merci Polux, je te donne les conditions claires, tel que les titres en rouge dans les derniers docs envoyés s'affichent.

    Il faut qu'un titre en achat s'affiche si: on en entre la date de début et de fin, et si le titre apparait en vente on est pas entre la date de début et de fin (pour la vente), ET il faut que les formats soient des dates (pour l'achat, et pour les ventes si il y a), mais cette dernière condition, les formats qui doivent être des dates, on peut s'en passer.

    Est ce assez clair ?

    Hedi
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Ok

      Je regarde ce soir

      Et pour les conditions ci dessus ? Pourquoi 2 boucles For imbriquées ?
      0
    2. hedi
       
      Mercii, les conditions au dessus:
      La premiere dit que si le titre en i est n'est pas a echeance (entre date de debut et de fin) et qu'il est trouvé en vente et qu'il est dispo (pour les ventes on est pas entre date de debut et de fin) (et si les formats sont bon) alors k n'est plus nul. Les boucles imbriquées servent a prendre un titre en achat et tester si il reapparait dans la base (en vente) pour voir si il est dispo. J'ai utilisé k s'initialise a 0 pour chaque nouveau i puis si les conditions ne sont pas satisfaites quand on parcourt les ventes alors k devient non nul et le titre ne s'affiche pas.

      Merci beaucoup pour ton aide Polux.

      Hedi
      0
    3. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Dans les conditions énoncées ici lien(#25) il n'est pas question de ça:
      "Les boucles imbriquées servent a prendre un titre en achat et tester si il reapparait dans la base (en vente) pour voir si il est dispo" !!!

      Je n'ai pas l'impression que tu ais vraiment assimilées les conditions et les contraintes pour extraire ce que tu cherches ...
      0
    4. hedi
       
      On prend le titre en i=1 puis on test si il reapparait dans la base en parcourant les j:
      for i =1 to..
      for j = 1 to..
      if range A & i = range A & j and range B & j = VENTE then ...
      next
      next

      C'est pour cela qu'il faut des for imbriqués, non ? Sinon je ne voit pas comment tester si un titre acheté a été vendu.

      Merci Polux :s
      0
    5. hedi
       
      Bonjour Polux,

      toujours pas eu le temps de regarder ?

      J'ai jusqu'à vendredi :s.

      Merci a toi.
      0
  20. hedi
     
    Bonjour, il y a t il un moyen pour accélérer le programme ? Pour l'instant il met 5min.

    Mercii
    0
  • 1
  • 2