jeudi 11 septembre 2014

Office 365 : des listes d'adresses en français


Modifier les noms des listes d'adresses dans Office 365

Lorsque vous déployez Office 365 un certain nombre de listes d'adresses sont créées dans Echange Online. Vous les retrouvez dans votre carnet d'adresse Outlook. Curieusement ces groupes sont créés en anglais, ce qui nous donne une liste panachant français et anglais... problème mineur, mais qui peut constituer un frein à l'adoption pour certains utilisateurs peu à l'aise avec l'anglais.


Pour pouvoir travailler sur les listes d'adresses vous devez posséder le rôle d'administration "Address Lists" dans Exchange Online. 

Par défaut ce rôle n'est pas attribué, vous devrez donc commencer par créer un nouveau rôle d'administrateur.

Rendez-vous dans le centre d'administration Exchange. Dans le menu "autorisations" cliquez sur le "+" pour créer un nouveau rôle. Ajoutez-y le rôle "Address Lists" et ajoutez votre administrateur dans les membres.




Ouvrez la console PowerShell et connectez-vous à votre tenant.

Nous allons utiliser la cmdlet Set-AddressList pour renommer les groupes existants. Afin de ne pas interférer avec d'autres scripts j'ai choisi de ne pas changer le nom du groupe, mais uniquement son nom d'affichage :

Set-AddressList -Identity "All Contacts" -DisplayName "Tous les contacts"
Set-AddressList -Identity "All Distribution Lists" -DisplayName "Toutes les listes de distribution"
Set-AddressList -Identity "All Rooms" -DisplayName "Toutes les salles"
Set-AddressList -Identity "All Users" -DisplayName "Tous les utilisateurs"
Set-AddressList -Identity "Offline Global Address List" -DisplayName "Liste d'adresses globale hors ligne"

Redémarrez Outlook et vous obtiendrez une liste un peu plus francophone :


Reste le problème du "All Address Lists"... à priori pour l'instant Exchange Online ne propose pas de CmdLet permettant de toucher à cet objet.


mercredi 10 septembre 2014

Office 365 et les groupes dynamiques

Qu’est-ce qu’un groupe dynamique ?

Les groupes dynamiques sont des groupes de distributions auxquels Exchange va assigner des membres en fonctions de critères définis par l’administrateur. 

A la différence des groupes basés sur l'Active Directory, ces groupes sont recalculés à chaque utilisation.

Ils vont nous permettre de facilement toucher tous les membres d'un service ou tous les utilisateurs d'un site.

Création d’un groupe dynamique

Les groupes dynamiques peuvent être créés via l'interface d'administration Exchange Online, toutefois lorsque vous aurez la nécessité de créer des filtres plus complexes vous devrez recourir à PowerShell.

Exemple 1 : création d’un groupe basé sur l’appartenance à un service (via Interface)

Dans l’administration Exchange, sélectionnez le menu « destinataire » puis « groupes ».
Cliquez sur le « » et sélectionnez « Groupe de distribution dynamique ».

Dans le champ « L’appartenance à ce groupe sera déterminée par les règles configurées ci-dessous » sélectionnez « Service » puis tapez le nom du service pour lequel vous souhaitez regrouper les membres (dans l’exemple ci-dessous : « méthodes »).

Exemple 2 : création d’un groupe basé sur l’appartenance à un service (via PowerShell)

Cet exemple produit le même résultat que l’exemple 1, mais avec une création en ligne de commande.

Une fois connecté à votre tenant Office 365 exécutez la commande PowerShell suivante :
New-DynamicDistributionGroup -Name "Nom du groupe" -IncludedRecipients MailboxUsers -ConditionalDepartment "Nom du service"

Par exemple :

New-DynamicDistributionGroup -Name "Groupe Service Informatique" -IncludedRecipients MailboxUsers -ConditionalDepartment Informatique


Exemple 3 : création d’un groupe basé sur le service et la ville

Dans cet exemple nous allons créer un groupe comprenant tous les membres du bureau d’études de Paris.

Pour cela nous allons assumer le fait que notre Active Directory n'a pas été renseignée de manière optimale et que le service "bureau d'études" souffre donc de plusieurs formes d'écritures différentes.

