Macro Excel : enregistrer / envoyer mail / feuille blanche

Fermé
mathis40 Messages postés 1 Date d'inscription dimanche 21 avril 2019 Statut Membre Dernière intervention 21 avril 2019 - Modifié le 22 avril 2019 à 08:44
sifusalade Messages postés 134 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 - 23 avril 2019 à 23:05
Bonjour,

Je ne suis pas un expert en macro excel et malgré mes recherches je galère un peu donc je viens poser mes question ici :

Il s'agit d'un projet pour mes rapport de chantiers.
J'ai "coder" l'ensemble du rapport type avec 4 feuilles (Rapport de chantier, PDR, Données, Bibliothèque)
manque plus que quelque macro pour facilité le tout.

Écrites dans l'ordre du besoin :

MACRO ENREGISTRER SOUS

Vue qu'en général les travaux de la veille ressemble à ceux du lendemain, j'aimerais que le chef modifie en fin de journée son rapport du jour -1 et l'enregistre au jour J.
Mais chaque chef a un ordinateur différent

je voudrais donc que quand il appui sur le bouton (créer dans le classeur) ENREGISTRER SOUS que la page ENREGISTRER SOUS s'ouvre avec comme titre :

RC - NUMERO DE CHANTIER - CHEF DE CHANTIER - DATE DU JOUR XX/XX/XXXX

Informations respectivement dans les cellules
"RC"(juste RC sans cellule) - J2 - B1 - Q1 (au passage Q1 est fusionnée avec Q2) mais au pire des cas je peux toujours avoir un = de Q1 ailleurs écrit en blanc pour avoir une cellule non fusionnée)

Avec le chemin dans l'ordinateur pour accéder au bon dossier dans la cellule M60

NB : Si ENREGISTRER SOUS impossible mais seulement ENREGISTRER fonctionne, je prend quand même ^^, c'est juste que voir la fenêtre s'ouvrir peut rassurer les chefs en disant que c'est bien enregistrer.

MACRO ENVOYER PAR MAIL

Je voudrais ouvrir la fenêtre mail pour ... envoyer un mail avec : (on utilise outlook avec des adresses vinci-construction.fr)

En pièce jointe le rapport du jour avec le même nom RC - NUMERO DE CHANTIER - CHEF DE CHANTIER - DATE DU JOUR XX/XX/XXXX

Pour le destinataire : la cellule en liste déroulante : M64

Objet : le même nom toujours RC - ......

Message :

Ci-joint RC - ....

Cordialement

"Cellule B1" (ou apparait le nom du chef)

Que le chef n'est plus qu'à appuyer sur envoyer

MACRO FEUILLE BLANCHE

La seule que j'ai réussi mais qui ne fonctionne pas car il y a des cellules fusionnées,

Sub FEUILLEBLANCHE()
Sheets("Rapport de chantier").Range("B1:B2,J1:J2,Q1,C8:C17,E8:J17,A19:C28,E19:J28,B33:B42,E33:E42,H33:J42,A45:J54,A58:J67,L6:Q28,L32:R35,L38:R54").ClearContents
End Sub

Si quelqu'un a une solution ça serait bien sinon tant pis je me débrouillerais sans.


beaucoup de choses c'est vrai, en espérant avoir de l'aide

Cordialement
Mathis M.





Configuration: Windows / Chrome 73.0.3683.103
A voir également:

1 réponse

sifusalade Messages postés 134 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
23 avril 2019 à 23:05
Demande à la fois trop complète et pas assez. Tu devrais faire une demande pour chaque chose que tu veux.

Mais je vais quand même tenter de répondre ici.

Ta macro feuille blanche consiste à vider ta feuille ? Tu ne peux pas tout simplement supprimer les colonnes A à R ? (Ta colonne S deviendra A, T deviendra B etc...), sinon retiens que l'adresse d'une cellule fusionnée est toujours la première contenue dans la plage. Exemple si tu à fusionné de A1 à A12. Son adresse est A1. Si tu essaye de séléctionner A1 à A2 cela ne fonctionnera pas. Si tu sélectionnes A2, cela te prendra A1 à A12.

Pour ta macro qui envoi le mail :
J'ai eu la flemme tout saisir alors j'ai fais une recherche sur le net pour faire un copier/coller ????. Je suis tombé très très rapidement sur quelque chose de très bien que voici :

commence par ajouter la référence
Microsoft Outlook X.0 Object Library
à ton Excel.

Puis :

Sub EnvoyerEmail(ByVal Sujet As String, ByVal Destinataire As String, ByVal ContenuEmail As String, Optional ByVal PieceJointe As String)


On Error GoTo EnvoyerEmailErreur

'définition des variables
Dim oOutlook As Outlook.Application
Dim WasOutlookOpen As Boolean
Dim oMailItem As Outlook.MailItem
Dim Body As Variant

Body = ContenuEmail

    'vérification si le Contenu du mail n'est pas vide. Si oui, email n'est pas envoyé. Si vous voulez pouvoir envoyer les email vides, mettez en commentaire les 4 lignes de code qui suivent.
    If (Body = False) Then
        MsgBox "Mail non envoyé car vide", vbOKOnly, "Message"
        Exit Sub
       End If
    
    'préparer Outlook
    PreparerOutlook oOutlook
    Set oMailItem = oOutlook.CreateItem(0)
    
    'création de l'email
    With oMailItem
        .To = Destinataire
        .Subject = Sujet
        
        'CHOIX DU FORMAT
        '----------------------
        'email formaté comme texte
            .BodyFormat = olFormatRichText
            .Body = Body
            
            'OU
            
        'email formaté comme HTML
            '.BodyFormat = olFormatHTML
            '.HTMLBody = "<html><p>" & Body & "</p></html>"
        '----------------------
        
        If PieceJointe <> "" Then .Attachments.Add PieceJointe

       .Display   '<- affiche l'email (si vous ne voulez pas l'afficher, mettez cette ligne en commentaire)
       .Save      '<- sauvegarde l'email avant l'envoi (pour ne pas le sauvegarder, mettez cette ligne en commentaire)
       .Send      '<- envoie l'email (si vous voulez seulement préparer l'email et l'envoyer manuellement, mettez cette ligne en commentaire)
    End With
    
   'nettoyage...
    If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
    If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
    
   Exit Sub

EnvoyerEmailErreur:
    If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
    If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
  
    MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"
End Sub

Private Sub PreparerOutlook(ByRef oOutlook As Object)
'par Excel-Malin.com ( https://excel-malin.com )

'------------------------------------------------------------------------------------------------
'Ce code vérifie si Outlook est prêt à envoyer des emails... Et s'il ne l'est pas, il le prépare.
'------------------------------------------------------------------------------------------------
On Error GoTo PreparerOutlookErreur


On Error Resume Next
    'vérification si Outlook est ouvert
    Set oOutlook = GetObject(, "Outlook.Application")
    
    If (Err.Number <> 0) Then 'si Outlook n'est pas ouvert, une instance est ouverte
        Err.Clear
        Set oOutlook = CreateObject("Outlook.Application")
    Else    'si Outlook est ouvert, l'instance existante est utilisée
        Set oOutlook = GetObject("Outlook.Application")
        oOutlook.Visible = True
    End If
    Exit Sub

PreparerOutlookErreur:
    MsgBox "Une erreur est survenue lors de l'exécution de PreparerOutlook()..."
End Sub


Pour ta macro enregistrer sous. Je n'ai absolument rien compris de ce que tu veux. Désolé.
0