Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Calvus

XLDnaute Barbatruc
Bonsoir à tous,

Après diverses recherches et 3 boites d'aspirine, je fais appel à vos compétences.

Le projet me paraît un peu ambitieux, et complètement hors de portée me concernant.
J'ai lu diverses choses, mais je n'ai aucune idée de la faisabilité ni de l'adaptabilité.

Je vous expose mon souhait.

J'aimerais récolter des informations dans un classeur, mensuellement, (voire peut-être 2 classeurs) concernant plusieurs personnes, les générer dans une nouvelle feuille d'un nouveau classeur, puis envoyer les dites informations à différents destinataires via Outlook.

Plusieurs contraintes : (pas forcément dans l'ordre)

1) Que le tout puisse se faire de façon automatique, sans intervention de ma part, par exemple le 2 du mois pour le mois précédent.

2) Récupérer les informations sur un classeur ressemblant à celui que j'ai joint, contenant un onglet par mois.
Il s'agit de sommes dont le total est calculé en cellules X32:X37
1ère difficulté, les champs correspondants ne sont pas toujours renseignés. Ils le sont dans ce cas par un coloriage de cellule ( plusieurs couleurs pourraient correspondre à différents montants).
Il faut donc prendre en compte le total des sommes renseignées dans chaque champ + les mises en forme.
Si ce point est trop complexe, je pourrai alors renseigner les montants ailleurs, sachant que j'aimerais tout de même pouvoir l'éviter.
Tous mes onglets sont structurés de la même manière, mis à part que j'ai parfois besoin d'insérer des lignes supplémentaires.

3) Une fois ceci fait, générer une nouvelle feuille (fichier exemple 2) où j'aurais une bdd pour le mois échu, avec les champs "personne", "genre", "montant" ( et peut être d'autres choses à venir)

4) Enfin envoyer un mail à chaque personne, contenant ses informations propres, ainsi qu'une copie à mon humble personne.

Je joins donc 2 classeurs, le 1er étant similaire à l'original, le second étant celui que je souhaiterais être généré, et enfin une image du mail tel qu'il devrait être. (J'ai mis en rouge les données modifiables par les valeurs Excel, et en classeur 2 le genre, afin de pouvoir choisir entre un texte masculin et un texte féminin)

J'ai essayé d'être le plus clair possible. Néanmoins, faites moi savoir si vous avez besoin d'explications davantage détaillées.
Si vous avez lu jusqu'ici, c'est que vous êtes sacrément motivés ! :)

Merci à vous tous.
 

Pièces jointes

  • Exemple Outllok 1.xlsx
    30.5 KB · Affichages: 47
  • Exemple Outllok 2.xlsx
    9.5 KB · Affichages: 38
  • Exemple Outlook.jpg
    Exemple Outlook.jpg
    42.5 KB · Affichages: 73
Dernière édition:

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bonjour,

Personne pour m'aider ? Ou trop compliqué ?

J'ajoute des versions xls pour mes fichiers.

Merci
 

Pièces jointes

  • Exemple Outllok 1.xls
    181.5 KB · Affichages: 42
  • Exemple Outllok 2.xls
    39.5 KB · Affichages: 39
Dernière édition:

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bon......

Devant l'affluence incroyable que suscite mon fil, j'ai commencé tout seul...

Alors, j'ai déjà réussi à ouvrir le second classeur à partir du 1er, dans le cas où la date d'échéance n"est pas encore atteinte.
Pour savoir comment je pourrais gérer les différents mois, j'ai arrêté de chercher au bout de 3 heures.

Ensuite, second problème : j'arrive ( par la macro test) à copier une plage de cellules du classeur 1, ouvrir donc le 2, et à le refermer, mais la copie ne se fait pas. Quid !!
J'ai fait une macro identique qui fonctionne sur la même feuille (macro T). Je ne comprends pas où ça coince.
Est-ce un problème de déclaration ? J'ai enregistré une macro qui elle fonctionne, avec quasiment le même code.

