XL 2016 besoin d'aide pour créer une macro vba

jerome3131

XLDnaute Nouveau
Bonjour,
j'aurais besoin d'aide pour une macro .
Je souhaiterai quand cliquant sur un bouton faire mes relances clients c'est a dire :
Pour chaque clients en jaune :
- leur envoyer un email de relance " Monsieur vous trouverez ci-joint le devis de régularisation N° ( réf du devis ) en attende de règlement "
- et l'accompagner en pièce jointe du mail ( si possible ) le devis en question celui est dans un dossier sur mon PC .

Dans l'attente je vous remercie pour votre aide
 

Pièces jointes

  • tableau.PNG
    tableau.PNG
    69.5 KB · Affichages: 42
Dernière édition:

jerome3131

XLDnaute Nouveau
Bonjour,
j'aurais besoin d'aide pour une macro .
Je souhaiterai quand cliquant sur un bouton faire mes relances clients c'est a dire :
Pour chaque clients en jaune :
- leur envoyer un email de relance " Monsieur vous trouverez ci-joint le devis de régularisation N° ( réf du devis ) en attende de règlement "
- et l'accompagner en pièce jointe du mail ( si possible ) le devis en question celui est dans un dossier sur mon PC .

Dans l'attente je vous remercie pour votre aide
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Jérôme,

tu as écrit : « s'il n'est pas possible d'ajouter une pièce jointe en utilisant les codes VBA »

si si, c'est possible de joindre un fichier qui contient des macros VBA (.xlsm ou .xls) ; mais
sa taille ne doit pas dépasser 1 Mo ; au besoin, compresse-le en fichier zip : dans une
fenêtre "Explorateur de fichiers", fais un clic droit sur ton fichier Excel, « Envoyer vers »,
« Dossier compressé » ; si ça dépasse 1 Mo même zippé, y'a pas moyen, car la charte
interdit de passer par un site de partage de fichiers.




à propos de ton image png, j'ai vu que les lignes jaunes de clients sont pour les clients
« EN ATTENTE ACCORD » (texte de la cellule A1) ; mais la couleur jaune, tu l'as mise toi-
même manuellement ? ou via une MFC ? si oui, quelle est la règle de MFC ?
(ta réponse aidera pour savoir comment détecter les lignes jaunes)

j'ai compris que tu veux faire tes relances client en cliquant sur le bouton qui est sur
la cellule H2 « RELANCE DEVIS » ; mais veux-tu faire une relance devis pour tous
les clients jaunes d'un coup ? (donc "CLIENT 1" ; "CLIENT 2" ; "CLIENT 3") ; ou pour un seul
client ? (celui qui est sélectionné avant de lancer la macro) ; exemple : pour relancer "CLIENT 2", tu
sélectionnes d'abord A4 (ou une des cellules de A4:G4), puis tu cliques sur ton bouton.


bien sûr, pour une ligne jaune donnée, la macro ne fera rien si y'a pas de nom de
client en colonne A, ni d'email en colonne B ; idem s'il manque un n° de devis en
colonne D ; peut-être faudrait-il aussi, obligatoirement, un montant en E ?


soan
 
Dernière édition:

jerome3131

XLDnaute Nouveau
Bonjour Jérôme,

tu as écrit : « s'il n'est pas possible d'ajouter une pièce jointe en utilisant les codes VBA »

si si, c'est possible de joindre un fichier qui contient des macros VBA (.xlsm ou .xls) ; mais
sa taille ne doit pas dépasser 1 Mo ; au besoin, compresse-le en fichier zip : dans une
fenêtre "Explorateur de fichiers", fais un clic droit sur ton fichier Excel, « Envoyer vers »,
« Dossier compressé » ; si ça dépasse 1 Mo même zippé, y'a pas moyen, car la charte
interdit de passer par un site de partage de fichiers.




