Comment récupérer les informations d'une cellule (son format) et les traiter

cigogne

XLDnaute Nouveau
Bonsoir à tous.

Voila j'ai un petit inventaire de pièce.
J'ai une colonne quantité. Pour chaque pièce, j'ai associé une mise en forme conditionnelle en fonction des délais de livraison de la consommation etc.

Par exemple :
Verre : mise en forme conditionnelle si 3>=quantite>2 alors couleur de la cellule orange ; si 2>=quantité alors couleur rouge

fourchette : mise en forme conditionnelle si 5>=quantite>3 alors couleur de la cellule orange ; si 3>=quantité alors couleur rouge (délai d'appro plus long donc faut prévoir ;) )

Je voudrais savoir comment faire pour récupérer l'information de la couleur interieure des cellules.
Voila ce que j'ai fait mais je suis un débutant dans vba ... :(

Le but etant d'envoyer un mail des que j'ai une cellule rouge ou orange

Code:
' Traduction mise en forme conditionnelle
Dim Cel As Range
Dim Quantite As String
Dim F As Worksheet
Dim verifie As String
Quantite = "I16:I100"
For Each Cel In F.Range(Quantite)

' des que la couleur interieure d'une cellule est .colorindex 45 ou 3 alors verifie = True
Select Case Cel.Value
Interior.ColorIndex = 45
Interior.ColorIndex = 3
verifie = True

' Boucle mise en forme conditionnelle
If verifie = True Then

    ' Envoi du mail
    Dim MailAd As String
    Dim Msg As String
    Dim Subj As String
    Dim URLto As String
    MailAd = Range("c6")
    Subj = "Commande artciles"
    Msg = "Attention : Pensez à commander les articles"
    URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg
    ActiveWorkbook.FollowHyperlink Address:=URLto

    ' Attente ouverture outlook
    Dim Début As Long, Fin As Long, Chrono As Long
    Début = Timer
    Fin = Début + 2
    Do Until Timer >= Fin
    DoEvents
    Loop
 
    ' Envoi du message
    SendKeys ("%s")
End If

' Fermeture et enregistrement du classeur
ActiveWorkbook.Save
Application.Quit

End Sub

Je vous remerci par avance de l'aide que vous pourrez m'apporter.

Cdlt.
Cigogne.

P.S je travaille sous Excel 2003 au cas où
 

jeanpierre

Nous a quitté
Repose en paix
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Re, bonsoir ftho,

ftho, peux-tu expliciter, car, là, je suis paumé sur : "Donc : Si B1 = "TOTO" ->> envoi du mail". Vrai que je ne connais pas tout.

Bonne soirée sous le vent, ici.

Jean-Pierre
 

ftho

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Bonsoir Jean Pierre,

Je voulais simplement dire par là que à mon avis, on ne peut pas exécuter une action sur base d'une MEFC mais on peut exécuter cette action sur base de la condition inclue dans la MEFC

Exemple de MEFC : si valeur de la cellule B1 est plus grande que 10 alors couleur de fond en jaune

On peut reprendre cette condition pour exécuter une action :
If Range("B1") > 10 then ....
 

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Re tout le monde,

A mon avis c'est tout à fait possible d'envoyer un mail par un MEFC SI et Seulement SI tu fait ta MEFC en macro.
En effet, si on passe par une MEFC par la fonction de base excel, seule une modification du format de la cellule est possible.

Le problème en est de même avec les formules. Il n'est pas possible, à ma connaissance, de récupérer le résultat d'une formule. Sauf si cette formule est faite par une macro. (Ce que j'ai fait dans mon cas)

Donc on peut savoir quelle couleur a été demandée pour une MEFC mais on ne sait pas récupérer l'état comme nous le précise ftho (si j'ai bien tout compris).

Si vous avez une autre soluce ;) ..

P.S. je me suis heurté à un petit désagrement :
En faisant cette macro et en la laissant dans l'état, à chaque fois il va envoyer un mail. Pour éviter cela j'ai affecté une valeur "1" à une cellule "cells(1, 26). Des que le mail est envoyé il donne 1 à la cellule. Quand on va ré-ouvrir le fichier, il va regardé si la cellule est à 1 et si c'est le cas il ferme sans envoie du mail.
Pour le reset j'ai mis un petit bouton "commande reçue" avec comme action envoyer "0" à la cellule "cells(1, 26)".
Au cas où ça pourrait aider quelqu'un