Si quelqu'un pouvait donc déjà regarder ces premiers problèmes, ce serait extra. :)

Merci
 

Pièces jointes

  • Exemple Outlook 1 V1.xls
    206.5 KB · Affichages: 35
  • Exemple Outlook 2.xls
    42 KB · Affichages: 36
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bonsoir.
scuses: vu Outllook dans le titre alors comme je n'y connais rien au pilotage de cette bête…
À part ça votre Sub test de Module1 ouvre un classeur nommé "Exemple Outlook 2.xls" dans son répertoire.
Celui ci devient donc le classeur actif. C'est donc SA PROPRE Sheets("nov").[w32:x37] que vous copiez !
Or c'est vide à cet endroit. l'Activate ne fait donc rien, passons. Vous le collez en A10, vide également. C'est sûr que ça ne fait pas grand chose !
Essayez plutôt, le 2 étant actif :
VB:
ThisWorkbook.Worksheets("nov").[w32:x37].Copy _
   Destination:=ActiveWorkbook.Worksheets("nov").[a10]
Cordialement.
 

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bonsoir Bernard :)

Super, merci. Ca fonctionne maintenant. J'ai dû par contre supprimer une ligne
Code:
Workbooks("Exemple Outlook 1.xls").Activate

En fait le classeur se réactive automatiquement, c'est bien ça, puisque l'autre s'est refermé ?

Bon, sinon, j'ai encore compris quelque chose ce soir. Dur à la comprenette, mais bon ! ça va tout de même mieux depuis les Private et Public Sub. :)

En revanche, dites moi s'il vous plaît, pensez vous que je sois sur le bon chemin pour la création de ce code ? Dans la chronologie je veux dire. Ou faut il envisager les choses autrement ?

En tout cas merci.

Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

En fait le classeur se réactive automatiquement, c'est bien ça, puisque l'autre s'est refermé ?
Oui.
pensez vous que je sois sur le bon chemin pour la création de ce code ? Dans la chronologie je veux dire.
heu… il n'y a pas grand chose, que faut-il que j'examine exactement ?
À +
 

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Re,

pensez vous que je sois sur le bon chemin pour la création de ce code ? Dans la chronologie je veux dire.
heu… il n'y a pas grand chose, que faut-il que j'examine exactement ?
À +

Il n'y a en effet pas grand chose car je bute depuis le départ. 48H sans solutions à essayer de comprendre. C'est pour ça que j'ai demandé de l'aide, mais comme vous avez pu le voir, on ne s'est pas bousculé au portillon jusqu'à votre arrivée. :)

Ce que je voulais dire, c'est par rapport au projet énoncé, suis-je sur la bonne voie en cherchant à faire d'abord copier mes éléments d'un classeur à l'autre, puis essayer d'organiser les cellules dans le fichier de destination, ensuite créer de nouvelles feuilles pour les mois suivants, etc..; Il y en a tellement que je ne sais pas vraiment par où commencer, ni surtout comment.
Par exemple, je bute maintenant sur le fait que la copie précédente copie des formules, et je ne voudrais récupérer que les valeurs. quel chantier. Edit : Ce dernier point vient d'être résolu.

Mais je vais essayer d'avancer à petits pas, et si vous pouviez jeter un coup d'oeil de temps en temps, je posterai au fur et à mesure les points où je serai bloqué. Un des problèmes est que je passe un temps fou à essayer de décoder les exemples ainsi que l'aide. Beaucoup de notions à intégrer en peu de temps.

Merci Bernard
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Ma fois, comme ça, ça m'a l'air d'un projet abondamment pensé, que sa réalisation amènera … à revoir complètement comme d'hab. !
Juste un point qui m'intrigue légèrement sans plus: pour la mise en forme de ce qui est à expédier (ce que je ne sais pas faire) de nouveaux classeurs sont ils indispensable ? Celui qui contiendra la programmation ne pourrait-il prêter sa réserve de nouvelles feuilles à cet effet ? Mais c'est juste une question qui me vient à l'esprit.
Cordialement
 

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