à propos de ton image png, j'ai vu que les lignes jaune de clients sont pour les clients
« EN ATTENTE ACCORD » (texte de la cellule A1) ; mais la couleur jaune, tu l'as mise toi-
même manuellement ? ou via une MFC ? si oui, quelle est la règle de MFC ?
(ta réponse aidera pour savoir comment détecter les lignes jaunes)

j'ai compris que tu veux faire tes relances client en cliquant sur le bouton qui est sur
la cellule H2 « RELANCE DEVIS » ; mais veux-tu faire une relance devis pour tous
les clients jaunes d'un coup ? (donc "CLIENT 1" ; "CLIENT 2" ; "CLIENT 3") ; ou pour un seul
client ? (celui qui est sélectionné avant de lancer la macro) ; exemple : pour relancer "CLIENT 2", tu
sélectionnes d'abord A4 (ou une des cellules de A4:G4), puis tu cliques sur ton bouton.


bien sûr, pour une ligne jaune donnée, la macro ne fera rien si y'a pas de nom de
client en colonne A, ni d'email en colonne B ; idem s'il manque un n° de devis en
colonne D ; peut-être faudrait-il aussi, obligatoirement, un montant en E ?


soan
Bonjour Soan , et merci pour ton aide . Oui j'aimerai faire mes relances pour tous mes client en même temps , bien évidement si il manque des élément sur la ligne en jaune par de mail a envoyer
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir Jérôme,

désolé pour le retard de ma réponse. :oops:

je pensais que tu allais joindre un fichier, mais tu ne l'as pas fait. :confused:
j'aurais pu voir si tu as utilisé une MFC pour mettre le fond jaune ;
dans mon fichier joint, j'ai mis le fond jaune manuellement, sans
utiliser une règle de MFC (Mise en Forme Conditionnelle).

c'est juste pour la structure de base, car je ne connais pas le VBA

