Envoi ActiveSheet Excel en pdf via e-mail auto Thunder

Bonsoir SabV,

Merci pour votre retour.

Je ne pourrais tester cela que lundi, ou demain soir seulement.

En revanche, auriez-vous SVP une idée pour le nommage de mon fichier pdf généré (afin qu'il puisse comporter le numéro DI)?

En vous remerciant encore pour votre grande aide.

Bonjour SabV.

J'ai retesté le bout de Code donné...et ça fonctionne.

J'ai juste rajouté à votre Code, le bout de Code concernant le verrouillage numerique (NUMLOCK).

Et j'ai supprimé la message box qui etait encore active à la fin du module 1 (Sub Soumettre), qui est appelé en module 3 via fonction "Call".

En revanche, je suis toujours embêté pour un Code fonctionnel, afin d'apppeler ma Demande d'Intervention, le pdf en PJ, et lors de l'envoi du mail (corps message) avec le nom-numero qui la denomme dans les 2 cases precitées da's mes precedents echanges.

Savoir aussi comment je pourrai intégrer des petits indicateurs colorés (genre bouton ou Cercle rond) dans les demandes reçues (feuil 3), reprennant les infos de la D.I. a remplir (feuil 1).

En vous remerciant par avance pour les retours pu solutions eventuelles proposées...ou à tester.

Bonjour,

voici la dernière version, avec le nom du fichier correspondant au cellules B47 et C47

Bonjour SabV.

Merci pour votre implication dans l'avancée de ce projet.

Je viens juste de voir votre post et n'ai donc pas pu proceder à son test.

Sachez qu'en revanche, j'ai continué de mon coté afin de pouvoir intégrer des indicateurs via jeu d'icones en modifiant un peu le Code dans Soumettre et en appliquant une MFC aux 3 cases du tableau "demandes reçues" et pour cette partie là,ça fonctionne Nickel maintenant.

J'ai aussi du remodifier votre Code de la Sub Test_Mail_tb,car le Code en lui même ne presentait pas d'erreur...mais je me retrouvais avec une piece jointe lors de l'envoi de l'e-mail...puisque la Call Soumettre s'executait en amont de l'envoi de l'e mail....sachant que la Sub Soumettre, procedait à la recopie de toutes les informations de la DI en demandes reçues, et finissait par un effacement total de la quasi totalité des cases à remplir par le demandeur.

C'est chose reglé aussi.

Je procederai au test de votre Code modifié pour avoir le numero de la DI qui s'affiche dans le nommage PJ et lors de l'envoi du mail....et si tout est ok...le pb pourra passer en resolu tout bientôt (hate 😊).

En vous remerciant encore.

Bonsoir SabV.

Je vous fait un retour concernant la mise en place du numéro de la demande, et c'est fonctionnel !!!

J'ai tout modifié avec mon pack d'icônes intégré via MFC et tout mis en forme afin que tout soit nickel au visuel et à l’exécution....C'est Parfait aussi

En revanche, afin de bien parfaire mon fichier, je souhaitais intégrer une macro maintenant qui me reprendrait les informations de la "ligne en cours" (sélectionnée par click curseur afin de remplir les informations des cases en colonne U,V,W,X,Y que je rempli manuellement une fois la DI prise en charge et terminée par le service) et que cette macro me recopie toutes les informations de chaque cellules de toute la ligne afin de les transférer à nouveau sur la feuille "Demande clôturée" , dans les cellules adéquates de cette feuille (Feuil 3).

Mais je n'ai pas réussi à intégrer un code fonctionnel (débogage de script à chaque fois), donc je l'ai effacé pour l'envoi du fichier joint.

Je me suis pourtant basé sur le code de la Sub Soumettre qui fait le même type de fonction (entre feuilles "DI" et "demandes reçues") afin d'élaborer le code de celle-ci...mais ça ne va pas; ça plante !

Auriez-vous une idée judicieuse SVP?

On touche à la fin...enfin...

En revanche, vous pourrez vérifier les codes modifiés (et maintenant fonctionnels) sur les modules 1 & 3. Le module 2 ayant été créer pour cette nouvelle macro "clôturer".

En vous remerciant par avance pour vos retours précieux, et en vous remerciant grandement pour toutes les aides déjà apportées pour avancer grandement ce fichier

re..,

je vois vois qu'il n'y a plus la ligne SendKeys ("{NUMLOCK}"), True

est -ce que c'est voulu ?

je part tôt demain matin pour 2 jours dès mon retour je regarde tous ça,

@+

isabelle

Bonsoir Isabelle.

Merci pour le retour.

Si, la fonction "NUMLOCK" est toujours bien intégrée dans la 1ère partie du Code du module 3:

Sub Test_Mail_TB()
Dim ssRep As String, ssNomFic As String
ssRep = ThisWorkbook.Path

With Sheets("Demande d'Intervention")
  ssNomFic = "DI-" & Format(.Range("B47"), "yyyymmdd") & "-" & Format(.Range("C47"), "0000") & ".pdf"
End With

yourmsgbox = MsgBox("Avez-vous bien rempli la totalité des informations nécessaires à votre 'Demande d'Intervention' afin de procéder à l'envoi et à la validation de celle-ci ? ", vbOKCancel + vbExclamation, "Demande de confirmation")
    If yourmsgbox = vbCancel Then
      Exit Sub
    End If
      If yourmsgbox = vbOK Then
       Mail_TB ssRep, ssNomFic
       Application.Wait (Now + TimeValue("0:00:03"))
       Kill ssRep & "\" & ssNomFic
       Application.SendKeys ("{NUMLOCK}"), True
    End If

Call Soumettre

MsgBox "Votre Demande d'Intervention a bien été impactée. Afin de la valider totalement, vous pouvez maintenant fermer le fichier", vbOKOnly + vbExclamation, "Etape cruciale de fin de validation!"

End Sub

Et intégrée comme ceci, tout fonctionne parfaitement.

Le fait d'avoir décalé la Call Soumettre est choisi, car le fait qu'elle s’exécutait avant l'envoi du message, faisait que je recevais un pdf de mon feuillet excel avec cases vierges, vu que la fin de la macro soumettre procède à l'effacement des données ...

Telle que vous avez reçu le dernier fichier joint, tout est fonctionnel ^^

Hormis cette nouvelle macro.

Mercie encore de votre intêret, rassurez vous je continuerai à chercher de mon côté d'ici votre retour, et voir si nous pourrons concaténer nos solutions et tomber sur un résultat parfait

En attendant de vos nouvelles, bon déplacement à vous et bon courage.

re..

sur la page code "Demandes reçues" est ce que la macro suivante est toujours utile à votre projet ?

Private Sub Worksheet_Change(ByVal Target As Range)
    ' teste si la cellule juste au dessus est remplie
    If Range("premiereCelluleApresTableau").Offset(-1) <> "" Then
        ' ajoute une ligne - la ligne s'insère au dessus
        Application.EnableEvents = False ' pour ne pas se mordre la queue
        Range("premiereCelluleApresTableau").EntireRow.Insert xlShiftDown
        Application.EnableEvents = True
    End If
End Sub

re..

voici un premier jet pour la macro Clôturer

Sub Clôturer()
Dim sh1 As Worksheet, sh2 As Worksheet, lig As Long, sourc, dest, i As Long
Set sh1 = Sheets("Demandes reçues")
Set sh2 = Sheets("Demande clôturée")

'test
lign = 25

sourc = Array("A", "B", "F", "G", "H", "I", "J", "K", "L", "N", "P", "T")
dest = Array("B47", "C47", "D8", "C16", "D18", "C20", "D22", "D12", "C33", "C16", "C10", "B36")

For i = LBound(sourc) To UBound(sourc)
 sh2.Range(dest(i)).Value = sh1.Range(sourc(i) & lign).Value
Next

' ? = sh1.Range("M" & lign + 1).Value    ?
' ? = sh1.Range("O" & lign + 1).Value    ?
End Sub

Bonsoir SabV,

Merci pour vos retours; alors pour répondre déjà à votre question sur la Private Sub:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' teste si la cellule juste au dessus est remplie
    If Range("premiereCelluleApresTableau").Offset(-1) <> "" Then
        ' ajoute une ligne - la ligne s'insère au dessus
        Application.EnableEvents = False ' pour ne pas se mordre la queue
        Range("premiereCelluleApresTableau").EntireRow.Insert xlShiftDown
        Application.EnableEvents = True
    End If
End Sub

Oui, j'en ai encore besoin...enfin..je pense puisque c'est elle qui me rajoute 1 ligne automatique à chaque fois qu'une nouvelle demande est enregistrée et me permet de garder le format initial avec une ligne +1, et me rajouter un "1" en + à la demande venant d'être enregistrée. Elle fait très bien son boulot...à moins que vous ayez une meilleure idée sur le sujet

Ensuite pour ce qui est de votre 1er jet pour la macro Cloturer, j'ai commencé à faire quelques test et ai procédé à quelques ajouts, comme suit (sauf que je suis embêté maintenant pour le report des cases des colonnes "C,D & E"; voilà le code actualisé:

Sub Clôturer()
Dim sh1 As Worksheet, sh2 As Worksheet, lig As Long, sourc, dest, i As Long
Set sh1 = Sheets("Suivi des D.I. Reçues & Travaux")
Set sh2 = Sheets("Demande d'Intervention Clôturée")

'test
lign = 142
'Test OK, mais je souhaiterai que ce soit la cellule selectionnée/clickée qui me fasse selectionner ma ligne dite "en cours"

sourc = Array("A", "B", "F", "G", "H", "I", "J", "K", "L", "N", "P", "Q", "R", "S", "T", "U", "W", "X", "Y")
dest = Array("B47", "C47", "D8", "C16", "D18", "C20", "D22", "D12", "C33", "C16", "C10", "H12", "H14", "D14", "B36", "F47", "E49", "B53", "G49")
'j'ai rajouté des cases et leurs destinations pour remplir la quasi totalité des infos nécessaires sauf 3 (C,D,E) car pb - info cf. plus bas

For i = LBound(sourc) To UBound(sourc)
 sh2.Range(dest(i)).Value = sh1.Range(sourc(i) & lign).Value
Next

' ? = sh1.Range("M" & lign + 1).Value    ?
' cette colonne me sert en suivi interne et n'est ni renseignée dur demande inter ni sur demande clôturée; donc "M" non nécessaire pour cette macro
' ? = sh1.Range("O" & lign + 1).Value    ?
' cette colonne me sert en suivi interne et n'est ni renseignée dur demande inter ni sur demande clôturée; donc "M" non nécessaire pour cette macro

' en revanche, je ne sais pas comment faire pour récupérer les cases "C","D" et "E" qui font maintenant apparaître une icône via MFC, et impactées depuis la "demande d'intervention" et reportées automatiquement dans "demandes reçues" via la fonction que vous avez inclus dans le module 1 (que j'ai modifié pour icône)
End Sub

Merci encore pour votre grande aide et précieux conseils et apports de connaissances en VBA

re...

à quel adresse de destination doivent être associé les cases des colonnes "C,D & E" ?

Bonjour SabV

Les cases des colonnes que vous demandez sont associées comme suit:

  • Valeur de la case , colonne "C" de sheet"Demandes Reçues", destination en "C24" de sheet "Demande d'Intervention Clôturée" (ou D.I. Clôturée)
  • Valeur de la case , colonne "D" de sheet"Demandes Reçues", destination en "C26" de sheet "Demande d'Intervention Clôturée" (ou D.I. Clôturée)
  • Valeur de la case , colonne "E" de sheet"Demandes Reçues", destination en "G26" de sheet "Demande d'Intervention Clôturée" (ou D.I. Clôturée)

Merci

voici pour un test avec les valeur de C D et E

Sub Clôturer()
Dim sh1 As Worksheet, sh2 As Worksheet, lig As Long, sourc, dest, i As Long
Set sh1 = Sheets("Demandes reçues")
Set sh2 = Sheets("Demande clôturée")

'test
lign = 25

sourc = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "N", "P", "T")
dest = Array("B47", "C47", "C24", "C26", "G26", "D8", "C16", "D18", "C20", "D22", "D12", "C33", "C16", "C10", "B36")