Vous noterez également que l'interface web ne permet pas de réaliser de filtrage sur la ville. PowerShell est donc indispensable dans ce cas.

Vous noterez :
  •         La possibilité d’utiliser un opérateur « like »
  •         La possibilité d’utiliser un opérateur « or »


Une fois connecté au tenant exécutez la commande PowerShell suivante :

New-DynamicDistributionGroup -Name "Groupe BE Paris" -RecipientFilter {(RecipientType -eq "UserMailbox") -and (Department -like "BUREAU? ETUDE*" -or Department -like "BE *" -or Department -like "Bureau? d'études") -and (City -eq "Paris")}

Pour plus d’infos sur les groupes dynamiques : http://help.outlook.com/fr-fr/140/Dd264647.aspx  

Voir les membres d’un groupe

Les membres d’un groupe dynamique ne sont pas visibles via l’interface web.

Une fois connecté au tenant exécuter les commandes PowerShell suivantes :
$DDG = Get-DynamicDistributionGroup "Nom du groupe"
Get-Recipient -RecipientPreviewFilter $DDG.RecipientFilter

Connection PowerShell à un tenant Office 365

Ce billet est le premier d'une série consacrée à l'administration d'Office 365. On commence simple, avec l'ouverture d'une session sous PowerShell.

Ouverture de session


1 ) Ouvrir PowerShell

2) S’authentifier via la commande :
$LiveCred = Get-Credential

Une boite de dialogue s’ouvre : Saisissez un identifiant administrateur Office 365.

3) Ouvrez une session sur le tenant Office 365 via la commande :


$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 
https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic –AllowRedirection


4) Importez les commandes relatives à Office 365 via la commande :

Import-PSSession $Session


Vous êtes maintenant connecté au tenant Office 365.

Fin de session

En fin de session il est nécessaire de se déconnecter du tenant via la commande :

Remove-PSSession $Session

Si ce n’est pas fait votre session reste ouverte pendant 15 minutes. Vous ne pourrez pas vous reconnecter pendant ce laps de temps.

Créer un profil PowerShell

Afin d’éviter de retenir et taper ces commandes à chaque fois il est possible de créer un profil PowerShell.

Vous pouvez récupérer le chemin vers votre profil via la commande :

Dir $Profile

Créez un fichier .PS1 et copiez dedant les commandes d'ouverture de session.

lundi 28 juillet 2014

Excel : les heures décimales

Il vous est probablement déjà arrivé d'effectuer un calcul qui vous renvoie un nombre d'heures sous forme décimale.

Par exemple vous souhaitez vider une piscine qui contient 1000 litres d'eau, votre évacuation permet d'évacuer 500 litres/heure. Vous allez réaliser le petit calcul 1000 / 500 = 0,5 heures soit 0h30 minutes.

Le problème est que vous ne savez pas quoi faire avec ce 0.5... tout le monde sait que ça représente 1/2 heure, mais dans Excel ça coince...

Une heure décimale n'est pas un numéro de série

Si vous avez un peu fouillé dans les fonctions Excel vous êtes probablement tombés sur les fonctions Heure() et Minute(), et vous aurez constaté qu'elles prennent en paramètre un numéro de série.

Ce que Microsoft appelle un numéro de série est tout simplement une représentation décimale d'une journée : 24h00 = 1.

La formule pour transformer une heure décimale en numéro de série est donc : heure / 24

Ainsi la fonction Minute() va s'utiliser ainsi :

Cool... sauf que ce n'est pas ce que nous recherchons... refaite l'essai avec 1.75 (soit 1h45)...

Les fonctions Heure() et Minute()

Contrairement à ce que beaucoup d'utilisateurs pensent les fonctions Heure() et Minute() ne vont pas afficher une heure sous la forme hh:mm. Ces fonctions sont prévues pour renvoyer soit l'heure, soit les minutes, d'une heure exprimée sous la forme hh:mm.

Ainsi pour une valeur de 1.75 la fonction Heure() va nous renvoyer 1 :

Et Minute() nous donnera 45.