@+
 

sebastien450

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

J'ai déja rechercher mais je ne trouve rien qui correspond a ce que je veut! En effet il me faut envoyer un mail mais sous une condition et je ne sais pas comment définir cette condition! D'ailleurs lorsque cela marche il me met qu'il ne peut pas envoyer car il me met "erreur, type non défini par l'utilisateur".
De plus je n'arrive pas à creer mon compte sur Windows Mail car je ne sais pas quel type de serveur renseigner!
 
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Re,

Alors, regardes en haut des forums, la FAQ dans les pages de Michel XLD, les réponses doivent s'y trouver... Certes, un peu de lecture, car je ne sais plus la page... et ne peux te la donner....

Tu vas y arriver....
 

ftho

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Je n'ai jamais jonglé avec l'envoi de mail via VBA donc je ne peux pas dire ceci ou cela fonctionne +/- bien mais si ça peut te dépanner j'ai retrouvé un truc dans le fond d'un tiroir pour envoyer un mail via outlook
Code:
Sub SendMail_Outlook()

[COLOR="seagreen"]'Avant de lancer cette macro, Dans l'éditeur VBA: Faire Menu / Tools / Reference / Cocher "Microsoft Outlook Library"[/COLOR]

Dim Ol As New Outlook.Application
Dim Olmail As MailItem
Dim CurrFile As String

[COLOR="seagreen"]' pour ajouter une condition c'est ici
' If MaCondition Then[/COLOR]

Set Ol = New Outlook.Application
Set Olmail = Ol.CreateItem(olMailItem)
With Olmail
    .To = Range("B1").Value [COLOR="SeaGreen"]'<-- destinataire en B1[/COLOR]
    .Subject = Range("B2").Value [COLOR="seagreen"]'<-- sujet du mail en B2[/COLOR]
    .Body = Range("B3").Value [COLOR="seagreen"]'<-- texte du mail en B3[/COLOR]
    .Attachments.Add "c:\data\essai.doc" [COLOR="seagreen"]'<-- fichier joint éventuel[/COLOR]
    .Send '.Display
[COLOR="seagreen"]'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)[/COLOR]
End With

[COLOR="seagreen"]' End If[/COLOR]

End Sub

Si cela ne te convient pas je pense que le mieux est de créer une nouvelle discution.
 

ftho

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Oui d'autant plus que avec Vista Outlook n'existe plus. Et comme il s'agirais d'un fichier mis en réseau...

Et tu nous as dit où que tu avais Vista et que ton fichier est en réseau ?? Je dois peut être aussi deviner que tu veux un bouton triangulaire bleu sur ta 4ème feuille pour l'envoi du mail ?
Pour le fichier, qu'il soit sur C, D ou Z...cela ne change rien.
Vu que c'est toi qui a toute les cartes en main, tu devrais pouvoir faire une recherche bien ciblée, quand on carresse Google dans le sens du poil il peut être très coopératif ;)
 

sebastien450

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

L'ennui c'est que pour le moment il s'agit d'un fichier test que je fait avec Vista et donc je rencontre des problemes quand à l'envoi du mail car je n'y arrive pas avec Outlook! Mais mon fichier final sera en reseau dans l'entreprise et il y en a qui ont Vista d'autre non...
Je n'arrive pas pour l'envoi du mail meme en rentrant les diverses formules.
Je continue de chercher.
Merci
 

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Salut,

Je pense sebastien450, que tu devrais tout nous dire dés le début. En effet si à chacune de nos propositions tu nous sors une carte de ton capeau qui met tout par terre c'est pas cool.

J'ai par conséquent des questions :
Quelle seront les version d'excel qui seront utilisées dans ton entreprise?
Quels seront les systemes d'exploitations ?
Tes postes informatiques sont-ils des postes administrateurs ou des postes à accés limités ?
Dans ton entreprise, as-tu un serveur mail en intranet ou chaque PC à son propre client de messagerie ?

Si tu veux de l'aide il nous faut toutes les caractéristiques...

