Amélioration d'une macro & creation d'une macro d'envoi par mail

Fermé
hd49 Messages postés 22 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 26 juillet 2014 - 10 oct. 2013 à 19:32
hd49 Messages postés 22 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 26 juillet 2014 - 12 oct. 2013 à 14:08
Bonjour,

Je débute en macro et j'ai besoin de votre aide sur le fichier suivant :
https://www.cjoint.com/?0JkmhrymRKl

J'ai réussi la 1ere étape c'est à dire scinder l'onglet "base" dans plusieurs onglets (1 par client). Pour cela, j'ai utilisé le code suivant :


Sub Pref()
Dim cell As Range

Application.ScreenUpdating = False
'en supposant que la feuille 'base de données' s'appelle Base
With Sheets("Base")
'extraction des valeurs uniques de la colonne des noms
'(=noms des clients)
.Range("AA1:AA2").ClearContents
.Columns("A:A").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("AA1:AA2"), _
CopyToRange:=.Columns("AB"), Unique:=True

'traitement de chaque client (boucle sur la liste de la colonne AB)
For Each cell In Range("AB2:AB" & Cells(2, "AB").End(xlDown).Row)
'ajout d'une feuille au nom du client
Sheets.Add.Name = cell.Value
'zone critères sur feuille Base
.Range("AA1").Value = .Range("A1").Value
.Range("AA2").Value = cell.Value
'tri sur la base de données
.Columns("A:J").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("AA1:AA2"), _
CopyToRange:=ActiveSheet.Columns("A:J"), Unique:=False
Next
'nettoyage de la feuille Base
.Columns("AA:AB").Clear
.Activate
End With
End Sub


Je voudrais faire plusieurs actions après cela :
1/ Ajouter le total de la colonne G, H et J sur la dernière ligne dans chaque onglet (comme dans mon onglet « Base »)
2/ Faire des colonnes de la même taille que mon onglet « Base » dans tous les onglets
3/ Faire une autre macro pour envoyer automatiquement chaque onglet à des destinataires différents et mettre un autre destinataire en « cc... ». Idéalement, il faudrait aussi que l'objet de mon mail change chaque mois et il faudrait aussi que j'ajoute un texte dans le corps du mail.

Merci de votre aide par avance.

A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 757
11 oct. 2013 à 08:52
Bonjour,

Pour répondre à tes points 1 et 2, je te suggère, au lieu d'ajouter une feuille :
Sheets.Add.Name = cell.Value
, de copier ta feuille "base"
Sheets("base").Copy
. Ensuite, tu fais ton filtre, sur place, dans ta nouvelle feuille...

Pour ta question 3, voici un exemple de code à adapter :
https://www.commentcamarche.net/faq/36411-vb6-vba-envoi-mail-avec-l-objet-cdo
0
hd49 Messages postés 22 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 26 juillet 2014
11 oct. 2013 à 13:14
Pijaku,
Je te remercie de ta proposition pour les points 1 et 2 mais ce n'est pas ce que je veux. En effet, j'aimerais que mes onglets soient prêts à être envoyé donc je ne veux pas les retoucher... Je voudrais "automatiser" l'ajout de la ligne "TOTAL" (présente dans l'onglet "Base") sur les onglets de chaque "client".
Est ce que quelqu'un d'autre a une idée ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 757
11 oct. 2013 à 13:20
En fait, toi, tu filtres ta feuille "Base" et après tu créés ta nouvelle feuille.
Je te proposais simplement l'inverse....
Mais bon, quelqu'un d'autre aura peut être une idée.
0
hd49 Messages postés 22 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 26 juillet 2014
12 oct. 2013 à 14:08
Quelqu'un peut-il m'aider ?
0