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

Signaler
Messages postés
1
Date d'inscription
vendredi 27 août 2010
Statut
Membre
Dernière intervention
16 mai 2011
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)