[Catégorie modifiée .Net -> VBA] MACRO EXTRAIRE DANS UN FICHIER PUIS ENVOI PAR M

cs_VEROLYDE Messages postés 1 Date d'inscription vendredi 27 août 2010 Statut Membre Dernière intervention 16 mai 2011 - 16 mai 2011 à 15:42
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 16 mai 2011 à 18:46
Bjr,

J'ai créé une macro pour extraire dans un fichier excel, dans la colonne 1 "EC" puis en colonne 7 "MARTIN M", puis je copie cette feuille active et la sauvegarde dans un endroit précis, puis je l'envoie par mail à la MARTIN M.Elle marche trés bien.

Mon pb c'est que je souhaiterai reproduire cette macro à la suite avec une liste de plusieurs personnes. Comment faire pour que cette macro continue .... avec ALVES, puis DULOS... jusqu'à la fin.

Voici la macro :
Sub EXTRAIREC()

Selection.AutoFilter Field:=1, Criteria1:="EC"
Selection.AutoFilter Field:=7, Criteria1:="MARTIN M"

' Copie de la feuille active

ActiveSheet.Copy
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

'Sauvegarde la copie

ActiveSheet.SaveAs Filename:="G:\Direction Région \RECLAMATIONS\- REPORTING\ENVOI RECL TOUS LES 15 J\ALLAIRE\RECL MAJ" & Format(Date, "ddmmyy")
'& " " & ActiveSheet.Name

'Envoi Mail

Dim dest As String
dest = "MARTIN.M@xxx.net"
ActiveWorkbook.SendMail Recipients:=dest, Subject:="Reporting des réclamations en cours", ReturnReceipt:=True
ActiveSheet.Range("A1:B5").Select ' la plage de cellules à envoyer



Merci de votre aide !

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 mai 2011 à 18:46
Salut

Il te faut créer une boucle de recherche.
Tu boucles depuis le premier jusqu'à la dernière ligne. Lorsque tu trouves un nouveau nom (*), tu lances ta macro en lui fournissant le nom.
(*) Il faudra donc mémoriser le dernier nom rencontré afin de pouvoir le comparer au suivant.

Pour transmettre une variable, il te suffit de modifier sa déclaration :
Sub EXTRAIREC(ByRef myCriteria As String)
puis d'utiliser cette variable dans ton programme.
Selection.AutoFilter Field:= 7, Criteria1:= myCriteria

Pour la boucle, c'est de celle qu'on trouve dans n'importe quelle bonne source que tu auras surement lue, agrémenté de ton test :
Dim oRange As Range
Dim sLastName As String
For Each oRange In Range("A1:A10000")
    If oRange.Value  = "" Then Exit For
    If oRange.Value <> sLastName Then
        sLastName = oRange.Value
        Call EXTRAIREC(sLastName)
    End If
Next oRange

PS : Le filtrtage ne change pas l'ordre des lignes et ne fait que rendre invisible les lignes inutiles (important sinon la boucle serait désorganisée).

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous