Correction macro excel
Résolu
Utilisateur anonyme
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Afin d'envoyer un mail automatique en fonction de la valeur d'une cellule, j'utilise la macro suivante :
Sub Demande_correction1()
If Range("J2").Value = "KO" Or Range("K2").Value = "KO" Or Range("L2").Value = "KO" Or Range("M2").Value = "KO" Or Range("N2").Value = "KO" Or Range("O2").Value = "KO" Then
Dim y As String
Dim ol As Object, myItem As Object
y = Range("G2").Value
chemin = ActiveWorkbook.Path
Set ol = CreateObject("outlook.application")
Set myItem = ol.CreateItem(olMailItem)
myItem.to = y
myItem.Subject = "Demande de Correction"
myItem.Body = "Bonjour, " & Chr(10) & "" & Chr(10) & _
"Message." & Chr(10) & "" & Chr(10) & _
"Cordialement," & Chr(10) & "" & Chr(10) & _
Range("H2").Value & Chr(10) & "" & Chr(10) & _
Range("A1").Value & " : " & Range("A2").Value & Chr(10) & _
Range("B1").Value & " : " & Range("B2").Value & Chr(10) & _
Range("C1").Value & " : " & Range("C2").Value & Chr(10) & _
Range("J1").Value & " : " & Range("J2").Value & Chr(10) & _
Range("K1").Value & " : " & Range("K2").Value & Chr(10) & _
Range("L1").Value & " : " & Range("L2").Value & Chr(10) & _
Range("M1").Value & " : " & Range("M2").Value & Chr(10) & _
Range("N1").Value & " : " & Range("N2").Value & Chr(10) & _
Range("O1").Value & " : " & Range("O2").Value & Chr(10) & _
Range("P1").Value & " : " & Range("P2").Value
myItem.Send
Set ol = Nothing
End If
End Sub
Pourriez m'aider à la modifier afin qu'elle marcher une plage de cellules ( 20 lignes par exemple). En fait je n'arrive pas à modifier cette macro de manière à ce qu'elle ne s'exécute qu'une seule fois par ligne.
Cette macro est lancée à partir de celle - ci :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [R2:R2]) Is Nothing Then
Demande_correction1
End If
End Sub
J'aimerai en fait adapter ce code pour un ensemble de lignes est déclencher son exécution dès qu'une valeur est inscrite dans la colonne R pour la ligne correspondante. Je ne sais pas si j'ai été claire.
Merci d'avance
Laure
Afin d'envoyer un mail automatique en fonction de la valeur d'une cellule, j'utilise la macro suivante :
Sub Demande_correction1()
If Range("J2").Value = "KO" Or Range("K2").Value = "KO" Or Range("L2").Value = "KO" Or Range("M2").Value = "KO" Or Range("N2").Value = "KO" Or Range("O2").Value = "KO" Then
Dim y As String
Dim ol As Object, myItem As Object
y = Range("G2").Value
chemin = ActiveWorkbook.Path
Set ol = CreateObject("outlook.application")
Set myItem = ol.CreateItem(olMailItem)
myItem.to = y
myItem.Subject = "Demande de Correction"
myItem.Body = "Bonjour, " & Chr(10) & "" & Chr(10) & _
"Message." & Chr(10) & "" & Chr(10) & _
"Cordialement," & Chr(10) & "" & Chr(10) & _
Range("H2").Value & Chr(10) & "" & Chr(10) & _
Range("A1").Value & " : " & Range("A2").Value & Chr(10) & _
Range("B1").Value & " : " & Range("B2").Value & Chr(10) & _
Range("C1").Value & " : " & Range("C2").Value & Chr(10) & _
Range("J1").Value & " : " & Range("J2").Value & Chr(10) & _
Range("K1").Value & " : " & Range("K2").Value & Chr(10) & _
Range("L1").Value & " : " & Range("L2").Value & Chr(10) & _
Range("M1").Value & " : " & Range("M2").Value & Chr(10) & _
Range("N1").Value & " : " & Range("N2").Value & Chr(10) & _
Range("O1").Value & " : " & Range("O2").Value & Chr(10) & _
Range("P1").Value & " : " & Range("P2").Value
myItem.Send
Set ol = Nothing
End If
End Sub
Pourriez m'aider à la modifier afin qu'elle marcher une plage de cellules ( 20 lignes par exemple). En fait je n'arrive pas à modifier cette macro de manière à ce qu'elle ne s'exécute qu'une seule fois par ligne.
Cette macro est lancée à partir de celle - ci :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [R2:R2]) Is Nothing Then
Demande_correction1
End If
End Sub
J'aimerai en fait adapter ce code pour un ensemble de lignes est déclencher son exécution dès qu'une valeur est inscrite dans la colonne R pour la ligne correspondante. Je ne sais pas si j'ai été claire.
Merci d'avance
Laure
A voir également:
- Correction macro excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
6 réponses
Salut
essaye ca :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [R:R]) Is Nothing Then
Demande_correction1(Target.Row)
End If
End Sub
Sub Demande_correction1(byval pRow as Long)
If Range("J" & pRow).Value = "KO" Or Range("K" & pRow).Value = "KO" Or Range("L" & pRow).Value = "KO" Or Range("M" & pRow).Value = "KO" Or Range("N" & pRow).Value = "KO" Or Range("O" & pRow).Value = "KO" Then
Dim y As String
Dim ol As Object, myItem As Object
y = Range("G" & pRow).Value
chemin = ActiveWorkbook.Path
Set ol = CreateObject("outlook.application")
Set myItem = ol.CreateItem(olMailItem)
myItem.to = y
myItem.Subject = "Demande de Correction"
myItem.Body = "Bonjour, " & Chr(10) & "" & Chr(10) & _
"Message." & Chr(10) & "" & Chr(10) & _
"Cordialement," & Chr(10) & "" & Chr(10) & _
Range("H2").Value & Chr(10) & "" & Chr(10) & _
Range("A1").Value & " : " & Range("A" & pRow).Value & Chr(10) & _
Range("B1").Value & " : " & Range("B" & pRow).Value & Chr(10) & _
Range("C1").Value & " : " & Range("C" & pRow).Value & Chr(10) & _
Range("J1").Value & " : " & Range("J" & pRow).Value & Chr(10) & _
Range("K1").Value & " : " & Range("K" & pRow).Value & Chr(10) & _
Range("L1").Value & " : " & Range("L" & pRow).Value & Chr(10) & _
Range("M1").Value & " : " & Range("M" & pRow).Value & Chr(10) & _
Range("N1").Value & " : " & Range("N" & pRow).Value & Chr(10) & _
Range("O1").Value & " : " & Range("O" & pRow).Value & Chr(10) & _
Range("P1").Value & " : " & Range("P" & pRow).Value
myItem.Send
Set ol = Nothing
End If
End Sub
J'ai modifié ta macro pour lui passer en paramètre la ligne modifié, de ce fait, au lieu d'appeler "J2", tu appeles "J" & pRow qui renverra la cellule J de la ligne modifiée.
Le NotIntersect se fait maintenant sur la plage R:R, donc la colonne R.
+++
Dépannage, formation et création de site internet en Gironde
www.ailp-informatique.net
essaye ca :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [R:R]) Is Nothing Then
Demande_correction1(Target.Row)
End If
End Sub
Sub Demande_correction1(byval pRow as Long)
If Range("J" & pRow).Value = "KO" Or Range("K" & pRow).Value = "KO" Or Range("L" & pRow).Value = "KO" Or Range("M" & pRow).Value = "KO" Or Range("N" & pRow).Value = "KO" Or Range("O" & pRow).Value = "KO" Then
Dim y As String
Dim ol As Object, myItem As Object
y = Range("G" & pRow).Value
chemin = ActiveWorkbook.Path
Set ol = CreateObject("outlook.application")
Set myItem = ol.CreateItem(olMailItem)
myItem.to = y
myItem.Subject = "Demande de Correction"
myItem.Body = "Bonjour, " & Chr(10) & "" & Chr(10) & _
"Message." & Chr(10) & "" & Chr(10) & _
"Cordialement," & Chr(10) & "" & Chr(10) & _
Range("H2").Value & Chr(10) & "" & Chr(10) & _
Range("A1").Value & " : " & Range("A" & pRow).Value & Chr(10) & _
Range("B1").Value & " : " & Range("B" & pRow).Value & Chr(10) & _
Range("C1").Value & " : " & Range("C" & pRow).Value & Chr(10) & _
Range("J1").Value & " : " & Range("J" & pRow).Value & Chr(10) & _
Range("K1").Value & " : " & Range("K" & pRow).Value & Chr(10) & _
Range("L1").Value & " : " & Range("L" & pRow).Value & Chr(10) & _
Range("M1").Value & " : " & Range("M" & pRow).Value & Chr(10) & _
Range("N1").Value & " : " & Range("N" & pRow).Value & Chr(10) & _
Range("O1").Value & " : " & Range("O" & pRow).Value & Chr(10) & _
Range("P1").Value & " : " & Range("P" & pRow).Value
myItem.Send
Set ol = Nothing
End If
End Sub
J'ai modifié ta macro pour lui passer en paramètre la ligne modifié, de ce fait, au lieu d'appeler "J2", tu appeles "J" & pRow qui renverra la cellule J de la ligne modifiée.
Le NotIntersect se fait maintenant sur la plage R:R, donc la colonne R.
+++
Dépannage, formation et création de site internet en Gironde
www.ailp-informatique.net
Bonjour,
Pour répondre à ta dernière question : non, pas très claire.
Si tu souhaite exécuter ta macro chaque fois que tu change une valeur de la colonne R modifie l'appel comme ceci :
Cordialement
Patrice
Pour répondre à ta dernière question : non, pas très claire.
Si tu souhaite exécuter ta macro chaque fois que tu change une valeur de la colonne R modifie l'appel comme ceci :
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [R:R]) Is Nothing Then Demande_correction1 End If End Sub
Cordialement
Patrice
Bonjour,
En fait j'ai plus de difficulté à adapter la seconde macro.
Je voudrai que la 1er macro lance l'exécution d'une 2nd macro chaque fois qu'une donnée est saisie dans une cellule de la colonne R. Ma 2nd macro envoyant un message reprenant les valeurs de certaines cellules de la même ligne que la que la cellule ayant été modifié dans la colonne R.
Exemple :
Si je saisie « ok » dans « R2 »
Je voudrai que la 2nd macro envoies un message avec le contenu des cellules O2 et P2 uniquement
Si je saisie « ok » dans « R3 » dans mon message j'aurai le contenu des celles O3 et P3, etc.
la 2nd macro s'éxécutant selon certaines conditions.
Laure
En fait j'ai plus de difficulté à adapter la seconde macro.
Je voudrai que la 1er macro lance l'exécution d'une 2nd macro chaque fois qu'une donnée est saisie dans une cellule de la colonne R. Ma 2nd macro envoyant un message reprenant les valeurs de certaines cellules de la même ligne que la que la cellule ayant été modifié dans la colonne R.
Exemple :
Si je saisie « ok » dans « R2 »
Je voudrai que la 2nd macro envoies un message avec le contenu des cellules O2 et P2 uniquement
Si je saisie « ok » dans « R3 » dans mon message j'aurai le contenu des celles O3 et P3, etc.
la 2nd macro s'éxécutant selon certaines conditions.
Laure
Bonsoir,
Comme tu n'as pas précisé « certaines conditions », je te propose le code ci-dessous qui répond à ton dernier énoncé :
Cordialement
Patrice
Comme tu n'as pas précisé « certaines conditions », je te propose le code ci-dessous qui répond à ton dernier énoncé :
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [R:R]) Is Nothing Then Demande_correction1 (Target.Row) End If End Sub Sub Demande_correction1(ByVal ligne As Long) Dim y As String, Msg As String Dim ol As Object, myItem As Object If Range("R" & ligne).Value = "ok" Then 'Ajouter ici les autres conditions d'exécution (penser au End If final) : 'If [conditions] Then y = Range("G2").Value Msg = "Bonjour, " & vbLf & vbLf & _ "Message :" & vbLf & vbLf & _ Range("O1").Value & " : " & Range("O" & ligne).Value & vbLf & _ Range("P1").Value & " : " & Range("P" & ligne).Value & vbLf & vbLf & _ "Cordialement." Set ol = CreateObject("outlook.application") Set myItem = ol.CreateItem(olMailItem) With myItem .to = y .Subject = "Demande de Correction" .Body = Msg .Send End With Set ol = Nothing 'penser à ajouter la ligne ci-dessous si d'autres conditions 'End If End If End Sub
Cordialement
Patrice
Bonjour,
Tu pourrais remplacer olMailItem par 0, mais il est préférable d'ajouter la référence à Outlook dans l'éditeur VBA (Alt+F11) :
Outils, Références..., cocher Microsoft OutLoock xx.x Object Library (xx.x = version)
Patrice
Tu pourrais remplacer olMailItem par 0, mais il est préférable d'ajouter la référence à Outlook dans l'éditeur VBA (Alt+F11) :
Outils, Références..., cocher Microsoft OutLoock xx.x Object Library (xx.x = version)
Patrice
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour ton aide.
Mais là j'ai un autre souci, je ne sais pas pourquoi, mais avec ta modification, ça ne marche pas du tout.
Ça me met : « Erreur compilation : variable non définie » sur le chemin
Laure