Cependant je peux te proposer cela :

Code:
Sub MailAvecOEouWinMail()
Dim Dest As String
Dim Sujt As String
Dim Msg As String

Dest = "coucou@monfai.fr"
Sujt = "Test d'envoi avec Excel"
Msg = "Bonjour, Excel vous envoie un message avec "
On Error Resume Next
Err.Clear
Shell Environ("ProgramFiles") & "Outlook Expressmsimn.exe " & _
"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg & "OE"
If Err.Number > 0 Then ' Erreur 53 sous Vista : Fichier non trouvé
Err.Clear
Shell Environ("ProgramFiles") & "Windows MailWinMail.exe " & _
"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg &
"WinMail"
End If
On Error GoTo 0
End Sub

ce code permet d'envoyer des mails que tu sois avec Outlook ou WindowsMail (qui remplace outlook sous vista)

Dis-moi si c'est ce que tu veux.

En ce qui concerne tes conditions, quelles sont-elles ?

@++
 

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Pour info, si on fait démarrer => Exécuter => msimn sous Vista, ça lance bien WinMail, grâce à la clé du registre :

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionAppPathsmsimn.exe

dont la valeur par défaut est

%ProgramFiles%Windows MailWinMail.exe

On peut donc écrire un procédure plus générique :

Code:
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 = WshShell.RegRead _
("HKLMSOFTWAREMicrosoftWindowsCurrentVersionApp Pathsmsimn.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 = "coucou@monfai.fr"
Sujt = "Test d'envoi avec Excel"
Msg = "Bonjour, Excel vous envoie un message avec " & _
IIf(InStr(MailProg, "msimn") > 0, "OE", "WinMail")
Shell Env & MailProg & " /mailurl:mailto:" & Dest & "?subject=" & _
Sujt & "&Body=" & Msg
End Sub

P.S. Merci google ...
 

sebastien450

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Malheuresement Cigogne je ne peut pas répondre a toute tes questions! Mais je peut déja te dire que certains tourne avec VISTA d'autre avec HP et Outlook semble etre la boite a lettre pour tous le monde. Les accés sur le réseau sont total apparement puisque si quelqu'un modifie un fichier cela se retrouve pour tous.
Ce que tu ma envoyer marche, pour le moment j'arrive bien a envoyer un mail meme si il faut que je valide dériere. Je te met le code que j'utilise et je te demande comment faire pour inserer une piece jointe tel que le classeur sur lequel je travaille?
De plus j'aurais aimer mettre une condition : si A1 > 3 par exemple.
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
 

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Yo seb,

Essai avec ceci : (je peux pas je n'ai pas vista ni winmail)

Code:
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
Dim Message
Dim LeClasseur

' Définition du classeur
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="C:\temp\temp.xls"
LeClasseur = "C:\temp\temp.xls"

' Test et selection du client de messagerie
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

' Format du mail
Dest = "sebastien_seb_5@msn.com"
Sujt = "Test d'envoi avec Excel"
Msg = "Bonjour, il faudrait commander pieces dans dossier ci-joint"

' Condition
If Cells(3, 1).Value > 3 Then
    ' Envoi du mail
    Shell Env & MailProg & " /mailurl:mailto:" & Dest & "?subject=" & _
    Sujt & "&Body=" & Msg & ""
    SendKeys "%I" & "p" & LeClasseur & "~" & "%s"
    Message = MsgBox("Et voilà...La macro fonctionne !", vbOKOnly, "Hourra !")
    ' Signification des caractères après "SendKeys":
    ' %I et P = Insertion de la pièce jointe dans Outlook Express. (%=Alt)
    ' ~ = Validation. (~=Entrée)
    ' %S = Envoyer.
End If

End Sub
 
Dernière édition:

sebastien450

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Ce que tu ma donné ne marche pas ! Mais j'ai réussit donc passons à ce qui me bloque:
Je te donne le code que je rentre, mon problème est que je n'arrive pas dans la condition "SI" a mettre toutes les cellules I12:I49, ca ne marche pas! :

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
 

Discussions similaires

Statistiques des forums

Discussions
313 769
Messages
2 102 234
Membres
108 181
dernier inscrit
Chr1sD