none
Comment importer des contacts dans Dossiers Publics RRS feed

  • Question

  • Bonjour,

    J'ai de nombreux commerciaux qui ont enregistrés leurs contacts sur leur version installée d'Outlook 2013 sur leur PC.

    Le souhait est d'importer tous les contacts des commerciaux dans Dossiers Publics au besoin en créant une structure de type

    Dossiers Publics\Contacts\France\NonDuCommercial1

    Dossiers Publics\Contacts\France\NonDuCommercial2

    Dossiers Publics\Contacts\France\NonDuCommercial3

    Dossiers Publics\Contacts\France\NonDuCommercial4

    Dossiers Publics\Contacts\France\NonDuCommercial5

    Dossiers Publics\Contacts\Italie\NonDuCommercial1

    ...

    Cette structure existe déjà et chaque commercial est tenu de copier régulièrement ses contacts depuis sa version d'Outlook depuis les dossiers publics ... mais ce n'est pas toujours fait.

    L'idée est donc d'exporter tous les contacts par chacun (ça, c'est OK, j'ai la bonne commande qui exporte tous les contacts dans des PST*) puis de tout réimporter, PST par PST dans les répertoires de Dossiers Publics. Et là ... ben ... je ne trouve aucune commande d'importation de PST dans Dossiers Publics.

    Comment importer les contacts d'un PST dans les contacts de Dossiers Publics ?

    Merci par avance pour l'aide apportée.

    * pour info, mon export est le suivant :

    New-MailboxExportRequest -Mailbox utilisateur@domaine.com -IncludeFolders "#Contacts#" -excludedumpster -FilePath "\\MonServeur\c$\scripttemp\utilisateur.pst"

    vendredi 14 février 2020 09:11

