Erreur "Objet requis" sur macro
Désolé il bloque toujours à la même ligne "objmessage.Send" il ne reconnait pas les noms
re-Bonjour,
remplace le .send par .display, il devrait t'afficher le mail dans outlook, jette un oeil sur les destinataires ...
Re bonjour
En remplacant Send par Display, j'ai vu que j'avais une erreur de syntaxe dans une adresse
Maintenant il bloque sur l'accusé réception ou il me dit que à la ligne de code suivante:
objmessage.ReadReceiptRequested = True ' demande d'un avis de lecture
L'élément à été déplacé ou supprimé alors que je n'i rien touché sur cette ligne, mais peut être est-ce dû au fait que nous avons plusieurs destinataires
Qu'en penses tu?
cela fonctionne-t-il encore avec un seul destinataire ?
Oui si je ne mets qu'une valeur de cellule ça fonctionne
Dés que j'en ajoute une deuxième ça bloque et il me dit qu'il ne reconnait pas les noms pourtant l'adresse est valide
J'avoue que je ne vois absolument pas ou alors le signe entre les cellule n'est pas correct.
bonjour,
en laissant le .display
peux-tu me faire un copier coller de ce qui se trouve dans le champ envoyer à : ?
ou bien essayer les noms un par un. pour essayer de trouver celui qui pose problème.
Re bonjour
En fait le signe séparateur doit être ; et non :
J'ai modifié le code et visiblement ça marche
Je fais des tests avec des destinataires extérieurs et reviens vers toi
Ce qui est bien c'est que j'analyse les lignes de commande et je commence à comprendre la signification
J'attends mon bouquin sur le VBA avec une grande impatience
A tout à l'heure
Merci encore
Re bonjour
J'ai fait les tests avec des adresses extérieures et ça fonctionne très bien.
J'ai une deuxième requête à te faire
Je souhaite envoyer une partie de feuille EXCEL (A1:W60) au format EXCEL et non PDF avec une liste d'adresse mail située dans les cellules A62 à a200. J'ai testé le code suivant, il fonctionne mais je n'ai pas la pièce jointe.
Que me manque t'il?
Merci de ton aide
Sub Macro1()
'on cré le fichier excel dans le même dossier que le fichier source
ActiveSheet.Range("A1:w60").Select ' la plage de cellules à envoyer
ActiveSheet.Range("A1:w60").Copy 'crée une copie de la feuille active"
Set OutApp = CreateObject("Outlook.Application")
Set objmessage = OutApp.CreateItem(0)
objmessage.Subject = "Enregistrement de votre réservation" 'A modifier
For Each Dest In Range("h65,h66") ' Adresse des destinataires dans les cellules N13 & N16
destlist = destlist & sep & Dest.Value
If sep = "" Then sep = ";"
Next
objmessage.to = destlist
objmessage.CC = "jean-luc.david88@orange.fr" 'Adresse mail de la personne en copie
objmessage.body = "Bonjour," & _
vbCrLf & vbCrLf & _
"Veuillez trouver ci-joint votre fiche de réservation à nous renvoyer remplie au plus vite" & _
vbCrLf & vbCrLf & _
"Cordialement" & _
vbCrLf & vbCrLf & _
"L'équipe organisatrice du tournoi"
objmessage.attachments.Add ActiveSheet ' à modifier
objmessage.ReadReceiptRequested = True ' demande d'un avis de lecture
objmessage.send
MsgBox "Le mail a été bien envoyé !"
'si erreur on sort de la procédure
Application.DisplayAlerts = True
Exit Sub
errorHandler:
'description de l'erreur survenue
MsgBox Err.Description
End SubDAVIDADAM a écrit :Re bonjour
En fait le signe séparateur doit être ; et non :
il me semble pourtant que j'avais mis ; dans le code que je t'ai donné.
Non c'était bien : mais c'est très bien ça m'a permis de chercher un peu....
Et pour le deuxième code tu as une idée?
Merci
DAVIDADAM a écrit :Non c'était bien : mais c'est très bien ça m'a permis de chercher un peu....
Et pour le deuxième code tu as une idée?
Merci
tu as dû mal recopier car j'ai bien utilisé ";" comme séparateur dans le code que je t'ai donné.
if sep="" then sep=";"pour le 2nd point.
remplace cette instruction par
objmessage.attachments.Add ActiveSheet ' à modifieractivesheet.saveas ws.name & ".xlsx"
objmessage.attachments.add ws.name & ".xlsx"Re bonjour
J'ai fait comme tu me l'as proposé mais ça ne fonctionne pas
Je te joins le code complet et ça bloque à ActiveSheet.SaveAs ws.Name & ".xlsx"
Merci
Pour le code tu avais raison c'est dans la ligne ou il y a les cellules que le séparateur était éronné
Sub Macro1()
'on cré le fichier excel dans le même dossier que le fichier source
ActiveSheet.Range("A1:w60").Select ' la plage de cellules à envoyer
ActiveSheet.Range("A1:w60").Copy 'crée une copie de la feuille active"
Set OutApp = CreateObject("Outlook.Application")
Set objmessage = OutApp.CreateItem(0)
objmessage.Subject = "Enregistrement de votre réservation" 'A modifier
For Each Dest In Range("h65,h66") ' Adresse des destinataires dans les cellules N13 & N16
destlist = destlist & sep & Dest.Value
If sep = "" Then sep = ";"
Next
objmessage.to = destlist
objmessage.CC = "jean-luc.david88@orange.fr" 'Adresse mail de la personne en copie
objmessage.body = "Bonjour," & _
vbCrLf & vbCrLf & _
"Veuillez trouver ci-joint votre fiche de réservation à nous renvoyer remplie au plus vite" & _
vbCrLf & vbCrLf & _
"Cordialement" & _
vbCrLf & vbCrLf & _
"L'équipe organisatrice du tournoi"
set ws=activesheet
fn = ws.Name 'fn nom de la feuille
Set wb = Workbooks.Add(xlWBATWorksheet) 'on crée un nouveau classeur
ws.copy after:=wb.worksheets(worksheets.count) ' on copie la feuille dans le nouveau classeur
set ws1=wb.worksheets(worksheets.count) ' ws1= nouvelle feuille dans le nouveau classeur
wb.Sheets(1).delete ' on supprime une feuille inutile
ws1.name=ws.name ' on renomme la feuille copiée dans le nouveau classeur
set ws1=nothing
wb.SaveAs fn 'on sauve le nouveau classeur qui contient une feuille (la feuille active)
wb.Close 'on ferme le classeur
set wb=nothing
fn=fn & ".xlsx" 'nom du classeur sauvé
objmessage.attachments.Add fn 'on ajoute le classeur en annexe au mail
objmessage.ReadReceiptRequested = True ' demande d'un avis de lecture
objmessage.send
MsgBox "Le mail a été bien envoyé !"
'si erreur on sort de la procédure
Application.DisplayAlerts = True
End SubSub Macro1()
'on cré le fichier excel dans le même dossier que le fichier source
ActiveSheet.Range("A1:w60").Select ' la plage de cellules à envoyer
ActiveSheet.Range("A1:w60").Copy 'crée une copie de la feuille active"
Set OutApp = CreateObject("Outlook.Application")
Set objmessage = OutApp.CreateItem(0)
objmessage.Subject = "Enregistrement de votre réservation" 'A modifier
For Each Dest In Range("h65,h66") ' Adresse des destinataires dans les cellules N13 & N16
destlist = destlist & sep & Dest.Value
If sep = "" Then sep = ";"
Next
objmessage.to = destlist
objmessage.CC = "jean-luc.david88@orange.fr" 'Adresse mail de la personne en copie
objmessage.body = "Bonjour," & _
vbCrLf & vbCrLf & _
"Veuillez trouver ci-joint votre fiche de réservation à nous renvoyer remplie au plus vite" & _
vbCrLf & vbCrLf & _
"Cordialement" & _
vbCrLf & vbCrLf & _
"L'équipe organisatrice du tournoi"
set ws=activesheet
fn = ws.Name 'fn nom de la feuille
Set wb = Workbooks.Add(xlWBATWorksheet) 'on crée un nouveau classeur
ws.copy after:=wb.worksheets(worksheets.count) ' on copie la feuille dans le nouveau classeur
set ws1=wb.worksheets(worksheets.count) ' ws1= nouvelle feuille dans le nouveau classeur
wb.Sheets(1).delete ' on supprime une feuille inutile
ws1.name=ws.name ' on renomme la feuille copiée dans le nouveau classeur
set ws1=nothing
wb.SaveAs fn 'on sauve le nouveau classeur qui contient une feuille (la feuille active)
wb.Close 'on ferme le classeur
set wb=nothing
fn=fn & ".xlsx" 'nom du classeur sauvé
objmessage.attachments.Add fn 'on ajoute le classeur en annexe au mail
objmessage.ReadReceiptRequested = True ' demande d'un avis de lecture
objmessage.send
MsgBox "Le mail a été bien envoyé !"
'si erreur on sort de la procédure
Application.DisplayAlerts = True
End SubBonjour
Visiblement ça marche correctement
Je vais essayer d'analyser les lignes de code pour comprendre le fonctionnement
Je te remercie encore
Je ne sais pas ou se trouve le bouton "Résolu"
A bientôt
Re bonjour
Je me suis peut être réjouis trop vite
Il bloque à la ligne suivante
objmessage.attachments.Add fn 'on ajoute le classeur en annexe au mail
Le message dit "Fichier introuvable vérifier que le chemin d'accès et le nom de fichier sont corrects
Je te mets le code complet mais ce que je trouve drôle c'est que ça fonctionnait
Sub Macro1()
'on cré le fichier excel dans le même dossier que le fichier source
ActiveSheet.Range("A1:w60").Select ' la plage de cellules à envoyer
ActiveSheet.Range("A1:w60").Copy 'crée une copie de la feuille active"
Set OutApp = CreateObject("Outlook.Application")
Set objmessage = OutApp.CreateItem(0)
objmessage.Subject = "Enregistrement de votre réservation" 'A modifier
For Each Dest In Range("h66:h215") ' Adresse des destinataires dans les cellules h66 à h215
destlist = destlist & sep & Dest.Value
If sep = "" Then sep = ";"
Next
objmessage.to = destlist
objmessage.CC = "jean-luc.david88@orange.fr" 'Adresse mail de la personne en copie
objmessage.body = "Bonjour," & _
vbCrLf & vbCrLf & _
"Veuillez trouver ci-joint votre fiche de réservation à nous renvoyer renseignée au plus vite" & _
vbCrLf & vbCrLf & _
"Seules les cellules à fond blanc sont à remplir" & _
vbCrLf & vbCrLf & _
"Cette feuille est à renvoyer au plus tard pour le XX/XX/2015 remplie dans sa totalité (Participation aux repas, Mode de réglement)" & _
vbCrLf & vbCrLf & _
"Veuillez noter que le montant dû au titre de l'engagement et de la prise des repas est calculé en fonction de vos données rentrées dans la fiche de réservation" & _
vbCrLf & vbCrLf & _
"Afin d'organiser au mieux le service de restauration, tout repas non réservé ne pourra être servi le jour de la compétition" & _
vbCrLf & vbCrLf & _
"Cordialement" & _
vbCrLf & vbCrLf & _
"L'équipe organisatrice du tournoi"
Set ws = ActiveSheet
fn = ws.Name 'fn nom de la feuille
Set wb = Workbooks.Add(xlWBATWorksheet) 'on crée un nouveau classeur
ws.Copy after:=wb.Worksheets(Worksheets.Count) ' on copie la feuille dans le nouveau classeur
Set ws1 = wb.Worksheets(Worksheets.Count) ' ws1= nouvelle feuille dans le nouveau classeur
wb.Sheets(1).Delete ' on supprime une feuille inutile
ws1.Name = ws.Name ' on renomme la feuille copiée dans le nouveau classeur
Set ws1 = Nothing
wb.SaveAs fn 'on sauve le nouveau classeur qui contient une feuille (la feuille active)
wb.Close 'on ferme le classeur
Set wb = Nothing
fn = fn & ".xlsx" 'nom du classeur sauvé
objmessage.attachments.Add fn 'on ajoute le classeur en annexe au mail
objmessage.ReadReceiptRequested = True ' demande d'un avis de lecture
objmessage.display
MsgBox "Le mail a été bien envoyé !"
'si erreur on sort de la procédure
Application.DisplayAlerts = True
End SubMerci
bonjour,
je suppose qu'il y a un problème avec le nom du classeur qui est généré sur base du nom de la feuille. Comment se nomme la feuille que tu veux envoyer ?
c'est la galère de faire du débogage sans le fichier (donc merci de mettre un fichier dans lequel on peut reproduire l'erreur que tu mentionnes).... de plus si tu pouvais utiliser les balises code autour de la macro.
merci
Quant au bouton, il doit se trouver sur l'écran tant que le sujet n'est pas clôturé.(mais tu as déjà marqué ce sujet comme résolu).
Bonjour H2SO4
Je reviens vers toi pour mon fichier
Je ne parviens pas à comprendre la subtilité de renommage de la feuille
Je te mets en PJ le fichier ou j'ai supprimé pas mal d'onglets mais ça ne change rien dans le fonctionnement
Je te remercie de m'éclairer sur ce problème que je ne comprends pas
A+
bonjour,
merci pour le fichier, voici une version corrigée du code
Sub Macro1()
'on cré le fichier excel dans le même dossier que le fichier source
ActiveSheet.Range("A1:x66").Select ' la plage de cellules à envoyer
ActiveSheet.Range("A1:x66").Copy 'crée une copie de la feuille active"
Set OutApp = CreateObject("Outlook.Application")
Set objmessage = OutApp.CreateItem(0)
objmessage.Subject = "Enregistrement de votre réservation" 'A modifier
For Each Dest In Range("h66:h215") ' Adresse des destinataires dans les cellules h66 à h215
destlist = destlist & sep & Dest.Value
If sep = "" Then sep = ";"
Next
objmessage.to = destlist
objmessage.CC = "jean-luc.david88@orange.fr" 'Adresse mail de la personne en copie
objmessage.body = "Bonjour," & _
vbCrLf & vbCrLf & _
"Veuillez trouver ci-joint votre fiche de réservation à nous renvoyer renseignée au plus vite" & _
vbCrLf & vbCrLf & _
"Seules les cellules à fond blanc sont à remplir" & _
vbCrLf & vbCrLf & _
"Cette feuille est à renvoyer au plus tard pour le XX/XX/2015 remplie dans sa totalité (Participation aux repas, Mode de réglement)" & _
vbCrLf & vbCrLf & _
"Veuillez noter que le montant dû au titre de l'engagement et de la prise des repas est calculé en fonction de vos données rentrées dans la fiche de réservation" & _
vbCrLf & vbCrLf & _
"Afin d'organiser au mieux le service de restauration, tout repas non réservé ne pourra être servi le jour de la compétition" & _
vbCrLf & vbCrLf & _
"Cordialement" & _
vbCrLf & vbCrLf & _
"L'équipe organisatrice du tournoi"
Set ws = ActiveSheet
fn = ws.Name 'fn nom de la feuille
Set wb = Workbooks.Add(xlWBATWorksheet) 'on crée un nouveau classeur
ws.Copy after:=wb.Worksheets(Worksheets.Count) ' on copie la feuille dans le nouveau classeur
Set ws1 = wb.Worksheets(Worksheets.Count) ' ws1= nouvelle feuille dans le nouveau classeur
Application.DisplayAlerts = False
wb.Sheets(1).Delete ' on supprime une feuille inutile
ws1.Name = ws.Name ' on renomme la feuille copiée dans le nouveau classeur
Set ws1 = Nothing
wb.SaveAs fn 'on sauve le nouveau classeur qui contient une feuille (la feuille active)
Application.DisplayAlerts = True
fn = wb.FullName
wb.Close 'on ferme le classeur
Set wb = Nothing
'nom du classeur sauvé
objmessage.attachments.Add fn 'on ajoute le classeur en annexe au mail
objmessage.ReadReceiptRequested = True ' demande d'un avis de lecture
objmessage.send
MsgBox "Le mail a été bien envoyé !"
'si erreur on sort de la procédure
Application.DisplayAlerts = True
End SubBonjour H2SO4,
Je te remercie de ton aide et ça fonctionne correctement
Je vais pouvoir analyser ce qui ne fonctionnait pas et surtout continuer à développer quelques petites macro qui une fois maîtrisées rendent un service fort agréable.
Par contre je ne trouve pas le bouton problème résolu, j'ai pourtant bien regardé dans tous les coins
Bonne journée