Condition "SI" et pieces jointes pour mail

sebastien450

XLDnaute Occasionnel
Bonjours a tous et à toutes déja!
J'ai déja posté ici car je fait un projet.
J'explique un peut globalement afin que cela soit plus clair.
Je travaille dans une entreprise où on utilise pour la découpe et l'emboutissage des Outils. Il y a donc une usure de certaines pieces, que j'ai repertoriés et classé. Actuellement je connais donc le fréquentiel de changement des piéces et je sais quand je doit les changer.
Excel intervient là puisque aprés avoir changé les pièces je doit les commander. La maintenance remplis donc un tableau et suivant certain critére dans une case le parametre "commander" s'affiche si besoin.
Je précise que je suis sur Vista et Windows mail mais que dans l'entreprise certains sont avec Vista d'autre Windows 98, HP... et il en ai de meme pour les messageries!
Je souhaite donc envoyer un mail si "Commander" apparait; chose que j'ai réussi a faire , seulement 2 probleme se présente a moi:
Le premier, qui est aussi le plus important est la condition pour envoyer le mail, je n'arrive a l'appliquer que sur une ligne (I12) donc que doit-je modifier sur le code suivant pour quel s'applique sur I4:I9 et I12:I49.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
UserForm1.Show

' rep = InputBox("date")
' Range(Y28) = rep

Sheets("Commande Out XXX").Select
If Range("I12").Value = "" Then
Exit Sub
End If
MailAvecOEouWinMail1

Windows("Gestion Stock Ressorts.xls").Activate
ActiveWorkbook.Save
ActiveWindow.Close

End Sub