For i = LBound(sourc) To UBound(sourc)
 sh2.Range(dest(i)).Value = sh1.Range(sourc(i) & lign).Value
Next

End Sub

Bonjour SabV

J'avais déjà réalisé ce test...

Je me retrouve avec les valeurs des 3 cases précédemment citées avec des chiffres soit 3, 2 ou 1; puisque afin de les afficher sous sheet "demandes reçues" en tant qu'icônes, il a fallu que je leur attribue des chiffres en fonction des valeurs afin de ne faire afficher que des icônes...en MFC

Je n'ai pas trouvé de forme conditionelle pour leur attribuer un jeu d'icônes en fonction des valeurs d'un texte...malheureusement.

Du coup, dans la macro "soumettre" (pour rappel) j'ai ceci:

Sub Soumettre()

        Dim lign As Variant

        lign = Sheets("Demandes reçues").Range("A65000").End(xlUp).Row

        If Sheets("Demandes reçues").Range("A" & lign).Value <> "" Then
        Sheets("Demandes reçues").Range("A" & lign + 1).Value = Sheets("Demande d'Intervention").Range("B47").Value
        Sheets("Demandes reçues").Range("B" & lign + 1).Value = Sheets("Demande d'Intervention").Range("C47").Value
        Sheets("Demandes reçues").Range("F" & lign + 1).Value = Sheets("Demande d'Intervention").Range("D8").Value
        Sheets("Demandes reçues").Range("G" & lign + 1).Value = Sheets("Demande d'Intervention").Range("C16").Value
        Sheets("Demandes reçues").Range("H" & lign + 1).Value = Sheets("Demande d'Intervention").Range("D18").Value
        Sheets("Demandes reçues").Range("I" & lign + 1).Value = Sheets("Demande d'Intervention").Range("C20").Value
        Sheets("Demandes reçues").Range("J" & lign + 1).Value = Sheets("Demande d'Intervention").Range("D22").Value
        Sheets("Demandes reçues").Range("K" & lign + 1).Value = Sheets("Demande d'Intervention").Range("D12").Value
        Sheets("Demandes reçues").Range("L" & lign + 1).Value = Sheets("Demande d'Intervention").Range("C33").Value
        Sheets("Demandes reçues").Range("M" & lign + 1).Value = "Superviseur Travaux"
        Sheets("Demandes reçues").Range("N" & lign + 1).Value = Sheets("Demande d'Intervention").Range("C16").Value
        Sheets("Demandes reçues").Range("O" & lign + 1).Value = "En attente"
        Sheets("Demandes reçues").Range("P" & lign + 1).Value = Sheets("Demande d'Intervention").Range("C10").Value
        Sheets("Demandes reçues").Range("Q" & lign + 1).Value = Sheets("Demande d'Intervention").Range("H12").Value
        Sheets("Demandes reçues").Range("R" & lign + 1).Value = Sheets("Demande d'Intervention").Range("H14").Value
        Sheets("Demandes reçues").Range("S" & lign + 1).Value = Sheets("Demande d'Intervention").Range("D14").Value
        Sheets("Demandes reçues").Range("T" & lign + 1).Value = Sheets("Demande d'Intervention").Range("B36").Value
        End If

        With Sheets("Demande d'Intervention")

         Select Case .Range("C24").Value
          Case "Routine (U3)": Sheets("Demandes reçues").Range("C" & lign + 1) = 3
          Case "Urgence (U2)": Sheets("Demandes reçues").Range("C" & lign + 1) = 2
          Case "Urgence critique (U1)": Sheets("Demandes reçues").Range("C" & lign + 1) = 1
         End Select

         Select Case .Range("C26").Value
          Case "Non-dangereux": Sheets("Demandes reçues").Range("D" & lign + 1) = 3
          Case "Dangereux": Sheets("Demandes reçues").Range("D" & lign + 1) = 2
          Case "Très dangereux": Sheets("Demandes reçues").Range("D" & lign + 1) = 1
         End Select

         Select Case .Range("G26").Value
          Case "Non-bloquant": Sheets("Demandes reçues").Range("E" & lign + 1) = 3
          Case "Bloquant": Sheets("Demandes reçues").Range("E" & lign + 1) = 2
          Case "Très bloquant": Sheets("Demandes reçues").Range("E" & lign + 1) = 1
         End Select

        End With

        If Sheets("Demandes reçues").Range("A" & lign).Value <> "" Then
        Sheets("Demande d'Intervention").Range("D8").ClearContents
        Sheets("Demande d'Intervention").Range("C10:H10").ClearContents
        Sheets("Demande d'Intervention").Range("H12").ClearContents
        Sheets("Demande d'Intervention").Range("D14:E14").ClearContents
        Sheets("Demande d'Intervention").Range("H14").ClearContents
        Sheets("Demande d'Intervention").Range("D18:E18").ClearContents
        Sheets("Demande d'Intervention").Range("D22:H22").ClearContents
        Sheets("Demande d'Intervention").Range("C24:E24").ClearContents
        Sheets("Demande d'Intervention").Range("C26:D26").ClearContents
        Sheets("Demande d'Intervention").Range("G26:H26").ClearContents
        Sheets("Demande d'Intervention").Range("G28:H28").ClearContents
        Sheets("Demande d'Intervention").Range("C31:E31").ClearContents
        Sheets("Demande d'Intervention").Range("C33:E33").ClearContents
        Sheets("Demande d'Intervention").Range("B36:H41").ClearContents
        Sheets("Demande d'Intervention").Range("C47").Value = Sheets("Demandes reçues").Range("B" & lign + 1) + 1

        End If

