Format heure par mail par vba

Résolu
alexpepe Messages postés 20 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 14 avril 2016 - 13 avril 2016 à 12:08
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 14 avril 2016 à 13:57
Bonjour à tous,

Je viens à la recherche d'aides et conseils car je bloque.

J'ai un tableau avec Date, Heure, Mail.
J'ai une macro qui analyse des dates et si la condition est remplie elle va envoyer un mail à la ou aux personnes concernées avec dans le corps du mail la date et l'heure du rdv, sauf que je n'arrive pas à exprimer les heures dans le bon format.

C'est certainement tout bête mais j'ai déclaré mes heures en variant et j'ai ensuite essayé de leur donner le format d'heures que j'ai pu trouver sur internet mais rien n'y fait.

Je mets mon code ci dessous:
Pour infos, mes heures se trouve dans la variable "HeureVM_Col".

Sub Workbook_Open()
'envoie un mail au DPX si la date de VM est dans 7 jours ou moins
Dim sSujet As String 'sujet du mail
Dim sBody As String ' corps du mail
Dim sAdresseMail As String 'adresse mail du dpx
Dim duree As Date 'nbre de jours entre aujourd'hui et la date à tester
Dim Lig_Deb As Integer 'première ligne du tableau
Dim Lig_Fin As Long 'dernière ligne remplie du tableau
Dim sDates_Col As String ' colonne avec la date de VM
Dim sMails_Col As String 'colonne avec l'adresse mail du DPX
Dim sRappel_Col As String ' colonne avec la date de rappel
Dim I As Integer
Dim ws As Worksheet
Dim NomOnglet As String
Dim NomAgent_Col As String
Dim HeureVM_Col As Variant


'enregistrer le nom de l'onglet actif à l'ouverture du fichier
NomOnglet = ActiveWorkbook.ActiveSheet.Name

'pour tous les onglets dans le fichier
For Each ws In ActiveWorkbook.Worksheets
ws.Activate

'initialisation des constantes de la macro :
Lig_Deb = 2 'dans ma feuille Excel, les dates à tester commencent en ligne 2
sDates_Col = "B" ' et elles sont en colonne B ( 2 ième colonne)et les adresses mail sont en colonne E à côté
sRappel_Col = "G" 'colonne ou apparait la date d'envoi d'un rappel par mail
NomAgent_Col = "D" 'colonne ou apparait le nom de l'agent
HeureVM_Col = "C" 'colonne ou apparait l'heure de la VM


'Ligne de fin = dernière cellule remplie dans la colonne des dates
Lig_Fin = Range("B" & Rows.Count).End(xlUp).Row

' boucle de test dans la plage des dates (=> )
'pour toutes les lignes de ligne du début à la derniere ligne remplie
For I = Lig_Deb To Lig_Fin
Range(sDates_Col & CStr(I)).Activate 'activer la cellule testée
duree = ActiveCell.Value - Now ' la date est dans la cellule active
If duree <= 4 And duree > 0 And Range(sRappel_Col & CStr(I)).Value = "" Then 'la date est dans 4 jours ou moins par rapport à aujourd'hui et la case rappel est vide
sAdresseMail = ActiveCell.Offset(0, 3).Value 'l'adresse mail est dans trois colonne après offset (0,3)

'initialisation des données du mail envoyé :
sSujet = "Visite médical"
sBody = "Votre agent " & Range(NomAgent_Col & CStr(I)) & " doit passer sa visite médicale le " & Range(sDates_Col & CStr(I)) & " à " & Range(HeureVM_Col & CStr(I)) & "."

' envoyer le mail :
CDO_SendMail sSujet, sBody, sAdresseMail

'mettre la date d'envoi dans la case rappel
Range(sRappel_Col & CStr(I)) = Now

Else

End If

Next I
Next ws

'retourner sur l'onglet actif à l'ouverture du fichier
Worksheets(NomOnglet).Activate


End Sub


Merci d'avance pour votre aide :)

2 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 13/04/2016 à 12:37
Bonjour
Tes heures ne sont pas dans la variable "HeureVM_Col"
"HeureVM_Col" ne représente que la lettre de la colonne où se trouvent précisément ces heures et doit être dimensionnée en String ! Par contre la colonne est-elle formatée au format Date-heure ?

ton code
HeureVM_Col = "C" 'colonne ou apparait l'heure de la VM


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
alexpepe Messages postés 20 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 14 avril 2016
13 avril 2016 à 12:33
ah oui exact merci pour la précision.
mais du coup, dans mon envoi du mail il va bien chercher la cellule correspondante mais comment lui indiquer le format à prendre? car sur excel le format est bien heure

sBody = "Votre agent " & Range(NomAgent_Col & CStr(I)) & " doit passer sa visite médicale le " & Range(sDates_Col & CStr(I)) & " à " & Range(HeureVM_Col & CStr(I)) & "."
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > alexpepe Messages postés 20 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 14 avril 2016
13 avril 2016 à 12:43
regardes ici et intéresses-toi au dernier exemple
http://www.excel-pratique.com/fr/astuces_vba/format_dates.php
0
alexpepe Messages postés 20 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 14 avril 2016 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
13 avril 2016 à 12:51
oui j'ai vu cet exemple déjà, j'ai donc essayé de le modifier avec mon code en remplaçant la cellule définie par ma cellule aléatoire, mais mon mail arrive tjr avec l'heure en nombre donc X,XXXXXXXXX
Range(HeureVM_Col & CStr(I)) = Format(HeureVM_Col, "h\Hmm")

Je l'ai placé juste avant le Else dans mon code.
Je pense que c'est le fait de ne pas indiquer une cellule précise qui ne fonctionne pas dans ce cas.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > alexpepe Messages postés 20 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 14 avril 2016
Modifié par vb95 le 13/04/2016 à 13:20
Salut Alex
Que contient visuellement la cellule Heure avant l'envoi du mail ?
Excel contient en interne les dates et heures sous forme de nombre X,XXXXX et les affiche au format voulu selon le pays et les infos désirées

sBody = "Votre agent " & Range(NomAgent_Col & CStr(I)) & " doit passer sa visite médicale le " & Range(sDates_Col & CStr(I)).Value & " à " & Range(HeureVM_Col & CStr(I)).Value & "."


A tout hasard que donne l'ajout de .Value dans cette ligne de code ?
Je ne suis pas un spécialiste VBA !
0
alexpepe Messages postés 20 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 14 avril 2016 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
13 avril 2016 à 13:36
Alors la colonne Heure contient des heure comme 08:00 en format heure hh:mm. Cette colonne ne change pas, ce sont des données saisies à l'avance.
L'ajout de Value ne change rien, aucune modif, dans mon mail c'est toujours 0,611111111111111 pour 14h40 par exemple.
Aucun souci toute aide est la bienvenue dans tous les cas.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 avril 2016 à 21:29
Essaie en ajoutant .Text
Range(HeureVM_Col & CStr(I)).Text

0
alexpepe Messages postés 20 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 14 avril 2016
14 avril 2016 à 09:25
Bonjour cs_MPi,

je viens de tester et ça fonctionne aussi, et vu comme ça c'était vraiment tout con :-)

merci pour ton aide.
0
Rejoignez-nous