Voila pour le premier point, le second point, qui est moins important d'un point de vue réalisation est le suivant:
Quand j'envoie mon mail via la fonction ci desus, à la fermeture du fichier Excel, j'aurais bien aimer metre un lien vers le classeur Excel ( il s'agirait d'un fichier mis en réseau). Si cela est trop compliquer ( Systeme d'exploitation diférents, Messagerie différentes...) tant pis il ira lui meme chercher le fichier pour l'ouvrir!
Ci joint le code pour envoyer le mail:
Sub MailAvecOEouWinMail1()

Dim WshShell As Object
Dim Dest As String
Dim Sujt As String
Dim Msg As String
Dim MailProg As String
Dim Env As String, Pos As Integer

Set WshShell = CreateObject("WScript.Shell")
MailProg = "C:\Program Files\Windows Mail\WinMail.exe"
Set WshShell = Nothing
Pos = InStrRev(MailProg, "%")
If Pos > 0 Then
Env = Environ(Mid(MailProg, 2, Pos - 2))
MailProg = Mid(MailProg, Pos + 1)
End If

Dest = "sebastien_seb_5@msn.com"
Sujt = "Test d'envoi avec Excel"
Msg = "Bonjours il faudrait commander pieces dans dossier ci-joint"
Shell Env & MailProg & " /mailurl:mailto:" & Dest & "?subject=" & _
Sujt & "&Body=" & Msg
End
End Sub
 
T

THE CAT 2007

Guest
Re : Condition "SI" et pieces jointes pour mail

Bonjour,

ci dessous un exemple de syntaxe de UNION (que j'ai emprunté ...), qui pourrait peut être fonctionner pour I12 ? A adapter ....

Set r1 = Range(Cells(ligne, colonne + 2), Cells(ligne, colonne + 3))
Set r2 = Range(Cells(ligne, colonne + 5), Cells(ligne, colonne + 9))
Set multiRange = Union(r1, r2)
multiRange.Select

If Range("I12").Value = "" Then Exit Sub

If multiRange.Value = "" Then Exit Sub
 

sebastien450

XLDnaute Occasionnel
Re : Condition "SI" et pieces jointes pour mail

Je ne comprend pas trop les +2 et + 3.... Et comment faire intervenir la condition, je t'avoue etre limité en VBA et prendre tous les conseils disponibles.

Set r1 = Range(Cells(ligne, colonne + 2), Cells(ligne, colonne + 3))
 

sebastien450

XLDnaute Occasionnel
Re : Condition "SI" et pieces jointes pour mail

Il ne comprend pas ta référence:If multiRange.Value = "" Then Exit Sub
Je ne sais pas comment lui faire comprendre que si la valeur de multirange=0, ne rien faire et sinon metre 556 par exemple!
J'ai essayer une autre approche, mais je ne me vois pas rentrer ce code sur 50 celulles, je pense qu'il existe une fonction permetant d'apeller directement l'ensemble des cellules A1:A50!!!!
Sub Macro1()



If Cells(1, 1).Value = "" Then
Cells(2, 2) = 9
Exit Sub
End If
If Cells(1, 2).Value = "" Then
Cells(2, 2) = 9
End If
If Cells(1, 3).Value = "" Then
Cells(2, 2) = 9

End If

End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Condition "SI" et pieces jointes pour mail

Bonsoir



Une solution (peut être)

Code:
Sub test()
Dim c As Range
Range("I4:I9").Name = "zone1"
Range("I12:I49").Name = "zone2"
For Each c In Union([zone1], [zone2])
If IsEmpty(c) Then
MsgBox c.Address(0, 0) & " est vide" ' remplacer par Exit Sub
End If
Next
End Sub
 

sebastien450

XLDnaute Occasionnel
Re : Condition "SI" et pieces jointes pour mail

En effet ca a l'air pas mal! Seulement peut tu me dire comment faire pour que si c'est vide ne rien faire et si il y a marquer "commander" envoyer un mail ( où je met le nom de la macro a executer en gros!).
Merci d'avance.


Edit: Pour déclencher la condition il faut que toute les cases ne soit pas vider, or j'aimerais que dés que une est remplie cela applique la macro....
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Condition "SI" et pieces jointes pour mail

Bonjour



En reprenant ton code
(non testé, pas sur de la syntaxe )

Code:
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim c As Range
Dim vide As Boolean
UserForm1.Show
    With Sheets("Commande Out XXX")
        .Range("I4:I9").Name = "zone1"
        .Range("I12:I49").Name = "zone2"
            For Each c In Union([zone1], [zone2])
                If IsEmpty(c) Then vide = True: Exit Sub
            Next
    End With
If vide = True Then
MailAvecOEouWinMail1
End If
Windows("Gestion Stock Ressorts.xls").Activate
With ActiveWorkbook
    .Save
    .Close
End With
End Sub
 
Dernière édition:

sebastien450

XLDnaute Occasionnel
Re : Condition "SI" et pieces jointes pour mail

Je te redonne ton code ci-dessous légérement modifié pour un test sur un classeur vide:
Sub Macro1()
'
' Macro1 Macro

With Sheets("Feuil1")
.Range("A1:A3").Name = "zone1"
.Range("A5:A7").Name = "zone2"
For Each c In Union([zone1], [zone2])
If IsEmpty(c) Then vide = True: Exit Sub
Cells(2, 2) = "9"
Next
End With
If vide = True Then
End If
'
End Sub

Cela marche mais juste quand la cellule A1 n'est pas vide, la il m'affiche la valeur "9".
Si je modifie la celulle A3 sans toucher a la cellule A1, il ne me fait rien et ne m'affiche pas la valeur!

Si il existe une autre facon de proceder plus simple dans mon cas je suis prenneur.
Merci
 

Staple1600

XLDnaute Barbatruc
Re : Condition "SI" et pieces jointes pour mail

Re


Et comme cela

Code:
Sub test()
Dim i As Integer
Dim c As Range
With Sheets("Feuil1")
.Range("A1:A3").Name = "zone1"
.Range("A5:A7").Name = "zone2"
i = 0
For Each c In Union([zone1], [zone2])
If IsEmpty(c) = True Then
i = i + 1
ElseIf i > 0 Then
.Cells(2, 2) = "9"
End If
Next
End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Condition "SI" et pieces jointes pour mail

Re


Une autre façon plus "mieux"

Code:
Sub test_ii()
Dim nv As Integer
With Sheets("Feuil1")
.Range("A1:A3").Name = "zone1"
.Range("C5:C7").Name = "zone2"
nv = Application.CountA(Union([zone1], [zone2]))
If nv > 0 Then
.Cells(2, 2) = "9"
Else
Exit Sub
End If
End With
End Sub
 
Dernière édition:

sebastien450

XLDnaute Occasionnel
Re : Condition "SI" et pieces jointes pour mail

Désoler je n'avait pas vu ta derniere proposition!
Et bien oui ca marche niquel!
je t'avoue que je n'ai pas tout saisi a ton code nottament les :nv = Application.CountA
Mais bon l'important est bien que cela marche, je t'en remercie, je vais manger et aprés je vais l'appliquer a mon cas , ca devrait marche je te tient au courant.!
Merci.

EDIT: Je viens de faire le test ca marche nikel, un peut long à calculer tout cela mais bon avec toute mes formules et macro ce n'ai pas grave!
Dit moi par hasar tu ne saurais pas comment inserer un lien vers un fichier dans un mail à partir du code plus haut?
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
236

Statistiques des forums

Discussions
312 207
Messages
2 086 252
Membres
103 166
dernier inscrit
ZAHRAA