d'Outlook ; il faudra qu'un autre intervenant t'aide à compléter
mon code VBA (moi, je ne pourrai pas t'aider plus là-dessus).

fais Ctrl e ➯ ça affiche toutes les infos de chaque client sur fond jaune
(sauf les « Observations » et les « Pièces ») ; le client sur fond vert n'est pas
affiché ; un client jaune ne sera pas affiché s'il manque une des infos
nécessaires pour établir le devis.


VB:
Sub Essai()
  Dim dlig&, lig&: dlig = Cells(Rows.Count, 1).End(3).Row: If lig = 2 Then Exit Sub
  Dim Nom$, Mail$, DateCde As Range, NumDev$, MntDev As Currency
  For lig = 3 To dlig
    With Cells(lig, 1)
      Nom = .Value
      If Nom <> "" And .Interior.Color = 65535 Then 'client / fond jaune seulement
        MntDev = Val(Replace$(.Offset(, 4), ",", ".")) 'montant devis
        If MntDev <> 0 Then
          Set DateCde = .Offset(, 2) 'date commande
          If Not IsEmpty(DateCde) Then 'ligne client ignorée si cellule date vide
            If IsDate(.Offset(, 2)) Then 'ligne client ignorée si date non valide
              Mail = .Offset(, 1): NumDev = .Offset(, 3) 'email client & n° devis
              If Mail <> "" And NumDev <> "" Then 'ok si y'a un mail et un n° devis
                'ici, remplacer MsgBox par code VBA pour l'envoi d'un mail + en PJ
                'devis du dossier PC ; ça sera fait que pour les clients en jaune,
                'dont les infos adéquates ont été indiquées.
                'le code VBA pourra bien sûr utiliser tous les éléments du MsgBox :
                'Nom ; Mail ; DateCde ; NumDev ; MntDev.
                MsgBox Nom & "   " & Mail & "   " & DateCde & "   " & NumDev _
                  & "  " & Format(MntDev, "# ##0.00 €")
              End If
            End If
          End If
        End If
      End If
    End With
  Next lig
End Sub

soan
 

Pièces jointes

  • Exo jerome3131.xlsm
    18.5 KB · Affichages: 5

soan

XLDnaute Barbatruc
Inactif
@Jérôme

lis d'abord mon post précédent.

je te propose aussi cette 2ème version, avec une règle de MFC.

au départ, toutes les lignes ont un fond jaune, et j'ai ajouté une colonne
« ACCORD » qui est vide : aucun client n'a encore accepté de devis.

fais Ctrl e ➯ ça affiche tous les clients, donc de "CLIENT 1" à "CLIENT 4"

puis le client 4 accepte le devis de 5 837,24 € ; donc en F6, saisis « x »
➯ la ligne devient verte : fond vert des colonnes A à H ; j'ai aussi mis
du blanc pour la police, car texte blanc / fond vert se voit mieux que
texte noir / fond vert.

fais Ctrl e ➯ ça affiche tous les clients pour lesquels la cellule F est vide,
donc tous les clients sur fond jaune "CLIENT 1" à "CLIENT 3" ; et pas le
client sur fond vert "CLIENT 4" puisque tu as mis « x » en F6.




dans le code VBA, il y a une seule différence avec le précédent :

j'ai remplacé cette ligne :

VB:
If Nom <> "" And .Interior.Color = 65535 Then 'client / fond jaune seulement
par cette ligne :
VB:
If Nom <> "" And IsEmpty(.Offset(, 5)) Then 'client qui a donné son accord

ainsi, tu peux voir que je ne teste plus si la couleur de remplissage
est jaune : je teste si c'est vide en colonne F.


soan
 

Pièces jointes

  • Exo jerome3131 v2.xlsm
    18.6 KB · Affichages: 8

soan

XLDnaute Barbatruc
Inactif
@Jérôme

suite de l'exemple précédent :

le client 2 accepte le devis de 3 120,75 € ; donc en F4, saisis « x »
➯ ligne verte, des colonnes A à H : texte blanc / fond vert

fais Ctrl e ➯ ça affiche que les clients qui n'ont pas encore
donné leur accord
, donc : "CLIENT 1" et "CLIENT 3"

perso, j'préfère la version 2 avec MFC, mais choisis quand même
celle que toi tu préfères réellement : c'est toi l'utilisateur final.


soan
 

jerome3131

XLDnaute Nouveau
@Jérôme

suite de l'exemple précédent :

le client 2 accepte le devis de 3 120,75 € ; donc en F4, saisis « x »
➯ ligne verte, des colonnes A à H : texte blanc / fond vert

fais Ctrl e ➯ ça affiche que les clients qui n'ont pas encore
donné leur accord
, donc : "CLIENT 1" et "CLIENT 3"

perso, j'préfère la version 2 avec MFC, mais choisis quand même
celle que toi tu préfères réellement : c'est toi l'utilisateur final.


soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Jérôme,

tu as écrit : « j'ai opté pour la Version1 »

ok, c'est donc le fichier de mon post #6.




tu as écrit : « par contre aucun email n'a été envoyé »

oui, c'est normal, car j'ai bien précisé qu'il s'agit uniquement
de la structure de base ; comme je ne connais pas le VBA
Outlook, je laisse la suite à un autre intervenant pour qu'il
complète mon code VBA avec les instructions d'envoi d'un
mail : j'ai bien précisé où dans les commentaires de ma
sub Essai().

rappel : y'avait aussi l'envoi d'un devis en PJ.

(intervenant suivant, SVP ! 😄)


soan
 

jerome3131

XLDnaute Nouveau
Merci beaucoup Soan pour ton aide :) , je te souhaite une bonne semaine .
Cordialement Jérôme


J'ai trouvé ceci pour l'envoie email :
Set A = olApp.CreateItem(olMailItem)
With A
.Subject = "RELANCE DEVIS " + C.Offset(, 4).Value
.Recipients.Add C.Offset(, 3).Value
.Body = "Bonjour,"
.Body = .Body & "Vous trouverez ci-joint notre devis de régularisation ." & vbCrLf
.Body = .Body & " Cordialement jerome" & vbCrLf
.Display
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 892
Membres
101 831
dernier inscrit
gillec