Bon OK, avec un Concatener() il serait possible d'obtenir un affichage sous la forme 01h45, mais avouez que ça serait un peu lourd :

Le format de cellule "Heure"

Et oui... vous étiez tellement plongé dans vos formules que vous en avez oublié la simplicité.

Pour transformer votre 1.75 en 01:45 il vous suffit de le diviser par 24 pour ramener cette valeur en jours, et de vous rendre dans le menu "Format de cellule". Sélectionnez "Heure" dans la liste... et c'est tout !



Calculs d'angles avec Excel

Beaucoup d'utilisateurs sont décontenancés par le fait qu'Excel ne gère pas les angles en degrés, mais en radians.


Convertir les degrés en radians avec Excel

Toutes les fonctions relatives aux angles dans Excel prennent en paramètre des angles exprimés en radians :
Cos, Sin, Tan,...

Pour convertir vos angles en degrés vers des radians la formule est : Angle * Pi() / 180

Rassurez-vous Microsoft a pensé à tout et à inclus dans Excel une fonction toute prête : RADIANS()

Ce qui donne dans Excel (pour un angle de 45°) :

Convertir les radians en degrés avec Excel

En toute logique les résultats fournis par Excel sont eux aussi exprimés en radians.

Pour convertir vos angles en radians vers des degrés la formule est : Angle * 180 / Pi()

Là encore Excel vous propose une fonction toute prête : DEGRES()

Son utilisation est la suivante :





jeudi 9 décembre 2010

Importer des champs Word dans Excel

Vous avez réalisé un formulaire sous Word ? Parfait... mais en toute logique vous n'avez pas envie de ressaisir tous les résultats dans Excel pour en tirer des statistiques.

Le petit boût de code VBA ci-dessous pourra vous aider. Ajoutez le dans une macro Excel et il vous permettra de copier le contenu de tous les champs de votre formulaire Word vers Excel. Sur la première ligne vous retrouverez le nom de vos champs Word.

Sub ImportWord()

Dim Wd As Word.Application
Dim filename As String
Dim i As Byte
    
    
    'On affiche la boite de dialogue pour sélectionner le fichier
    filename = Application.GetOpenFilename("Fichier Word (*.doc*),*.doc*", 1, "Sélectionnez un document Word", "Ouvrir", False)
    
    'On vérifie qu'un fichier a été sélectionné
    If filename <> "" Then
        filename = LCase(filename)
        'et qu'il s'agit d'un document word
        If Right(filename, 3) = "doc" Or Right(filename, 4) = "docx" Then
    
            'Créer une instance de word
            Set Wd = New Word.Application
            
            With Wd
                'Empêche Word de s'afficher à l'ouverture
                .Visible = False
                
                'Ouverture du document
                .documents.Open (filename)
                
                'Parcours de la collection de champs
                Dim f As Field
                For Each f In .ActiveDocument.Fields
                    'Nom du champs
                    Cells(1, f.Index).Value = .ActiveDocument.FormFields(f.Index).Name
                    
                    'Valeur du champs si case à cocher
                    If f.Type = 71 Then
                        Cells(2, f.Index).Value = .ActiveDocument.FormFields(f.Index).CheckBox.Value
                    Else 'autres champs
                        Cells(2, f.Index).Value = f.Result.Text
                    End If
                Next
                
                'Ferme le document Word
                .Quit False
            End With
            
            'Destruction de l'objet word
            Set Wd = Nothing
        End If
    End If

End Sub

jeudi 3 juin 2010

Visual Studio 2010 : La valeur ne peut pas être null.

Hier sur un projet j'ai eu la désagréable surprise de recevoir un message "La valeur ne peut pas être null. Nom du paramètre : objectType" lors de la tentative d'ouverture d'une winforms. Le designer refuse alors d'ouvrir la forms, si vous passez outre l'avertissement la forms s'affiche bien mais toute action est très lente.

Après avoir perdu pas mal de temps à chercher, j'ai découvert que pour corriger ce problème il faut changer le modificateur d'accès de la classe gérant notre formulaire de "Friend" en "Public".
Ce bug est en cours d'étude par Microsoft.