.PasteSpecial Paste:=xlPasteValues

Je pensais avoir à faire à Bernard, non pas à Modeste ! :)

Celui qui contiendra la programmation ne pourrait-il prêter sa réserve de nouvelles feuilles à cet effet ?

Oui, pourquoi pas... mais les deux classeurs ont des vocations assez différentes finalement, et puis j'avais peur de me retrouver avec un nombre trop important de feuilles. Le 1er en est déjà pas mal pourvu. Mais si c'est une contrainte trop grande, je garderai alors la solution d'un classeur unique.

Par exemple, je bute maintenant sur le fait que la copie précédente copie des formules, et je ne voudrais récupérer que les valeurs. quel chantier. Edit : Ce dernier point vient d'être résolu.

Je me suis trop vite avancé. Ca marche avec ma petite macro dans le classeur, mais pas quand je change de classeur.
J'ai utilisé Destination:=ActiveWorkbook.Worksheets("nov").[a10]PasteSpecial xlPasteValues mais il semble yavoir un conflit avec Destination.

Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Pour ne copier vraiment que les valeurs on peut tout simplement affecter Value de la plage source à Value de la plage cible.
Par exemple comme ça:
VB:
With ThisWorkbook.Worksheets("nov").[w32:x37]
   ActiveWorkbook.Worksheets("nov").[a10].Resize(.Rows.Count, .Columns.Count).Value = .Value
   End With
Remarque: l'expression ThisWorkbook.Worksheets("nov") peut être avantageusement remplacé par le CodeName de la feuille. Ça évite sa recherche répétée dans la collection Worksheets du classeur puisque c'est un objet Worksheet directement connu de VBA. Pour un autre classeur que celui qui porte le projet VBA, on peut toujours affecter l'expression à une variable déclarée As Worksheet qu'on utilisera ensuite à la place de l'expression dès lors qu'on en aura besoin plus d'une fois.
Cordialement.
 

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Remarque: l'expression ThisWorkbook.Worksheets("nov") peut être avantageusement remplacé par le CodeName de la feuille. Ça évite sa recherche répétée dans la collection Worksheets du classeur puisque c'est un objet Worksheet directement connu de VBA.

Euh...pardon de mon ignorance, mais c'est quoi dans ce cas là le CodeName ? Est-ce à dire que j'écrirais :
Worksheets(Nov).[w32:x37] ?

Pour un autre classeur que celui qui porte le projet VBA, on peut toujours affecter l'expression à une variable déclarée As Worksheet qu'on utilisera ensuite à la place de l'expression dès lors qu'on en aura besoin plus d'une fois.

Comment faire ?
Dim Nov As Worksheet ?

Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bonjour.
c'est quoi dans ce cas là le CodeName ?
Je n'ai plus le classeur sous les yeux, je crois me souvenir que c'était Feuil26. Moi je les renomme toujours dans la fenêtre de propriété. C'est le nom qui figure dans la rubrique Microsoft Excel Objets du projet VBA, à gauche du nom Excel de la feuille rappelé entre parenthèses.
Non, Il n'y a plus à utiliser Worksheet(…: le nom de l'objet Worksheet se suffit à lui même comme expression Worksheet.
C'est une règle générale: une fois convenablement initialisé par un Set toute variable objet de type bien défini se suffit à elle même comme expression de ce type. Les CodeNames, eux ne sont pas des variables mais plutôt des constantes définies en permanence dans le projet, et n'ont pas à être initialisées par des Set. C'est valable notamment aussi pour les objets Workbook et Range mais d'une façon générale pour tous les types explicites d'objets.
Personnellement j'ai tendance à mettre un F en tête des noms de variables Worksheet.
À +
 

Staple1600

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bonsoir à tous

