VBE - Variable dans une autre

MissExcel -  
 MissExcel -
Bonjour,
j'aurai besoin de votre aide.
J'ai besoin d'appliquer une variable dans une autre mais je ne sais pas comment faire. mon code :
Ce que je veux c'est que si la date de livraison(colonne A) - la date du jour dépasse 36h, on met 'en retard' dans la colonne O. et ca valable dans toutes les cellules.
Private Sub TEST()

DateJour as date
Datelivraison  as date
DateSur36 as date

DateJour = now
DateSur36=36
datelivraison = Cells(Lig, 1).Value  ? 'ca ne peut pas marcher Lig n'est pas encore déclaré

Dim Lig As Long
     For Lig = 1 To [A65536].End(xlUp).Row
        If Datelivraison - DateJour> DateSur36     'Colonne A
            Cells(Lig, 15).Value = "en retard"         'Colonne O
        Else
        Cells(Lig, 15).Value = ""
        End If
    Next Lig

End Sub


Merci de m'aider !

14 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    donc

    cette macro marque" retard" si tu marque 24/7/9 dans la colonne A (on est le 22/7 aujourdhui)

    si tu marques 24/07/2009 02:00:00 col A le basculement se fera à 14heures cet aprèm ( il est env. 12:30 h chez moi quand j'écris ce post

    Sub TEST1()
    Dim lig As Long
    Dim datesur36 As Single
    datesur36 = 36
    For lig = 1 To [A65536].End(xlUp).Row
            If Cells(lig, 1) - Now > datesur36 / 24 Then 'Colonne A
                Cells(lig, 15).Value = "en retard"         'Colonne O
            End If
        Next lig
    End Sub
    
    Sub test2()
    test = Cells(1, 1) - Now
    MsgBox test
    
    en espèrant que...
    End Sub

    Cordialement, Michel
    1
  2. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    bonjour,
    Est-ce nécessaire de passer par une macro ? Une simple formule suffit :
    =SI(((A1-AUJOURDHUI())*24)<=36;"en retard";"ok")
    cdt
    0
  3. MissExcel
     
    Le problème c'est que j'ai atteint le maximum de mise en forme conditionnelle, donc je dois faire une macro !
    0
  4. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    là j'ai pas tout compris :s
    tu parles de format ("mise en forme conditionnelle") mais dans ta demande précédente il est question de la valeur (="en retard") d'une cellule....peux-tu préciser stp ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. MissExcel
     
    Formule ou mise en forme conditionnelle je pensais que c'était la meme chose ?

    dans tous les cas, jai une colonne A dans laquelle il y a des dates(date livraison), une variable temps (& time, ou datejour = now), un objet (datesur36=36) et une colonne L qui présente le résultat.

    Exemple , j'entre une date dans A35, si ma date est supèrieur à 36h, "en retard" est inscrit dans la colonne L35 sinon "ok".
    J'avais donc penser à faire le code ci-dessous mais le problème c que jai besoin que ma macro soit appliqué sur tte la colonne A et L, donc dans datelivraison = Cells(Lig, 1).Value (valeur de toutes les cellules de la 1ere colonne, soit A). mais lig n'est décléré qu'après !

    Simplement : Si date de livraison - date du jour > 36h alors valeur de la cellule de la colonne L= "en retard" sinon "ok".
    J'ai déjà 3 mises en forme conditionnelle, je ne peux pas en faire plus.
    Merci !
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour
    For Lig = 1 To [A65536].End(xlUp).Row
            If Cells(Lig, 1)- DateJour> DateSur36     'Colonne A
                Cells(Lig, 15).Value = "en retard"         'Colonne O
            end if
        Next Lig


    pour la date du jour emploie plutôt date que now (tu n'as pas besoin de l'heure ?)
    pourquoi voulais tu marquer "" si la condition n'est pas remplie? tu as automatiquement une cellule vide

    mais c'est vrai qu'une formule en colonne O ferait tout aussi bien l'affaire
    0
  8. MissExcel
     
    merci pour le code michel_m !
    Private Sub TEST1()
    Dim datejour As Date
    Dim datesure36 As Date
    
    datesur36 = 36
    datejour = Now
    
    For Lig = 1 To [A65536].End(xlUp).Row
            If Cells(Lig, 1) - datejour > datesur36 Then   'Colonne A
                Cells(Lig, 15).Value = "en retard"         'Colonne O
            End If
        Next Lig
    End Sub

    par contre j'ai un message d'erreur : incompatibilité de type.
    Je ne vois pas d'ou ca peut venir ?
    0
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    si tu me disais sur quelle ligne ca plante ?
    0
  10. MissExcel
     
    bonne idée en effet !
    Ca plante sur
    If Cells(Lig, 1) - datejour > datesur36 Then   
    0
  11. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    edit: excuse moi, j'avais mal lu c'est 36h et non 36 jours!
    je reprend mon doliprane...

    0
  12. MissExcel
     
    Il me renvoi une valeur ! -123,5517, ca vien d'ou? lorsque j'entre la date 22/07/2009 00:00 dans la colonne A.
    Un autre doliprane michel_m ?
    Le code est bien plus simple lorsqu'on applique une macro du type à une seule cellule !
    merci d'avance
    0
  13. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    ton moment date est inférieur à au moment-date donné par now tu as donc un négatif
    0
  14. MissExcel
     
    Super ! merci michel_m ca fonctionne !
    Par contre je ne comprends pas quelque chose, si je met : 25/07/2009 ca fonctionne, il m'inscrit : "en retard"
    Mais si je met un moment date infèrieure, il ne m'inscrit rien.
    Ma macro a besoin d'un fonctionnement avant/après, la colonne A doit pouvoir accueillir des dates antèrieures.
    une petite modification ? merci
    0
  15. MissExcel
     
    J'ai toujours un incompatibilité de type ! j'ai essayé de faire "now - cells" au lieu de "cells - now" mais toujours une erreur ! merci de m'aider !
    Sub TEST1()
    Dim lig As Long
    Dim datesur36 As Single
    datesur36 = 36
    For lig = 1 To [A65536].End(xlUp).Row
            If Now - Cells(lig, 1)  > datesur36 / 24 Then 'Colonne A
                Cells(lig, 15).Value = "en retard"         'Colonne O
            End If
        Next lig
    End Sub
    
    Sub test2()
    test =  Now - Cells(1, 1)
    MsgBox test
    
    End Sub
    0