Réponses

  • Bonjour,

    il serait plus simple de passer un script/macro en VBA/VBS :

    https://docs.microsoft.com/fr-fr/office/vba/api/outlook.folder.folders

    Les contacts seraient copiés directement par l'utilisateur vers son dossier public correspondant.

    ---- Petit exemple d'accès aux dossiers contacts (publics ou non) en VBS

    Dim WSHShell
    Dim appOutlook
    Dim mapiNameSpace
    Dim ChoixContact
    Dim NbC
    
    ' vor usage des constantes OutLook dans C:\Program Files\Microsoft Office\Office\1036\VBAOUTL9.CHM
    ' Constantes de tous les objects OutLook OlObjectClass
    Const olAction=32
    Const olActions=33
    Const olAddressEntries=21
    Const olAddressEntry=8
    Const olAddressList=7
    Const olAddressLists=20
    Const olApplication=0
    Const olAppointment=26
    Const olAttachment=5
    Const olAttachments=18
    Const olContact=40
    Const olDistributionList=69
    Const olDocument=41
    Const olException=30
    Const olExceptions=29
    Const olExplorer=34
    Const olExplorers=60
    Const olFolder=2
    Const olFolders=15
    Const olFormDescription=37
    Const olInspector=35
    Const olInspectors=61
    Const olItems=16
    Const olJournal=42
    Const olLink=75
    Const olLinks=76
    Const olMail=43
    Const olMeetingCancellation=54
    Const olMeetingRequest=53
    Const olMeetingResponseNegative=55
    Const olMeetingResponsePositive=56
    Const olMeetingResponseTentative=57
    Const olNamespace=1
    Const olNote=44
    Const olOutlookBarGroup=66
    Const olOutlookBarGroups=65
    Const olOutlookBarPane=63
    Const olOutlookBarShortcut=68
    Const olOutlookBarShortcuts=67
    Const olOutlookBarStorage=64
    Const olOutlookPropertyPageSite=70
    Const olPages=36
    Const olPanes=62
    Const olPost=45
    Const olPropertyPages=71
    Const olRecipient=4
    Const olRecipients=17
    Const olRecurrencePattern=28
    Const olRemote=47
    Const olReport=46
    Const olSelection=74
    Const olSyncObject=72
    Const olSyncObjects=73
    Const olTask=48
    Const olTaskRequest=49
    Const olTaskRequestAccept=51
    Const olTaskRequestDecline=52
    Const olTaskRequestUpdate=50
    Const olUserProperties=38
    Const olUserProperty=39
    
    ' Constantes OlItemType
    Const olAppointmentItem=1
    Const olContactItem=2
    Const olDistributionListItem=7
    Const olJournalItem=4
    Const olMailItem=0
    Const olNoteItem=5
    Const olPostItem=6
    Const olTaskItem=3
    
    'constantes OlDefaultFolders
    Const olFolderCalendar=9
    Const olFolderContacts=10
    Const olFolderDeletedItems=3
    Const olFolderDrafts=16
    Const olFolderInbox=6
    Const olFolderJournal=11
    Const olFolderNotes=12
    Const olFolderOutbox=4
    Const olFolderSentMail=5
    Const olFolderTasks=13
    
    
    
    
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    ' Ce n'est pas parce qu'on fait du VB (script qui plus est ) qu'on ne va pas traiter des expressions regulieres
    Set re = New RegExp  
        re.Global = True
        re.IgnoreCase = True
    
    ' Authentification dans Outlook
    Set appOutlook = CreateObject("Outlook.Application")
    Set mapiNameSpace = appOutlook.GetNameSpace("MAPI")
    
    'ChoixContact
    ChoixContact=1
    Select Case ChoixContact
    Case 1
    	Set objFolder = mapiNameSpace.GetDefaultFolder(olFolderContacts)
    Case 2
    	' Lecture des Contacts publics
    	Set PubFold = mapiNameSpace.Folders("Dossiers publics")
    	' lecture du dossier "Tous" si connexion en ligne
    	'Set Tous = PubFold.Folders("Tous")
    	Set objFolder = Tous.Folders("ContactsPartages")
    Case 3
    	' Lecture des Contacts publics
    	Set PubFold = mapiNameSpace.Folders("Dossiers publics")
    	' lecture du dossier "Favoris" si accès en mode autonaume
    	Set Tous = PubFold.Folders("Favoris")
    	Set objFolder = Tous.Folders("ContactsPartages")
    End Select
    
    NbC=0
      WScript.echo "Il y a : ", objFolder.Items.count , " contacts"
    'choisir de parcourrir les éléments avec les 2 lignes suivantes ou les 2 d'après  
    'For Each objContact In objFolder.Items
    '  NbC=NbC+1
    'For NbC=1 to objFolder.Items.count
    For NbC=4 to 4
      Set objContact = objFolder.Items.Item(NbC)
      ' Vérification si la classe de l'élément est de type olContact et non pas de type olDistributionList
      If objContact.Class = olContact Then
    
    	  WScript.echo objContact
    	  WScript.echo "#",NbC," ", objContact.FirstName, objContact.LastName
    	  If objContact.BusinessTelephoneNumber <> "" Then
    		  WScript.echo "Tel :", objContact.BusinessTelephoneNumber
    		  WScript.echo "Fax :", objContact.BusinessFaxNumber
    		  'Champs avec numéro de téléphone: 
    		  ' propriétés de l'objet ContactItem tirée du fichier d'aide VBA pour Outlook
    		  'AssistantTelephoneNumber, Business2TelephoneNumber, BusinessFaxNumber, BusinessTelephoneNumber, CallbackTelephoneNumber, CarTelephoneNumber, CompanyMainTelephoneNumber, Home2TelephoneNumber, HomeFaxNumber, HomeTelephoneNumber, ISDNNumber, MobileTelephoneNumber, OtherFaxNumber, OtherTelephoneNumber, PrimaryTelephoneNumber, RadioTelephoneNumber
              ' tester le numéro avec une expression reguliere
    		  re.pattern="\+33 \([1-5]\) [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9]"
    		  ret=re.test(objContact.BusinessTelephoneNumber)
    		  if not ret Then
    		    WScript.echo "CORRIGER ce numero : ", objContact.BusinessTelephoneNumber
    			' saisir ou calculer le bon format du numéro
    		
    			' sauvegarder le contact modifié
    			'objContact.save
    		  end if
    		  
    		  
    	  End If
      else
        	  WScript.echo ">>>", objContact, " est de type ", objContact.Class
    
      End If	  
    Next
    
    
    Set objContact = Nothing
    Set objFolder = Nothing
    
    
    A bientôt,


    Thierry DEMAN-BARCELO. Offce Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    vendredi 14 février 2020 10:27
    Modérateur
  • Remarque,

    Après réflexion, il serait plus simple de définir le dossier public de chaque utilisateur dans ses favoris, puis de demander une synchronisation locale.

    En mettant à jour les contacts dans le dossier favori (copie locale), le dossier serait synchronisé et mis à jour automatiquement dans les dossiers publics.

    => Il suffirait de copier une fois les contacts de chaque personne dans ce dossier favori, (qui peut définir comme carnet d'adresse Outlook).

    A bientôt, 


    Thierry DEMAN-BARCELO. Offce Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info


    vendredi 14 février 2020 10:32
    Modérateur

Toutes les réponses

  • Bonjour,

    il serait plus simple de passer un script/macro en VBA/VBS :

    https://docs.microsoft.com/fr-fr/office/vba/api/outlook.folder.folders

    Les contacts seraient copiés directement par l'utilisateur vers son dossier public correspondant.

    ---- Petit exemple d'accès aux dossiers contacts (publics ou non) en VBS

    Dim WSHShell
    Dim appOutlook
    Dim mapiNameSpace
    Dim ChoixContact
    Dim NbC
    
    ' vor usage des constantes OutLook dans C:\Program Files\Microsoft Office\Office\1036\VBAOUTL9.CHM
    ' Constantes de tous les objects OutLook OlObjectClass
    Const olAction=32
    Const olActions=33
    Const olAddressEntries=21
    Const olAddressEntry=8
    Const olAddressList=7
    Const olAddressLists=20
    Const olApplication=0
    Const olAppointment=26
    Const olAttachment=5
    Const olAttachments=18
    Const olContact=40
    Const olDistributionList=69
    Const olDocument=41
    Const olException=30
    Const olExceptions=29
    Const olExplorer=34
    Const olExplorers=60
    Const olFolder=2
    Const olFolders=15
    Const olFormDescription=37
    Const olInspector=35
    Const olInspectors=61
    Const olItems=16
    Const olJournal=42
    Const olLink=75
    Const olLinks=76
    Const olMail=43
    Const olMeetingCancellation=54
    Const olMeetingRequest=53
    Const olMeetingResponseNegative=55
    Const olMeetingResponsePositive=56
    Const olMeetingResponseTentative=57
    Const olNamespace=1
    Const olNote=44
    Const olOutlookBarGroup=66
    Const olOutlookBarGroups=65
    Const olOutlookBarPane=63
    Const olOutlookBarShortcut=68
    Const olOutlookBarShortcuts=67
    Const olOutlookBarStorage=64
    Const olOutlookPropertyPageSite=70
    Const olPages=36
    Const olPanes=62
    Const olPost=45
    Const olPropertyPages=71
    Const olRecipient=4
    Const olRecipients=17
    Const olRecurrencePattern=28
    Const olRemote=47
    Const olReport=46
    Const olSelection=74
    Const olSyncObject=72
    Const olSyncObjects=73
    Const olTask=48
    Const olTaskRequest=49
    Const olTaskRequestAccept=51
    Const olTaskRequestDecline=52
    Const olTaskRequestUpdate=50
    Const olUserProperties=38
    Const olUserProperty=39
    
    ' Constantes OlItemType
    Const olAppointmentItem=1
    Const olContactItem=2
    Const olDistributionListItem=7
    Const olJournalItem=4
    Const olMailItem=0
    Const olNoteItem=5
    Const olPostItem=6
    Const olTaskItem=3
    
    'constantes OlDefaultFolders
    Const olFolderCalendar=9
    Const olFolderContacts=10
    Const olFolderDeletedItems=3
    Const olFolderDrafts=16
    Const olFolderInbox=6
    Const olFolderJournal=11
    Const olFolderNotes=12
    Const olFolderOutbox=4
    Const olFolderSentMail=5
    Const olFolderTasks=13
    
    
    
    
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    ' Ce n'est pas parce qu'on fait du VB (script qui plus est ) qu'on ne va pas traiter des expressions regulieres
    Set re = New RegExp  
        re.Global = True
        re.IgnoreCase = True
    
    ' Authentification dans Outlook
    Set appOutlook = CreateObject("Outlook.Application")
    Set mapiNameSpace = appOutlook.GetNameSpace("MAPI")
    
    'ChoixContact
    ChoixContact=1
    Select Case ChoixContact
    Case 1
    	Set objFolder = mapiNameSpace.GetDefaultFolder(olFolderContacts)
    Case 2
    	' Lecture des Contacts publics
    	Set PubFold = mapiNameSpace.Folders("Dossiers publics")
    	' lecture du dossier "Tous" si connexion en ligne
    	'Set Tous = PubFold.Folders("Tous")
    	Set objFolder = Tous.Folders("ContactsPartages")
    Case 3
    	' Lecture des Contacts publics
    	Set PubFold = mapiNameSpace.Folders("Dossiers publics")
    	' lecture du dossier "Favoris" si accès en mode autonaume
    	Set Tous = PubFold.Folders("Favoris")
    	Set objFolder = Tous.Folders("ContactsPartages")
    End Select
    
    NbC=0
      WScript.echo "Il y a : ", objFolder.Items.count , " contacts"
    'choisir de parcourrir les éléments avec les 2 lignes suivantes ou les 2 d'après  
    'For Each objContact In objFolder.Items
    '  NbC=NbC+1
    'For NbC=1 to objFolder.Items.count
    For NbC=4 to 4
      Set objContact = objFolder.Items.Item(NbC)
      ' Vérification si la classe de l'élément est de type olContact et non pas de type olDistributionList
      If objContact.Class = olContact Then
    
    	  WScript.echo objContact
    	  WScript.echo "#",NbC," ", objContact.FirstName, objContact.LastName
    	  If objContact.BusinessTelephoneNumber <> "" Then
    		  WScript.echo "Tel :", objContact.BusinessTelephoneNumber
    		  WScript.echo "Fax :", objContact.BusinessFaxNumber
    		  'Champs avec numéro de téléphone: 
    		  ' propriétés de l'objet ContactItem tirée du fichier d'aide VBA pour Outlook
    		  'AssistantTelephoneNumber, Business2TelephoneNumber, BusinessFaxNumber, BusinessTelephoneNumber, CallbackTelephoneNumber, CarTelephoneNumber, CompanyMainTelephoneNumber, Home2TelephoneNumber, HomeFaxNumber, HomeTelephoneNumber, ISDNNumber, MobileTelephoneNumber, OtherFaxNumber, OtherTelephoneNumber, PrimaryTelephoneNumber, RadioTelephoneNumber
              ' tester le numéro avec une expression reguliere
    		  re.pattern="\+33 \([1-5]\) [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9]"
    		  ret=re.test(objContact.BusinessTelephoneNumber)
    		  if not ret Then
    		    WScript.echo "CORRIGER ce numero : ", objContact.BusinessTelephoneNumber
    			' saisir ou calculer le bon format du numéro
    		
    			' sauvegarder le contact modifié
    			'objContact.save
    		  end if
    		  
    		  
    	  End If
      else
        	  WScript.echo ">>>", objContact, " est de type ", objContact.Class
    
      End If	  
    Next
    
    
    Set objContact = Nothing
    Set objFolder = Nothing
    
    
    A bientôt,


    Thierry DEMAN-BARCELO. Offce Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    vendredi 14 février 2020 10:27
    Modérateur
  • Remarque,

    Après réflexion, il serait plus simple de définir le dossier public de chaque utilisateur dans ses favoris, puis de demander une synchronisation locale.

    En mettant à jour les contacts dans le dossier favori (copie locale), le dossier serait synchronisé et mis à jour automatiquement dans les dossiers publics.

    => Il suffirait de copier une fois les contacts de chaque personne dans ce dossier favori, (qui peut définir comme carnet d'adresse Outlook).

    A bientôt, 


    Thierry DEMAN-BARCELO. Offce Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info


    vendredi 14 février 2020 10:32
    Modérateur
  • Bonjour,

    Si la mise ne place de l'extraction est facile pour chaque utilisateur ...

    New-MailboxExportRequest -Mailbox utilisateur@domaine.com -IncludeFolders "#Contacts#" -excludedumpster -FilePath "\\MonServeur\c$\scripttemp\utilisateur.pst"

    Sa réimportation me semble bien plus compliquée avec ce script VB, qui, il me semble, devrait être lancé via le PC de l'utilisateur.

    Je pense que je vais aller vers la seconde solution, via la mise en favoris du dossier public de chaque commercial. C'est un peu long à mettre en place, je vais me battre un peu pour qu'ils utilisent ce dossier pour stocker les infos mais cela correspond au besoin. Je vais quand même doubler mon action en exportant (puisque maintenant, j'ai la commande qui va bien) pour garder un historique au cas où quelqu'un supprimerait par erreur un contact.

    Merci pour l'idée du favori !



    lundi 17 février 2020 09:54