[VBA-E] variable Mois

Fermé
MissExcel - 24 juil. 2009 à 09:59
 MissExcel - 27 juil. 2009 à 16:22
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

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 387
24 juil. 2009 à 15:15
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
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
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 387
24 juil. 2009 à 16:23
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
Merci christounet, je n'y avait pas pensé, ca fonctionne !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 387
27 juil. 2009 à 10:56
Bonjour,

Peut-être que cet exemple pourra t'aider?
A plus
0
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
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 387
27 juil. 2009 à 11:53
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
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
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 387
27 juil. 2009 à 14:01
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
je vais faire autrement, merci !
0