End Sub

Vous constaterez qu'il faudrait bien pouvoir réadapter ce extrait de code ci-dessous, j'imagine (à l'inverse), car là il copie les valeurs de la "demande d'intervention" pour les mettre sous format chiffre dans "demandes reçues".....il faudrait faire une adaptation du genre afin de copier les valeurs "C","D" et "E" de la ligne de "demandes reçues vers les cases dédiées.

  With Sheets("Demande d'Intervention")

         Select Case .Range("C24").Value
          Case "Routine (U3)": Sheets("Demandes reçues").Range("C" & lign + 1) = 3
          Case "Urgence (U2)": Sheets("Demandes reçues").Range("C" & lign + 1) = 2
          Case "Urgence critique (U1)": Sheets("Demandes reçues").Range("C" & lign + 1) = 1
         End Select

         Select Case .Range("C26").Value
          Case "Non-dangereux": Sheets("Demandes reçues").Range("D" & lign + 1) = 3
          Case "Dangereux": Sheets("Demandes reçues").Range("D" & lign + 1) = 2
          Case "Très dangereux": Sheets("Demandes reçues").Range("D" & lign + 1) = 1
         End Select

         Select Case .Range("G26").Value
          Case "Non-bloquant": Sheets("Demandes reçues").Range("E" & lign + 1) = 3
          Case "Bloquant": Sheets("Demandes reçues").Range("E" & lign + 1) = 2
          Case "Très bloquant": Sheets("Demandes reçues").Range("E" & lign + 1) = 1
         End Select

        End With

Je vous remet le fichier avec.

Merci beaucoup et bonne journée

Bonjour SabV,

J'ai continué à réaliser des modifs de code afin de réaliser d'autres tests, malheureusement sans succès

Est-ce qu'afin de pouvoir faciliter la reprise d’éléments des 3 cases posant un souci particulier d'adaptation de code, savez-vous si il est possible de pouvoir mettre en place une MFC jeux d'icônes (icônes affichés uniquement) en fonction du texte reporté dans une case?

Si cela est possible, c'est sur que cela faciliterait le report automatique des cases, mais j'ai eu beau écumer plusieurs forums et pages internet, je n'ai rien trouvé à ce sujet.

En revanche, je suis toujours bloqué vis à vis de la condition que le macro devrait comporter puisque actuellement dans votre code proposé en test, cette macro réalise le boulot demandé avec une ligne identifiée "ligne 25" (pour test)., je n'ai pas non plus réussi à trouver quel code pourrait dire à la macro de faire le report des cases automatiquement d'une ligne, en n'en sélectionnant qu'une case au hasard...

En espérant que vous aurez + de chances de votre côté.

Merci d'avance pour vos retours et encore merci pour l'aide apportée.

re...

Votre dernier fichier joint ne comporte pas l'onglet "Demande clôturée",

Aussi je me m'interroge sur la façon de récupérer les données sur cet onglet ?

Peut-être vaudrait-il mieux lire les données sur l'onglet "Demande d'Intervention" et les transférer sur l'onglet "Demande clôturée"

Bonsoir SabV...

Désolé de ma réponse "tardive" à la votre...j'ai été commissionné pour une mission au pied levé donc parti en déplacement depuis jeudi soir et retour au bercail ce jour...

Je viens de prendre connaissance de votre mail...bon...effectivement mon dernier envoi fait état d'un "loupé" de fichier...mais il s'agissait bien de poursuivre le code d'auparavant, cité dans mon précédent mail...donc pas de changement là dessus, ne vous inquiétez pas

je vous remet le bon fichier cette fois...avec toutes mes excuses...

Merci bien

Bonjour SabV (et membres du forum)

Je refais un petit up suite à mon précédent mail.

J'ai continué à chercher la possibilité de trouver un code viable pour ma macro qui actuellement ne me permet pas de pouvoir faire le report automatique des infos/valeurs inscrit en totalité dans une ligne qui serait sélectionnée par n’importe quelle cellule de la ligne de mon tableau en question...sachant que cette macro servira a reporter les infos au fur et à mesure de n'importe quelle ligne en fonction de mon utilisation, mais toujours en respectant le fait que ce sera la cellule choisie qui déterminera la "ligne" à reporter.

J'ai pourtant continuer mes recherches sur internet et d'autres lectures sur forums...mais malheureusement sans pouvoir trouver quelque chose de similaire à adapter.

Je vous remercie d'avance pour vos aides précieuses apportées.

Bonne journée

Bonsoir SabV,

Une petite avancée dans le code ....petite , mais bien réconfortante car on touche au but

Le code fonctionne maintenant comme souhaité, afin de récupérer toutes les valeurs de la ligne de la cellule active de "Demandes reçues" afin de les reporter dans les cases respectives dévolues de "Demande clôturée":

Sub Clôturer()
Dim sh1 As Worksheet, sh2 As Worksheet, lign As Long, sourc, dest, i As Long
Set sh1 = Sheets("Demandes reçues")
Set sh2 = Sheets("Demande clôturée")

lign = ActiveCell.Row
sourc = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "N", "P", "Q", "R", "S", "T", "U", "W", "X", "Y")
dest = Array("B47", "C47", "C24", "C26", "G26", "D8", "C16", "D18", "C20", "D22", "D12", "C33", "C16", "C10", "H12", "H14", "D14", "B36", "F47", "E49", "B53", "G49")

For i = LBound(sourc) To UBound(sourc)
 sh2.Range(dest(i)).Value = sh1.Range(sourc(i) & lign).Value
Next

' en revanche, je ne sais toujours pas comment faire pour récupérer la vraie valeur initiale des cases "C","D" et "E" qui font maintenant apparaître une icône via MFC, et impactées depuis la "demande d'intervention" et reportées automatiquement dans "demandes reçues" sous forme de nombres (que j'ai modifié pour icône)

End Sub

Hormis pour mes cases, "C","D","E", pour lesquelles je suis embêté, car je me retrouve avec les chiffres 1,2 ou 3 en fonction du jeu d'icônes appliqué via la MFC sous"Demandes reçues"...puisque je n'ai pas trouvé comment mettre en place une MFC jeux d'icônes en fonction d'un texte....

Ou alors procéder à la modif du code ci-dessus avec un IF pour les cellules "C","D", "E"....à voir ce qui pourrait être le + simple et rapide à réaliser...

Je vais peaufiner le détail de certaines cases qui me posent des petits soucis de format (Horaires, etc...) mais rien de bien méchant...

En espérant que vous allez bien et au plaisir de vous lire prochainement.

Rechercher des sujets similaires à "envoi activesheet pdf via mail auto thunder"