Calvus:
Premier réflexe dans Excel ou VBE: APPUYER SUR LA TOUCHE F1!
Ici par exemple, cela t'aurai permis de lire cec:
CodeName, propriété
Cette propriété renvoie le nom de code de l'objet.
Type de données String en lecture seule.
Remarque
La valeur qui apparaît dans la cellule affichée à droite de (Nom) dans la fenêtre Propriétés correspond au nom de code de l'objet sélectionné. Au moment de la création, vous pouvez changer le nom de code d'un objet en modifiant cette valeur.
Il est toutefois impossible de modifier cette propriété par programmation au moment de l'exécution.

Le nom de code d'un objet peut être utilisé à la place d'une expression qui renvoie l'objet.
Par exemple, si le nom de code de la feuille de calcul 1 est « Sheet1 », les expressions suivantes sont identiques :
Worksheets(1).Range("a1")
Sheet1.Range("a1")

Une feuille peut avoir un nom différent du nom de code.
Lorsque vous créez une feuille, le nom de feuille et le nom de code sont identiques, mais la modification du nom de feuille n'est pas répercutée sur le nom de code, de même que la modification du nom de code (à l'aide de la fenêtre Propriétés de Visual Basic Editor) n'est pas répercutée sur le nom de feuille.
Exemple
Cet exemple montre comment afficher le nom de code de la feuille de calcul 1.
MsgBox Worksheets(1).CodeName
 

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bonsoir,

Staple, je t'assure, j'ai ce réflexe, et ce depuis longtemps car c'est devenu un automatisme lorsque j'utilise mes formules. Cependant,tu peux me croire, ou t'en souvenir peut être, que c'est un vrai charabia quand on débute, comme c'est le cas pour moi avec VBA. J'avais bien lu cette aide, avant la réponse de Dranreb, et c'est pourtant le message de ce dernier qui m'a enfin éclairé.
L'aide nous perd parfois davantage qu'elle ne nous renseigne, tellement il y a de références et de liens.

Mais tu as raison, je saurai faire plus attention la prochaine fois.

Cordialement
 

Calvus

XLDnaute Barbatruc
Re : Envoi multiple Outllook après synthèse, fichier Spécial Barbatruc VBAiste !

Bonjour,

Voici, j'ai donc réussi à transformer une formule Sommeprod en code VBA.
Code:
[AA32] = Application.Evaluate("IF(W32<>"""",SUMPRODUCT(IF(ISNUMBER(B6:Q73),(A6:A73=W32)*(B6:Q73)))+SUMPRODUCT(IF(ISNUMBER(R6:X26),(A6:A26=W32)*(R6:X26))))")
Il y a un bouton associé, nommé Sommeprod en AA32.

Egalement une macro pour compter les cellules colorées, mais sur une ligne seulement, et faire l'addition avec la cellule W32.
Code:
Sub Appliquer_Dapres_Couleur_2() 'Code donné par Si... le 10.11.12
  Dim c As Range, n As Byte
  For Each c In Range("B8:X8")
    If c.Interior.Color = 2770250 Then
      n = n + 1
      [Z32] = [X32] + 50 * n 'ou [Z32] = [X32]*n + 50
    End If
  Next
End Sub
Merci Si et Staple.

Mais c'est largement insuffisant, et là je ne vois plus comment faire.

J'ai tenté un Sumproduct avec Interior.color, mais évidemment voué à l'échec.

Je vous joins le fichier si vous voulez jeter un coup d'oeil à l'avancement.
Je n'ai pas nettoyé le fichier, il y a plein de tests et je ne sais quoi encore.

Et je ne désespère pas. d'ailleurs, Staple, si tu lis ce message, sâche que j'aurai une surprise pour toi. :)
 

Pièces jointes

  • Exemple Outlook 1 V3.xls
    236.5 KB · Affichages: 56

Discussions similaires

Réponses
12
Affichages
301
Réponses
16
Affichages
667

Statistiques des forums

Discussions
312 166
Messages
2 085 899
Membres
103 024
dernier inscrit
rdge