besoin d'aide SVP macro VBA

tigre117

XLDnaute Junior
bonsoir tous les membres ,
description de probléme
j'ai crée un code VBA dont leur but est de faire clignoter les cellules DXXX de la feuille de suivi
je suis maintenant dans le cas que chaque changement de la date d'intervention "feuille d'enregistrement" les cellules clignotent or je vais que ce clignotement déclenche si et seulement si les cellules EXXXXXX "feuille de suivi" contient "attention date ,depassée"
(exemple si E5 contient attention date dépassée" alors D5 clignote en rouge si non pas de clignotement ) et de méme pour tous autres cellules. merci pour votre aide
le code existe sous la feuille d'enregistrement

code

Private Sub Worksheet_Change(ByVal Target As Range)
If Me.Cells(3, Target.Column).Value = "date d'intervention" Then
If (Target.Value <> "") And (Target.Offset(0, 1) <> "") Then
Col = CByte(Replace(Target.Offset(-2, -2), "Element ", ""))
Clignote Feuil1.Range("D" & Col + 4)
End If
End If
End Sub
 

Pièces jointes

  • Copie de maintenance preventif %281%29 (1).xlsm
    32.4 KB · Affichages: 47

Papou-net

XLDnaute Barbatruc
Bonsoir tigre117,

Modifie ta macro comme ceci:

Private Sub Worksheet_Change(ByVal Target As Range)
If Me.Cells(3, Target.Column).Value = "date d'intervention" Then
If (Target.Value <> "") And (Target.Offset(0, 1) <> "") Then
Col = CByte(Replace(Target.Offset(-2, -2), "Element ", ""))
If Feuil1.Range("E" & Col + 4) <> "" Then Clignote Feuil1.Range("D" & Col + 4)
End If
End If
End Sub​

Cordialement.
 

tigre117

XLDnaute Junior
merci beaucoup Papou-net pour votre aide excatement par fait ce ça ce que je vais
maintenant si possible bien sur j'ai un code dans meme fichier leur but et de faire m'envoyer un mail sur outlook ce code se fonctionne et j'ai réçu des mail mais sauf aprés exécution je vais que ces mails sera envoyé automatiquement et le declencheur aussi " attention, date depassée"
exemple (si E5 contient "attention ,date depassée" alors le contenu de la cellule F5 sera envoyé automatiquement sur mon boite )et de meme pour les autres cellules toujours dans la feuille de suivi
code existe dans feuille 1 de suivi

code
Sub Mail_small_Text_Outlook()
'Working in Office 2000-2010
Dim messagerie As Object
Dim email As Object
Dim i As Integer '--- n° de ligne
i = 5
Set messagerie = CreateObject("Outlook.Application")
Set email = messagerie.CreateItem(0)
'on fait la boucle en imaginant que colonne D est toujours remplie
MsgBox "procédure d'envoi"

strBody = ""
For ligne = 5 To Cells(65000, "F").End(xlUp).Row
If Cells(i, "E").Value = "Attention, date dépassée!" Then
strBody = strBody & "description : " & Cells(i, "F").Value & vbCrLf
End If
i = i + 1
Next


With email
.To = "mounir_kraim@contoso.com"
.Subject = "Avertissement sur Tâche"
.Body = strBody
.Send

End With
Set email = Nothing
Set messagerie = Nothing



End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, tigre117, Papou-net

Juste de passage pour indiquer à tigre117, qu'il est conseillé ne pas laisser d'adresse mail réelle sur les forums publics.
.To = "m***r_k***im@co*so.***"
Il est conseillé d'anonymiser son code VBA avant de le public comme ceci par exemple:
.To = "prenom.nom@domaine.com"
 

Staple1600

XLDnaute Barbatruc
Re

Une petit exemple de macro possible
(Pour de l'automatisme , mettre le code de Test dans une procédure WorkBook_Open dans le code du classeur, pas dans un module standard)
Par contre, on mettra bien la macro Mail_Alerte dans un module standard.
VB:
Sub Test()
If [F5] > Date Then
'22h43 ;-)
Mail_Alerte "Attention, attention, Le surveillant général vient de sortir de son laboratoire"
Else
Exit Sub
End If
End Sub
Public Sub Mail_Alerte(Corps As String)
With CreateObject("Outlook.Application").CreateItem(0)
.To = ""
.Subject = "Avertissement sur Tâche"
.Body = Corps
.display 'ligne juste pour test
'.Send
End With
End Sub
 

tigre117

XLDnaute Junior
bonsoir staple1600 bon j'ai essayé avec c code mais ne fonctionne pas je vous rappelle que je suis un débutant dans ce langage est ce que possible de m'envoyer une solution clair pour mon cas
le code que j'ai deja publier est fonctionnel mais sauf que à chaque fois j'exucute de nouveau et aussi le declenchement d'envoi traité sur chaque changement de la date intervention feuille d'enregistrement et ça pas correcte comme ça méme si tu vider la cellule de la date d'intervention et tu fais executé code le procedure d'envoi effectué et ce pas bon pour moi je vais que le mail sera envoyé avant la date prochaine par quelque jours chaque et element a sa propre date ce pour çela je vais lié le déclenchement d'envoi par l'apparition de " attention ,date depassée" cellules EXXXX feuille de suivi voila
merci pour votre compréhension
code existe dans feuille 1 de suivi
 

Pièces jointes

  • Copie de maintenance preventif %281%29 (1).xlsm
    31.7 KB · Affichages: 43

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@tigre117
Tu n'as pas suivi mon conseil concernant les adresses mails dans le message#5?

Inscrit depuis le 22 juin,sur le forum,soit presque deux mois, tu n'es plus un débutant ;)

Revenons à ta question. La macro précédemment fonctionne puisque je l'ai posté sur le forum (donc testé au préalable) et comme précisé c'était un exemple pas une solution clé en main à ta question.

Ma personnalité m'incline à inciter le demandeur à mettre les mains dans le cambouis, à mouiller le maillot.

Donc en attendant que tu relèves les manches, je continue de bosser sur ton dernier fichier et posterai plus tard le code VBA cogité de si bon matin. ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@tigre117
Voici donc le code cogité
(testé et fonctionnel sur mon PC)
Et de ton côté, tu en es où?
VB:
Sub Test_II()
'Déclarations des variables
Dim s As Worksheet, derL As Long, i As Long

'On définit la variable s en tant l'onglet Feuille de suivi
Set s = Sheets("Feuille de suivi")
'On définit la variable derL comme  le numéro de ligne
'de la dernière cellule non vide de la colonne C
derL = s.Cells(Application.Rows.Count, "C").End(xlUp).Row
'on parcout la colonne E de la ligne 5 à derL
For i = 5 To derL
'si la cellule parcourue commence par Attention
    If Cells(i, "E").Text Like "Attention*" Then
        '###########################################################
        'Ci-dessous ligne de test
        MsgBox "mounir.nom@domaine.com" & " " & s.Cells(i, "F").Text
        '###########################################################
    'Alors on envoie un mail dont le corps du message se situe
    'en colonne F
    'ligne réelle de code à décommenter^pour envoi des mails
    'Mail_Alerte "mounir.nom@domaine.com", Cells(i, "F").text
    End If
Next
End Sub
Public Sub Mail_Alerte(Destinataire As String, Corps As String)
With CreateObject("Outlook.Application").CreateItem(0)
.To = Destinataire
    .Subject = "Avertissement sur Tâche"
    .Body = Corps
    .display 'ligne juste pour test <=> à mettre en commentaire
    'quand on n'est en phase de test du code VBA
    
    '.Send ' ligne pour envoyer le mail <=> donc à décommenter
End With
End Sub
 

tigre117

XLDnaute Junior
bonsoir staple 1600 merci pour votre réponse mais toujours sa revient au meme à chaque fois tu a obligé d'executer le code pour effectuer c'est pas d'une façon automatique alors si "attention date depassée " apparaitre dans les cellules Exxxx et comme ça méme il n'y a plus ce terme et tu execute le procedure d'envoi sera effectué mais avec message vide et ça c'est bon
donc ce code permet d'envoyer un mail toujours sauf aprés exécution comme suit
si "attention date depassée existe le mail reçu contient le description de tache qu'est dans les cellules Fxxxx
si "attention date depassée n'existe pas dans Exxx le mail reçu ne contient pas le description de tache dans les cellules FXXX
vous voyez les contraintes , or moi je vais que si "attention date depassée" existe dans Exxxx alors je reçoit un mail contient le description de tache qu'est le contenu des cellules Fxxxxx et si "attention ,date depassée n'existe pas alors pas de mail cariment ni vide ni plein
voila le code que je mais dans feuille de suivi

VB:
Sub Test_II()
'Déclarations des variables
Dim s As Worksheet, derL As Long, i As Long

'On définit la variable s en tant l'onglet Feuille de suivi
Set s = Sheets("Feuille de suivi")
'On définit la variable derL comme  le numéro de ligne
'de la dernière cellule non vide de la colonne C
derL = s.Cells(Application.Rows.Count, "C").End(xlUp).Row
'on parcout la colonne E de la ligne 5 à derL
For i = 5 To derL
'si la cellule parcourue commence par Attention
    If Cells(i, "E").Text Like "Attention,date dépassée" Then
        '###########################################################
        'Ci-dessous ligne de test
        MsgBox "procédure d'envoi"
        '###########################################################
    'Alors on envoie un mail dont le corps du message se situe
    'en colonne F
    'ligne réelle de code à décommenter^pour envoi des mails
    'Mail_Alerte "mounir.nom@domaine.com", Cells(i, "F").text
    End If
Next
End Sub

et le code d'envoi dans un module standard

VB:
Sub Mail_small_Text_Outlook()
    'Working in Office 2000-2010
    Dim messagerie As Object
    Dim email As Object
     Dim i As Integer            '--- n° de ligne
    i = 5
    Set messagerie = CreateObject("Outlook.Application")
    Set email = messagerie.CreateItem(0)
    'on fait la boucle en imaginant que colonne D est toujours remplie
   MsgBox "procédure d'envoi"

    strBody = ""
    For ligne = 5 To Cells(65000, "F").End(xlUp).Row
        If Cells(i, "E").Value = "Attention, date dépassée!" Then
            strBody = strBody & "description : " & Cells(i, "F").Value & vbCrLf
        End If
        i = i + 1
    Next
With email
        .To = "mounir_nom@domaine.com"
        .Subject = "Avertissement sur Tâche"
        .Body = strBody
       .Send
     
            End With
            Set email = Nothing
        Set messagerie = Nothing
   
        End Sub
 

Discussions similaires

Réponses
7
Affichages
485
Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 709
Messages
2 081 779
Membres
101 816
dernier inscrit
Jfrcs