[VBA-E] variable Mois

MissExcel -  
 MissExcel -
Bonjour,
Je cherche à faire la différence entre 2 dates dans une macro. Je saus faire la différence entre des jours mais en heure, comment faire la différence entre 2 dates mais en mois.
Exemple pour mieux illustrer :
Dim dateheure as date
dateheure = 36

if ....> dateheure / 24 ' différence en heures.

Comment faire la différence pour faire en mois:
if ... [supèrieure ou égale à 1 mois] Then...

j'ai pensé à faire 24h * 31 jours dans un mois = 744 mais ca n'est pas très propre.
merci de m'aider.

11 réponses

  1. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,
    Pourquoi ne pas utiliser tout simplement la fonction DATEDIFF ?
    Exemple de code
    Dim Date1 as Date
    Dim Date2 as Date
    Dim NombreMois
    
    NombreMois = datediff("m",Date1,Date2)

    Tu peux aussi utiliser cette fonction pour connaître le nombre d'heures entre deux dates, le nombre de jours...
    Tu trouveras de la documentation sur cette fonction ici
    A plus
    1
  2. MissExcel
     
    Merci Christounet !
    J'ai un autre problème avec mon code :
    Sub TEST1()
    Dim lig As Long
    Dim datesur36 As Single
    datesur36 = 36
    For lig = 2 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


    Le problème avec ce code c'est que admettons que ma feuille soit sans donnée, je me place au milieu de la feuille sur A160, j'entre une date infèrieure de 36h à la date d'ajourd'hui pour faire executer mon "test1", la valeur de ma cellule Z160 inscrit : en retard. Le problème c'est que toutes, toutes les cellules au dessus de Z135, c'est à dire Z134, jusqu'à Z1 on prit la valeur : en retard ! alors que a34, a33 etc n'est même pas remplit !
    j'esspere que mon explication est claire ? comment empecher ca ?

    Merci de m'aider c'est important !
    0
  3. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    Tu peux tester d'abord si la cellule est vide ou non
    For lig = 2 To [A65536].End(xlUp).Row
            If Cells(lig,1).value <> ""
                If Cells(lig, 1) - Now > datesur36 / 24 Then 'Colonne A
                    Cells(lig, 15).Value = "en retard"         'Colonne O
                End If
           End If
        Next lig
    

    A plus
    0
  4. MissExcel
     
    Merci christounet, je n'y avait pas pensé, ca fonctionne !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. MissExcel
     
    Une derniere question j'ai besoin d'envoyer dans le corps d'un email via une macro une plage de cellule.
    donc dans .body, j'ai mis :
    .body = Sheets("feuil1").Range["a1:z65535"].Value
    j'ai testé aussi : Sheets("feuil1").Range("a1:z65535").Value

    mais ca ne fonctionne pas comment faire ?
    0
  7. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    Peut-être que cet exemple pourra t'aider?
    A plus
    0
  8. MissExcel
     
    J'ai testé ce code mais il me renvoi un erreur sur .send a la fin. j'ai excel 2000. une idée?
    merci !

    Sub PlageDeCellulesDansCorpsDuMessage()
    'testé avec XP
    'adapté de : https://support.microsoft.com/en-us/help/286430
    Dim iMsg As Object, iConf As Object
    Dim strHTML As String
    Dim i As Byte, j As Byte
    
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    
    strHTML = ""
    strHTML = strHTML & "<HEAD>"
    strHTML = strHTML & "<BODY>"
    strHTML = strHTML & "Bonjour , <BR>vous trouverez ci joint le tableau demandé<BR><BR>"
    strHTML = strHTML & "<B><SPAN STYLE='background-color:green;font-size:6mm'>Résultats : </SPAN></B><BR><BR>"
    strHTML = strHTML & "<TABLE BORDER>"
    
    For i = 1 To 5 'nombre de lignes (exemple plage A1:B5)
        strHTML = strHTML & "<TR halign='middle'nowrap>"
        For j = 1 To 2 'nombre de colonnes
            strHTML = strHTML & "<TD bgcolor='yellow'align='center'><FONT COLOR='blue'SIZE=3>" _
            & Cells(i, j) & "</FONT></TD>"
        Next j
        strHTML = strHTML & "</TR>"
    Next i
    
    
    strHTML = strHTML & "</TABLE>"
    
    strHTML = strHTML & "<BR><BR>Cordialement<BR>" & Environ("username")
    strHTML = strHTML & "</BODY>"
    strHTML = strHTML & ""
    
    With iMsg
        Set .Configuration = iConf
        .To = "destinataire@dvp.fr" 'renvoie une erreur si l'adresse est non valide
        '.From = "youralias@yourdomain.com"
        .Subject = "Test Envoi Tableau par mail"
        .HTMLBody = strHTML
        .Send
    End With
    
    End Sub
    
    0
  9. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    CDO (Collaboration Data Object) nécessite un Exchange Server pour Outlook, ou alors tu dois définir dans Configuration.Fields.Item le nom du serveur SMTP que tu as (exemple pour Free : smtp.free.fr) comme dans cet exemple.
    A plus
    0
  10. MissExcel
     
    C aussi compliquer juste pour intégrer une plage de cellule dans le corps du texte d'un mail outlook ?
    Il n'y a pas d'autres solutions?
    0
  11. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    J'ai testé le code ci-dessous (Excel 2003, Outlook 2003)
    Sub Send_Range()
       
       ' Sélection des cellules.
       ActiveSheet.Range("A1:B5").Select
       
       ' Indique si l'en-tête de composition du message et la barre d'outils d'enveloppe sont tous deux visibles..
       ActiveWorkbook.EnvelopeVisible = True
       
       'Définition du titre (Introduction) , Destinataire (To) , Sujet (Subject)  et Envoi (Send)
    
       With ActiveSheet.MailEnvelope
          .Introduction = "Voici les cellules - C'est le titre."
          .Item.To = "Adresse destinataire"
          .Item.Subject = "Le sujet"
          .Item.Send
       End With
    End Sub

    Il te faut encore changer le range, l'introduction, le To et le subject.
    A toi de voir si cela fonctionne avec Excel 2000
    A plus
    0