Si je modifie un peu cette macro, est-il possible d'obtenir une macro
pour renommer une catégorie ?
--------------------------
Option Explicit
Sub RenommerCategories()
'
' Macro pour renommer une catégorie Outlook
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_Itm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Or InStr(1,
ol_ContactItm.Categories, "; Excel") Or InStr(1,
ol_ContactItm.Categories, "Excel;") Then
ol_ContactItm.Rename
????? Comment indiquer le nouveau nom ??????
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
Si je modifie un peu cette macro, est-il possible d'obtenir une macro
pour renommer une catégorie ?
--------------------------
Option Explicit
Sub RenommerCategories()
'
' Macro pour renommer une catégorie Outlook
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_Itm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Or InStr(1,
ol_ContactItm.Categories, "; Excel") Or InStr(1,
ol_ContactItm.Categories, "Excel;") Then
ol_ContactItm.Rename
????? Comment indiquer le nouveau nom ??????
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
Si je modifie un peu cette macro, est-il possible d'obtenir une macro
pour renommer une catégorie ?
--------------------------
Option Explicit
Sub RenommerCategories()
'
' Macro pour renommer une catégorie Outlook
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_Itm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Or InStr(1,
ol_ContactItm.Categories, "; Excel") Or InStr(1,
ol_ContactItm.Categories, "Excel;") Then
ol_ContactItm.Rename
????? Comment indiquer le nouveau nom ??????
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
Céline,
"Céline Brien" a écrit dans le message
de
news:Si je modifie un peu cette macro, est-il possible d'obtenir une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le message
de
news:eUcqrnQOEHA.3380@TK2MSFTNGP11.phx.gbl...
Si je modifie un peu cette macro, est-il possible d'obtenir une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" a écrit dans le message
de
news:Si je modifie un peu cette macro, est-il possible d'obtenir une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Il était très important d'enregistrer les éléments : ol_ContactItm.Save
Je croyais que tes codes tenaient compte du fait que votre catégorie est
seule, en début, fin ou milieu de la chaîne des catégories. Voir ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je vais réviser le tout à partie de tes conseils.
Merci encore,
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai 2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le message
denews:Si je modifie un peu cette macro, est-il possible d'obtenir une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que vous
pouvezavoir suivant que votre catégorie est seule, en début, fin ou milieu
de lachaîne des catégories. Puis, il suffit d'enlever l'ancienne catégorie
et dela remplacer par la nouvelle dans la chaîne, avant de la réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Il était très important d'enregistrer les éléments : ol_ContactItm.Save
Je croyais que tes codes tenaient compte du fait que votre catégorie est
seule, en début, fin ou milieu de la chaîne des catégories. Voir ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je vais réviser le tout à partie de tes conseils.
Merci encore,
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai 2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:uk9dAC4OEHA.3712@TK2MSFTNGP10.phx.gbl...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le message
de
news:eUcqrnQOEHA.3380@TK2MSFTNGP11.phx.gbl...
Si je modifie un peu cette macro, est-il possible d'obtenir une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Il était très important d'enregistrer les éléments : ol_ContactItm.Save
Je croyais que tes codes tenaient compte du fait que votre catégorie est
seule, en début, fin ou milieu de la chaîne des catégories. Voir ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je vais réviser le tout à partie de tes conseils.
Merci encore,
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai 2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le message
denews:Si je modifie un peu cette macro, est-il possible d'obtenir une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que vous
pouvezavoir suivant que votre catégorie est seule, en début, fin ou milieu
de lachaîne des catégories. Puis, il suffit d'enlever l'ancienne catégorie
et dela remplacer par la nouvelle dans la chaîne, avant de la réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" a écrit dans le message
de
news:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie "Avant".
Si la
catégorie "Avant" est UNE DES catégories de de l'élément alors cet
élément
aura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre catégorie
est
seule, en début, fin ou milieu de la chaîne des catégories. Voir
ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large." et
"Les Or
permettent de gérer les catégories multiples sans retenir celles du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes les
"Excel*" et "*Excel". Votre code peut mettre dans la seule catégorie
"Après"
des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",
si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne n'est
pas
"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début de
chaîne et "; Avant" en fin de chaîne et remplacer cette sous-chaîne
par
celle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
message
denews:Si je modifie un peu cette macro, est-il possible d'obtenir une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que
vous
pouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieu
de lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorie
et dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le message
de
news:uAyF5G7OEHA.1312@TK2MSFTNGP12.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie "Avant".
Si la
catégorie "Avant" est UNE DES catégories de de l'élément alors cet
élément
aura ensuite come SEULE catégorie "Après".
Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.
Je croyais que tes codes tenaient compte du fait que votre catégorie
est
seule, en début, fin ou milieu de la chaîne des catégories. Voir
ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large." et
"Les Or
permettent de gérer les catégories multiples sans retenir celles du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes les
"Excel*" et "*Excel". Votre code peut mettre dans la seule catégorie
"Après"
des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",
si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne n'est
pas
"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début de
chaîne et "; Avant" en fin de chaîne et remplacer cette sous-chaîne
par
celle qui convient.
Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
Grég
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:uk9dAC4OEHA.3712@TK2MSFTNGP10.phx.gbl...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:eUcqrnQOEHA.3380@TK2MSFTNGP11.phx.gbl...
Si je modifie un peu cette macro, est-il possible d'obtenir une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que
vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou
milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la
réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" a écrit dans le message
de
news:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie "Avant".
Si la
catégorie "Avant" est UNE DES catégories de de l'élément alors cet
élément
aura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre catégorie
est
seule, en début, fin ou milieu de la chaîne des catégories. Voir
ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large." et
"Les Or
permettent de gérer les catégories multiples sans retenir celles du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes les
"Excel*" et "*Excel". Votre code peut mettre dans la seule catégorie
"Après"
des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",
si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne n'est
pas
"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début de
chaîne et "; Avant" en fin de chaîne et remplacer cette sous-chaîne
par
celle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
message
denews:Si je modifie un peu cette macro, est-il possible d'obtenir une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que
vous
pouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieu
de lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorie
et dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
------------------------------------------------------------------------
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak, mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie "Avant".
Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre catégorie
estseule, en début, fin ou milieu de la chaîne des catégories. Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large." et
"Les Orpermettent de gérer les catégories multiples sans retenir celles du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes les
"Excel*" et "*Excel". Votre code peut mettre dans la seule catégorie
"Après"des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne n'est
pas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette sous-chaîne
parcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
messagedenews:Si je modifie un peu cette macro, est-il possible d'obtenir une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que
vouspouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieude lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
------------------------------------------------------------------------
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak, mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:40a8847d$0$10205$626a14ce@news.free.fr...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le message
de
news:uAyF5G7OEHA.1312@TK2MSFTNGP12.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie "Avant".
Si la
catégorie "Avant" est UNE DES catégories de de l'élément alors cet
élément
aura ensuite come SEULE catégorie "Après".
Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.
Je croyais que tes codes tenaient compte du fait que votre catégorie
est
seule, en début, fin ou milieu de la chaîne des catégories. Voir
ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large." et
"Les Or
permettent de gérer les catégories multiples sans retenir celles du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes les
"Excel*" et "*Excel". Votre code peut mettre dans la seule catégorie
"Après"
des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",
si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne n'est
pas
"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début de
chaîne et "; Avant" en fin de chaîne et remplacer cette sous-chaîne
par
celle qui convient.
Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
Grég
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:uk9dAC4OEHA.3712@TK2MSFTNGP10.phx.gbl...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:eUcqrnQOEHA.3380@TK2MSFTNGP11.phx.gbl...
Si je modifie un peu cette macro, est-il possible d'obtenir une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que
vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou
milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la
réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
------------------------------------------------------------------------
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak, mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi à
renommer les catégories des éléments du dossier Contacts (voir codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie "Avant".
Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre catégorie
estseule, en début, fin ou milieu de la chaîne des catégories. Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large." et
"Les Orpermettent de gérer les catégories multiples sans retenir celles du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes les
"Excel*" et "*Excel". Votre code peut mettre dans la seule catégorie
"Après"des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne n'est
pas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette sous-chaîne
parcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
messagedenews:Si je modifie un peu cette macro, est-il possible d'obtenir une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas que
vouspouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieude lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;") then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme l'on
doit
faire maintenant, au début de votre code, donc avec New vous créez un
objet
inutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux éventuelles
autres
catégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
fait
pour votre fonction de suppression. cela vous évitera de supprimer un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré et
Ken
Slovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF & ";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories, ";
" & T_
BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") = 1)
Then
strTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" a écrit dans le message
de
news:Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une
seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
----------------------------------------------------------------------
--
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak,
mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le
message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi
à
renommer les catégories des éléments du dossier Contacts (voir
codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".
Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre
catégorie
estseule, en début, fin ou milieu de la chaîne des catégories. Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large."
et
"Les Orpermettent de gérer les catégories multiples sans retenir celles
du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes
les
"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie
"Après"des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'est
pas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîne
parcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
messagedenews:Si je modifie un peu cette macro, est-il possible d'obtenir
une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas
que
vouspouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieude lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme l'on
doit
faire maintenant, au début de votre code, donc avec New vous créez un
objet
inutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux éventuelles
autres
catégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
fait
pour votre fonction de suppression. cela vous évitera de supprimer un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré et
Ken
Slovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF & ";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories, ";
" & T_
BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") = 1)
Then
strTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le message
de
news:ecUAXlEPEHA.2704@TK2MSFTNGP10.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une
seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
----------------------------------------------------------------------
--
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak,
mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:40a8847d$0$10205$626a14ce@news.free.fr...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:uAyF5G7OEHA.1312@TK2MSFTNGP12.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi
à
renommer les catégories des éléments du dossier Contacts (voir
codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".
Si la
catégorie "Avant" est UNE DES catégories de de l'élément alors cet
élément
aura ensuite come SEULE catégorie "Après".
Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.
Je croyais que tes codes tenaient compte du fait que votre
catégorie
est
seule, en début, fin ou milieu de la chaîne des catégories. Voir
ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large."
et
"Les Or
permettent de gérer les catégories multiples sans retenir celles
du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes
les
"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie
"Après"
des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",
si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'est
pas
"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début de
chaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîne
par
celle qui convient.
Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
Grég
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:uk9dAC4OEHA.3712@TK2MSFTNGP10.phx.gbl...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:eUcqrnQOEHA.3380@TK2MSFTNGP11.phx.gbl...
Si je modifie un peu cette macro, est-il possible d'obtenir
une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas
que
vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou
milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la
réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme l'on
doit
faire maintenant, au début de votre code, donc avec New vous créez un
objet
inutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux éventuelles
autres
catégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
fait
pour votre fonction de suppression. cela vous évitera de supprimer un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré et
Ken
Slovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF & ";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories, ";
" & T_
BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") = 1)
Then
strTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" a écrit dans le message
de
news:Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une
seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
----------------------------------------------------------------------
--
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak,
mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le
message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi
à
renommer les catégories des éléments du dossier Contacts (voir
codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".
Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre
catégorie
estseule, en début, fin ou milieu de la chaîne des catégories. Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large."
et
"Les Orpermettent de gérer les catégories multiples sans retenir celles
du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes
les
"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie
"Après"des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'est
pas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîne
parcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
messagedenews:Si je modifie un peu cette macro, est-il possible d'obtenir
une
macropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas
que
vouspouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieude lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grégoire,
Merci pour votre réponse.
Les codes fonctionnent parfaitement. Je peux maintenant renommer une
catégorie parmi d'autres. L'utilisation des codes strTmp et Len, c'est
vraiment génial !
Je ne maîtrise pas très bien VBA, mais ce travail m'aide beaucoup à
mieux comprendre les concepts et de nouvelles fonctions.
J'aime bien la façon dont vous divisez les codes en section : Const et
Dim, Set, Instructions et Set.
Merci pour l'explication concernant "Dim ol_App As Outlook.Application"
vs "Dim ol_App As New Outlook.Application". J'aime comprendre et vos
explications me sont très précieuses.
Toutefois, je n'ai pas compris cette remarque :
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
fait pour votre fonction de suppression. cela vous évitera de supprimer
un élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
Comment une catégorie peut-elle contenir "Avant" sans être "Avant" ?
Bon mardi,
Céline
"Grég" a écrit dans le message de
news:%23l$Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme l'on
doitfaire maintenant, au début de votre code, donc avec New vous créez un
objetinutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux éventuelles
autrescatégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
faitpour votre fonction de suppression. cela vous évitera de supprimer un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré et
KenSlovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF & ";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories, ";
" & T_BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") = 1)
ThenstrTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" a écrit dans le message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une
seulecatégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
----------------------------------------------------------------------
-----------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak,
mai2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le
messagedenews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi
àrenommer les catégories des éléments du dossier Contacts (voir
codesci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre
catégorieestseule, en début, fin ou milieu de la chaîne des catégories. Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large."
et"Les Orpermettent de gérer les catégories multiples sans retenir celles
dutype *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes
les"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie"Après"des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'estpas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîneparcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
messagedenews:Si je modifie un peu cette macro, est-il possible d'obtenir
unemacropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas
quevouspouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieude lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then....
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grégoire,
Merci pour votre réponse.
Les codes fonctionnent parfaitement. Je peux maintenant renommer une
catégorie parmi d'autres. L'utilisation des codes strTmp et Len, c'est
vraiment génial !
Je ne maîtrise pas très bien VBA, mais ce travail m'aide beaucoup à
mieux comprendre les concepts et de nouvelles fonctions.
J'aime bien la façon dont vous divisez les codes en section : Const et
Dim, Set, Instructions et Set.
Merci pour l'explication concernant "Dim ol_App As Outlook.Application"
vs "Dim ol_App As New Outlook.Application". J'aime comprendre et vos
explications me sont très précieuses.
Toutefois, je n'ai pas compris cette remarque :
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
fait pour votre fonction de suppression. cela vous évitera de supprimer
un élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
Comment une catégorie peut-elle contenir "Avant" sans être "Avant" ?
Bon mardi,
Céline
"Grég" <greg@none.none> a écrit dans le message de
news:%23l$zC6LPEHA.3988@tk2msftngp13.phx.gbl...
Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme l'on
doit
faire maintenant, au début de votre code, donc avec New vous créez un
objet
inutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux éventuelles
autres
catégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
fait
pour votre fonction de suppression. cela vous évitera de supprimer un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré et
Ken
Slovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF & ";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories, ";
" & T_
BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") = 1)
Then
strTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le message
de
news:ecUAXlEPEHA.2704@TK2MSFTNGP10.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une
seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
----------------------------------------------------------------------
--
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak,
mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:40a8847d$0$10205$626a14ce@news.free.fr...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:uAyF5G7OEHA.1312@TK2MSFTNGP12.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi
à
renommer les catégories des éléments du dossier Contacts (voir
codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".
Si la
catégorie "Avant" est UNE DES catégories de de l'élément alors cet
élément
aura ensuite come SEULE catégorie "Après".
Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.
Je croyais que tes codes tenaient compte du fait que votre
catégorie
est
seule, en début, fin ou milieu de la chaîne des catégories. Voir
ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large."
et
"Les Or
permettent de gérer les catégories multiples sans retenir celles
du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes
les
"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie
"Après"
des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",
si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'est
pas
"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début de
chaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîne
par
celle qui convient.
Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
Grég
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:uk9dAC4OEHA.3712@TK2MSFTNGP10.phx.gbl...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:eUcqrnQOEHA.3380@TK2MSFTNGP11.phx.gbl...
Si je modifie un peu cette macro, est-il possible d'obtenir
une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas
que
vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin ou
milieu
de la
chaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la
réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Bonjour à toutes et à tous,
Bonjour Grégoire,
Merci pour votre réponse.
Les codes fonctionnent parfaitement. Je peux maintenant renommer une
catégorie parmi d'autres. L'utilisation des codes strTmp et Len, c'est
vraiment génial !
Je ne maîtrise pas très bien VBA, mais ce travail m'aide beaucoup à
mieux comprendre les concepts et de nouvelles fonctions.
J'aime bien la façon dont vous divisez les codes en section : Const et
Dim, Set, Instructions et Set.
Merci pour l'explication concernant "Dim ol_App As Outlook.Application"
vs "Dim ol_App As New Outlook.Application". J'aime comprendre et vos
explications me sont très précieuses.
Toutefois, je n'ai pas compris cette remarque :
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
fait pour votre fonction de suppression. cela vous évitera de supprimer
un élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
Comment une catégorie peut-elle contenir "Avant" sans être "Avant" ?
Bon mardi,
Céline
"Grég" a écrit dans le message de
news:%23l$Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme l'on
doitfaire maintenant, au début de votre code, donc avec New vous créez un
objetinutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux éventuelles
autrescatégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que j'ai
faitpour votre fonction de suppression. cela vous évitera de supprimer un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré et
KenSlovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF & ";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories, ";
" & T_BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") = 1)
ThenstrTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" a écrit dans le message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).Si le champ Catégories contient plus qu'un Catégories, je ne peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir une
seulecatégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
----------------------------------------------------------------------
-----------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken Slovak,
mai2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le
messagedenews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai réussi
àrenommer les catégories des éléments du dossier Contacts (voir
codesci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre
catégorieestseule, en début, fin ou milieu de la chaîne des catégories. Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu large."
et"Les Orpermettent de gérer les catégories multiples sans retenir celles
dutype *Excel*." Par contre je n'ai pas dit qu'il éliminait toutes
les"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie"Après"des éléments appartenant à la catégorie "Avant-hier" et "le bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'estpas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîneparcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak, mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit dans le
messagedenews:Si je modifie un peu cette macro, est-il possible d'obtenir
unemacropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les cas
quevouspouvezavoir suivant que votre catégorie est seule, en début, fin ou
milieude lachaîne des catégories. Puis, il suffit d'enlever l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then....
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" a écrit dans le message
de
news:Bonjour à toutes et à tous,
Bonjour Grégoire,
Merci pour votre réponse.
Les codes fonctionnent parfaitement. Je peux maintenant renommer une
catégorie parmi d'autres. L'utilisation des codes strTmp et Len,
c'est
vraiment génial !
strTmp n'est là que pour que le code soit un peu plus lisible. Le
reste
n'est que l'utilisation des fonctions usuelles de manipulation de
chaîne de
caractères dans la plupart des langages de programmation: Len, Left,
mid,
right et la concaténation (&).Je ne maîtrise pas très bien VBA, mais ce travail m'aide beaucoup à
mieux comprendre les concepts et de nouvelles fonctions.
J'aime bien la façon dont vous divisez les codes en section : Const
et
Dim, Set, Instructions et Set.
Séparer les parties déclaratives des parties qui s'exécutent rend le
code
plus agréable à (re)lire, donc à maintenir. Normalement, le code
devrait
contenir au moins autant de lignes de commentaires que de ligne de
code, ne
serait-ce que pour expliquer comment est construite la chaîne des
"categories" (séparées par des ; avec un blanc...)Merci pour l'explication concernant "Dim ol_App As
Outlook.Application"
vs "Dim ol_App As New Outlook.Application". J'aime comprendre et vos
explications me sont très précieuses.
Toutefois, je constate "qu'en anglais" vous restez sceptique !-)) Vous
avez
bien raison !!!Toutefois, je n'ai pas compris cette remarque :
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que
j'ai
fait pour votre fonction de suppression. cela vous évitera de
supprimer
un élément appartenant à une catégorie qui contient "Avant" sans
être
"Avant".
Comment une catégorie peut-elle contenir "Avant" sans être "Avant" ?
Désolé, ma phrase était ambigue. La catégorie "Avant-hier", contient
la
chaîne "Avant" sans être la catégorie "Avant". Pour éviter de compter,
j'avais utilisé Instr comme une fonction booléenne. Donc, le test
fourni,
comme précisé, n'éliminait pas, dans votre fonction de suppression,
tous les
cas où la chaîne cherchée était inclue dans une autre.
--
GrégBon mardi,
Céline
"Grég" a écrit dans le message de
news:%23l$Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme
l'on
doitfaire maintenant, au début de votre code, donc avec New vous créez
un
objetinutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous
permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux
éventuelles
autrescatégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que
j'ai
faitpour votre fonction de suppression. cela vous évitera de supprimer
un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré
et
KenSlovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF &
";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories,
";
" & T_BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > > > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") 1)
ThenstrTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" a écrit dans le
message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).Si le champ Catégories contient plus qu'un Catégories, je ne
peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir
une
seulecatégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
---------------------------------------------------------------------------------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken
Slovak,
mai2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le
messagedenews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai
réussi
àrenommer les catégories des éléments du dossier Contacts
(voir
codesci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors
cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre
catégorieestseule, en début, fin ou milieu de la chaîne des catégories.
Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu
large."
et"Les Orpermettent de gérer les catégories multiples sans retenir
celles
dutype *Excel*." Par contre je n'ai pas dit qu'il éliminait
toutes
les"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie"Après"des éléments appartenant à la catégorie "Avant-hier" et "le
bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'estpas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit
être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîneparcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak,
mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit
dans le
messagedenews:Si je modifie un peu cette macro, est-il possible
d'obtenir
unemacropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les
cas
quevouspouvezavoir suivant que votre catégorie est seule, en début, fin
ou
milieude lachaîne des catégories. Puis, il suffit d'enlever
l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then....
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les
macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le message
de
news:uwWtabNPEHA.3748@TK2MSFTNGP09.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grégoire,
Merci pour votre réponse.
Les codes fonctionnent parfaitement. Je peux maintenant renommer une
catégorie parmi d'autres. L'utilisation des codes strTmp et Len,
c'est
vraiment génial !
strTmp n'est là que pour que le code soit un peu plus lisible. Le
reste
n'est que l'utilisation des fonctions usuelles de manipulation de
chaîne de
caractères dans la plupart des langages de programmation: Len, Left,
mid,
right et la concaténation (&).
Je ne maîtrise pas très bien VBA, mais ce travail m'aide beaucoup à
mieux comprendre les concepts et de nouvelles fonctions.
J'aime bien la façon dont vous divisez les codes en section : Const
et
Dim, Set, Instructions et Set.
Séparer les parties déclaratives des parties qui s'exécutent rend le
code
plus agréable à (re)lire, donc à maintenir. Normalement, le code
devrait
contenir au moins autant de lignes de commentaires que de ligne de
code, ne
serait-ce que pour expliquer comment est construite la chaîne des
"categories" (séparées par des ; avec un blanc...)
Merci pour l'explication concernant "Dim ol_App As
Outlook.Application"
vs "Dim ol_App As New Outlook.Application". J'aime comprendre et vos
explications me sont très précieuses.
Toutefois, je constate "qu'en anglais" vous restez sceptique !-)) Vous
avez
bien raison !!!
Toutefois, je n'ai pas compris cette remarque :
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que
j'ai
fait pour votre fonction de suppression. cela vous évitera de
supprimer
un élément appartenant à une catégorie qui contient "Avant" sans
être
"Avant".
Comment une catégorie peut-elle contenir "Avant" sans être "Avant" ?
Désolé, ma phrase était ambigue. La catégorie "Avant-hier", contient
la
chaîne "Avant" sans être la catégorie "Avant". Pour éviter de compter,
j'avais utilisé Instr comme une fonction booléenne. Donc, le test
fourni,
comme précisé, n'éliminait pas, dans votre fonction de suppression,
tous les
cas où la chaîne cherchée était inclue dans une autre.
--
Grég
Bon mardi,
Céline
"Grég" <greg@none.none> a écrit dans le message de
news:%23l$zC6LPEHA.3988@tk2msftngp13.phx.gbl...
Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme
l'on
doit
faire maintenant, au début de votre code, donc avec New vous créez
un
objet
inutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous
permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux
éventuelles
autres
catégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que
j'ai
fait
pour votre fonction de suppression. cela vous évitera de supprimer
un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré
et
Ken
Slovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF &
";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories,
";
" & T_
BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > > > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") 1)
Then
strTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:ecUAXlEPEHA.2704@TK2MSFTNGP10.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).
Si le champ Catégories contient plus qu'un Catégories, je ne
peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir
une
seule
catégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
----------------------------------------------------------------------
--
---------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken
Slovak,
mai
2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:40a8847d$0$10205$626a14ce@news.free.fr...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit dans le
message
de
news:uAyF5G7OEHA.1312@TK2MSFTNGP12.phx.gbl...
Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai
réussi
à
renommer les catégories des éléments du dossier Contacts
(voir
codes
ci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".
Si la
catégorie "Avant" est UNE DES catégories de de l'élément alors
cet
élément
aura ensuite come SEULE catégorie "Après".
Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.
Je croyais que tes codes tenaient compte du fait que votre
catégorie
est
seule, en début, fin ou milieu de la chaîne des catégories.
Voir
ligne
suivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu
large."
et
"Les Or
permettent de gérer les catégories multiples sans retenir
celles
du
type *Excel*." Par contre je n'ai pas dit qu'il éliminait
toutes
les
"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie
"Après"
des éléments appartenant à la catégorie "Avant-hier" et "le
bidule
Avant",
si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'est
pas
"Avant" et ne contient pas "; Avant;", alors "Avant;" doit
être en
début de
chaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîne
par
celle qui convient.
Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
Grég
Céline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak,
mai
2004
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" <greg@none.none> a écrit dans le message de
news:uk9dAC4OEHA.3712@TK2MSFTNGP10.phx.gbl...
Céline,
"Céline Brien" <celinebrien@laurentides.qc.ca> a écrit
dans le
message
de
news:eUcqrnQOEHA.3380@TK2MSFTNGP11.phx.gbl...
Si je modifie un peu cette macro, est-il possible
d'obtenir
une
macro
pour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les
cas
que
vous
pouvez
avoir suivant que votre catégorie est seule, en début, fin
ou
milieu
de la
chaîne des catégories. Puis, il suffit d'enlever
l'ancienne
catégorie
et de
la remplacer par la nouvelle dans la chaîne, avant de la
réaffecter à
ol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then.
...
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les
macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég
Céline,
"Céline Brien" a écrit dans le message
de
news:Bonjour à toutes et à tous,
Bonjour Grégoire,
Merci pour votre réponse.
Les codes fonctionnent parfaitement. Je peux maintenant renommer une
catégorie parmi d'autres. L'utilisation des codes strTmp et Len,
c'est
vraiment génial !
strTmp n'est là que pour que le code soit un peu plus lisible. Le
reste
n'est que l'utilisation des fonctions usuelles de manipulation de
chaîne de
caractères dans la plupart des langages de programmation: Len, Left,
mid,
right et la concaténation (&).Je ne maîtrise pas très bien VBA, mais ce travail m'aide beaucoup à
mieux comprendre les concepts et de nouvelles fonctions.
J'aime bien la façon dont vous divisez les codes en section : Const
et
Dim, Set, Instructions et Set.
Séparer les parties déclaratives des parties qui s'exécutent rend le
code
plus agréable à (re)lire, donc à maintenir. Normalement, le code
devrait
contenir au moins autant de lignes de commentaires que de ligne de
code, ne
serait-ce que pour expliquer comment est construite la chaîne des
"categories" (séparées par des ; avec un blanc...)Merci pour l'explication concernant "Dim ol_App As
Outlook.Application"
vs "Dim ol_App As New Outlook.Application". J'aime comprendre et vos
explications me sont très précieuses.
Toutefois, je constate "qu'en anglais" vous restez sceptique !-)) Vous
avez
bien raison !!!Toutefois, je n'ai pas compris cette remarque :
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que
j'ai
fait pour votre fonction de suppression. cela vous évitera de
supprimer
un élément appartenant à une catégorie qui contient "Avant" sans
être
"Avant".
Comment une catégorie peut-elle contenir "Avant" sans être "Avant" ?
Désolé, ma phrase était ambigue. La catégorie "Avant-hier", contient
la
chaîne "Avant" sans être la catégorie "Avant". Pour éviter de compter,
j'avais utilisé Instr comme une fonction booléenne. Donc, le test
fourni,
comme précisé, n'éliminait pas, dans votre fonction de suppression,
tous les
cas où la chaîne cherchée était inclue dans une autre.
--
GrégBon mardi,
Céline
"Grég" a écrit dans le message de
news:%23l$Céline,
Des petites remarques:
"Dim ol_App As Outlook.Application" au lieu de "Dim ol_App As New
Outlook.Application". Vous assignez ol_App à application, comme
l'on
doitfaire maintenant, au début de votre code, donc avec New vous créez
un
objetinutilement.
Les tests supplémentaires, comme ajoutés ci-dessous vous
permettent de
renommer la catégorie "Avant" en "Après" sans toucher aux
éventuelles
autrescatégories des contacts.
Vous pouvez d'ailleurs utiliser les tests un peu plus précis que
j'ai
faitpour votre fonction de suppression. cela vous évitera de supprimer
un
élément appartenant à une catégorie qui contient "Avant" sans être
"Avant".
--
Grég
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grégoire Sandré
et
KenSlovak, mai 2004
' Céline Brien (819) 326-7273
'
Const T_BEF = "Avant"
Const T_AFT = "Après"
Dim ol_App As Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Dim strTmp As String
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = OlContact Then
If ol_ContactItm.Categories = T_BEF Then
ol_ContactItm.Categories = T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF &
";")
1)
Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF & ";") - 1)
strTmp = strTmp & "; " & T_AFT & ";"
strTmp = strTmp & Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - InStr(1, ol_ContactItm.Categories,
";
" & T_BEF & ";") - Len(T_BEF) - 2)
ol_ContactItm.Categories = strTmp
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, "; " & T_BEF) > > > Len(ol_ContactItm.Categories) - Len(T_BEF) - 1) Then
strTmp = Left(ol_ContactItm.Categories, InStr(1,
ol_ContactItm.Categories, "; " & T_BEF) - 1)
ol_ContactItm.Categories = strTmp & "; " & T_AFT
ol_ContactItm.Save
ElseIf (InStr(1, ol_ContactItm.Categories, T_BEF & ";") 1)
ThenstrTmp = Right(ol_ContactItm.Categories,
Len(ol_ContactItm.Categories) - Len(T_BEF))
ol_ContactItm.Categories = T_AFT & strTmp
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Céline Brien" a écrit dans le
message
denews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci beaucoup pour ta réponse.
J'ai intégré les codes que vous m'avez proposés (voir codes
ci-dessous).Si le champ Catégories contient plus qu'un Catégories, je ne
peux
renommer seulement une des catégories.
Ou bien je change le contenu du champ Catégories pour obtenir
une
seulecatégorie.
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Ou bien je renomme la catégorie seulemement si elle est seule :
If ol_ContactItm.Categories = "Avant" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
Selon mes tests, les codes suivants sont inutiles :
' ElseIf InStr(1, ol_ContactItm.Categories, ";Avant;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Avant") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
Merci encore pour cette important mise au point,
Céline
---------------------------------------------------------------------------------------
Option Explicit
Sub RenommerCategoriesMultiplesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Grég et Ken
Slovak,
mai2004
' Céline Brien (819) 326-7273
'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_App = Application
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder = ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Excel" Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";Excel;") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
' ElseIf InStr(1, ol_ContactItm.Categories, ";;Excel") Then
' ol_ContactItm.Categories = "Après"
' ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:40a8847d$0$10205$Céline,
"Céline Brien" a écrit dans le
messagedenews:Bonjour à toutes et à tous,
Bonjour Grég,
Merci pour ta réponse.
Avec l'aide de Ken Slovak, forum Outlook en anglais, j'ai
réussi
àrenommer les catégories des éléments du dossier Contacts
(voir
codesci-dessous).
Attention, votre code ne fait pas que renommer la catégorie
"Avant".Si lacatégorie "Avant" est UNE DES catégories de de l'élément alors
cet
élémentaura ensuite come SEULE catégorie "Après".Il était très important d'enregistrer les éléments :
ol_ContactItm.Save
Oups, j'avais oublié de mettre le .save sous mes tests.Je croyais que tes codes tenaient compte du fait que votre
catégorieestseule, en début, fin ou milieu de la chaîne des catégories.
Voir
lignesuivante :
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
Je me cite à ce sujet "Le test que j'ai mis reste un peu
large."
et"Les Orpermettent de gérer les catégories multiples sans retenir
celles
dutype *Excel*." Par contre je n'ai pas dit qu'il éliminait
toutes
les"Excel*" et "*Excel". Votre code peut mettre dans la seule
catégorie"Après"des éléments appartenant à la catégorie "Avant-hier" et "le
bidule
Avant",si ces éléments appartiennent à plusieurs catégories.
Pour renommer, il faut donc que vous testiez que si la chaîne
n'estpas"Avant" et ne contient pas "; Avant;", alors "Avant;" doit
être en
début dechaîne et "; Avant" en fin de chaîne et remplacer cette
sous-chaîneparcelle qui convient.Je vais réviser le tout à partie de tes conseils.
Merci encore,
C'était un plaisir de vous aider et de vous lire sur
microsoft.public.outlook.program_vba !-))
--
GrégCéline
Option Explicit
Sub RenommerCategoriesDeContacts()
'
' Macro pour renommer la catégorie de contacts
' Macro créée par Céline Brien, avec l'aide de Ken Slovak,
mai
2004'
Dim ol_App As New Outlook.Application
Dim ol_Mapi As Outlook.NameSpace
Dim ol_Folder As Outlook.MAPIFolder
Dim ol_Items As Outlook.Items
Dim ol_ContactItm As Object
Dim LgI As Long
Set ol_Mapi = ol_App.GetNamespace("MAPI")
Set ol_Folder ol_Mapi.GetDefaultFolder(olFolderContacts)
Set ol_Items = ol_Folder.Items
For LgI = ol_Items.Count To 1 Step -1
Set ol_ContactItm = ol_Items(LgI)
If ol_ContactItm.Class = olContact Then
If ol_ContactItm.Categories = "Avant" Or InStr(1,
ol_ContactItm.Categories, "; Avant") Or InStr(1,
ol_ContactItm.Categories, "Avant;") Then
ol_ContactItm.Categories = "Après"
ol_ContactItm.Save
End If
End If
Next LgI
Set ol_ContactItm = Nothing
Set ol_Items = Nothing
Set ol_Folder = Nothing
Set ol_Mapi = Nothing
Set ol_App = Nothing
End Sub
"Grég" a écrit dans le message de
news:Céline,
"Céline Brien" a écrit
dans le
messagedenews:Si je modifie un peu cette macro, est-il possible
d'obtenir
unemacropour renommer une catégorie ?
Il faudra que vous fassiez un peu plus le ménage sur les
cas
quevouspouvezavoir suivant que votre catégorie est seule, en début, fin
ou
milieude lachaîne des catégories. Puis, il suffit d'enlever
l'ancienne
catégorieet dela remplacer par la nouvelle dans la chaîne, avant de la
réaffecter àol_item.categories.
en gros
if ol_item.categories = "à changer" then
ol_item.categories = "changée"
else if InStr(1, ol_ContactItm.Categories, "; à changer;")
then....
else if
End If.
De plus j'ai vu qu'il valait mieux utiliser dans les
macros:
Dim ol_App As Outlook.Application
...
ol_App = application
plutôt que "Dim ol_App As New Outlook.Application"
Cela permet d'avoir un code "trusted" avec OL2K3.
--
Grég