Correction macro excel
Résolu/Fermé
Utilisateur anonyme
-
24 août 2010 à 16:52
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 30 août 2010 à 11:37
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 30 août 2010 à 11:37
A voir également:
- Correction macro excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
6 réponses
ailp
Messages postés
83
Date d'inscription
vendredi 16 avril 2010
Statut
Membre
Dernière intervention
16 septembre 2010
8
Modifié par ailp le 3/09/2010 à 11:05
Modifié par ailp le 3/09/2010 à 11:05
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
24 août 2010 à 17:19
24 août 2010 à 17:19
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
27 août 2010 à 21:30
27 août 2010 à 21:30
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
30 août 2010 à 10:46
30 août 2010 à 10:46
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
30 août 2010 à 11:20
30 août 2010 à 11:20
Re,
olMailItem est une constante de la bibliothèque Outloock.
Pour qu'elle soit reconnue par le compilateur, il faut faire référence à cette bibliothèque dans l'éditeur VBA.
L'autre solution consiste à remplace la constante inconnue par sa value (0 pour oldMailItem).
Cordialement
Patrice
olMailItem est une constante de la bibliothèque Outloock.
Pour qu'elle soit reconnue par le compilateur, il faut faire référence à cette bibliothèque dans l'éditeur VBA.
L'autre solution consiste à remplace la constante inconnue par sa value (0 pour oldMailItem).
Cordialement
Patrice
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
30 août 2010 à 11:22
30 août 2010 à 11:22
PS: les références sont enregistrée dans le projet, cela peut expliquer que dans un nouveau classeur elle soit absente.
Utilisateur anonyme
30 août 2010 à 11:35
30 août 2010 à 11:35
Merci
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
30 août 2010 à 11:37
30 août 2010 à 11:37
De rien, avec plaisir
27 août 2010 à 16:32
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