Catégorie: Récapitulatif Office

28/04/2012

Permalink 16:09:19, Catégories: Récapitulatif Office, Access, SQL Access, 551 mots   French (FR) , user []

[Office] Créer un semainier à partir d'une requête paramétrée

Objectif

On souhaite afficher les activités de personnes sur 1 semainier et on dispose pour cela de 2 tables:

La table "T_Personne" avec le numéro de la personne et son nom :

  • NumPersonne : type Entier long (clé)
  • NomPersonne : type Texte

Et la table "T_Planning" contenant 10 champs :

  • NumPersonne : type Entier long (clé)
  • Annee : type Entier (clé)
  • NumSemaine : type Entier (clé)
  • Lundi : type Texte
  • Mardi : type Texte
  • Mercredi : type Texte
  • Jeudi : type Texte
  • Vendredi : type Texte
  • Samedi : type Texte
  • Dimanche : type Texte


Pour atteindre notre objectif, on va réaliser une requête paramétrée avec en lignes les informations concernant les personnes, en colonnes les jours de la semaine, et à l'intersection les activités.

Cette requête sera alors facilement exploitable comme source d'un formulaire.

Marche à suivre

1) Création de la requête paramétrée

L'étape suivant consiste à créer une requête "R_Plan", basée sur la table "T_Planning", qui affiche les activités des jours de la semaine identifiée par les paramètres [Forms]![F_Planning]![Annee] et [Forms]![F_Planning]![NumSemaine], qui sont en fait des références aux contrôles situés sur le formulaire "F_Planning" :

PARAMETERS [Forms]![F_Planning]![Annee] Value, [Forms]![F_Planning]![NumSemaine] Value; 
SELECT NumPersonne, Annee, NumSemaine, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche 
FROM T_Planning 
WHERE ((Annee=[Forms]![F_Planning]![Annee]) AND (NumSemaine=[Forms]![F_Planning]![NumSemaine])); 

2) Afficher toutes les personnes

Cette étape consiste à afficher toutes les personnes en en-têtes de lignes, y compris celles qui n'ont pas eu d'activité au cours de la période. On crée donc une requête "R_Planning" basée sur la table "T_Personne" et sur la dernière requête "R_Plan" et qui réalise une jointure gauche entre la table "T_Personne" et la requête "R_Plan" sur le champ "NumPersonne" :

SELECT T_Personne.NumPersonne, T_Personne.NomPersonne, R_Plan.* 
FROM T_Personne LEFT JOIN R_Plan ON T_Personne.NumPersonne = R_Plan.NumPersonne 
ORDER BY T_Personne.NumPersonne;

3) Création du sous-formulaire "SF_Planning"

Ce formulaire en mode continu ou feuille de données possède comme source la requête "R_Planning".
Il affiche en ligne les personnes et en colonnes les jours de la semaine.
Il est intégré au formulaire principal.

Pour mettre à jour les champ [Annee] et [NumSemaine] on ajoutera, sur l'évènement Avant MAJ, le code suivant :

Private Sub Form_BeforeUpdate(Cancel As Integer) 
[Annee] = Forms!F_Planning!Annee 
[NumSemaine] = Forms!F_Planning!NumSemaine 
 
End Sub

4) Création du formulaire principal "F_Planning"

Ce formulaire contiendra, en plus du sous-formulaire, les contrôles (zones de texte ou listes déroulantes) nommés "Annee" pour l'année, et "NumSemaine" pour le numéro de semaine.
On ajoutera une commande pour rafraichir le sous formulaire sur l'évènement Après MAJ des 2 contrôles :

Private Sub Annee_AfterUpdate() 
Me!SF_Planning.requery 
End Sub 
 
Private Sub NumSemaine_AfterUpdate() 
Me!SF_Planning.requery 
End Sub

Conclusion

Vous pouvez facilement adapter cet exemple à votre cas en changeant au besoin les noms des champs et des contrôles.

Notez que les données peuvent être directement mise à jour sur le planning.

Vous devez être identifié pour poster un commentaire.

27/04/2012

Permalink 16:37:27, Catégories: Récapitulatif Office, Access, SQL Access, 595 mots   French (FR) , user []

[Office] Afficher un planning au moyen d'une requête analyse croisée

Objectif

On souhaite afficher les activités de personnes sur 1 planning et on dispose pour cela de 2 tables :

La table "T_Personne" avec le numéro de la personne et son nom :

  • NumPersonne : clé primaire
  • NomPersonne : type Texte

Et la table "T_Planning" contenant 4 champs :

  • id : clé primaire
  • DateDebut : type Date
  • DateFin : type Date
  • Activite : type Texte
  • NumPersonne : clé étrangère


Pour atteindre notre objectif, on va réaliser une requête analyse croisée avec en en-têtes de lignes les informations concernant les personnes, en en-têtes de colonnes les indices des jours et à l'intersection les activités.

Cette requête sera alors facilement exploitable comme source d'un formulaire.

Marche à suivre

1) Définition des indices de colonnes

Tout d'abord, il nous faut définir le nombre de colonnes, le nombre de jours à afficher dans la requête analyse croisée, normalement 31.
Pour cela, on doit créer une table "T_Jour" contenant les indices des 31 jours (1,2,3...31).

2) Génération des 31 dates

Puis, il nous faut générer les dates correspondant aux 31 indices partant d'une date entrée en paramètre d'une requête.
On crée donc une requête paramétrée "R_Jour", basée sur la table précédente et qui affiche les 31 jours à partir du jour [Jour1] passé en paramètre.

PARAMETERS [Jour1] DateTime; 
SELECT T_Jour.Jour, [Jour1]+[Jour]-1 AS DateJ 
FROM T_Jour;

Notez que le paramètre [Jour1] peut aussi bien être un contrôle dans un formulaire.

3) Générer les jours intermédiaires entre les dates de début et de fin

L'étape suivant consiste à créer une requête "R_Plan", basée sur la requête "R_Jour" et la table "T_Planning", qui affiche tous les jours à planifier, y compris les jours intermédiaires entre les dates de début et de fin :

SELECT T_Planning.*, R_Jour.DateJ 
FROM R_Jour, T_Planning 
WHERE (R_Jour.DateJ BETWEEN [DateDebut] AND [DateFin]);

4) Afficher toutes les personnes

L'avant dernière étape consiste à afficher toutes les personnes, y compris celles qui n'ont pas eu d'activité au cours de la période. On crée donc une requête "R_Planning" basée sur la table "T_Personne" et sur la dernière requête "R_Plan" et qui réalise une jointure gauche entre la table "T_Personne" et la requête "R_Plan" sur le champ "NumPersonne" :

SELECT T_Personne.NumPersonne, T_Personne.NomPersonne, R_Plan.[DateJ] AS Jour, R_Plan.Activite AS Activite 
FROM T_Personne LEFT JOIN R_Plan ON T_Personne.NumPersonne = R_Plan.NumPersonne 
ORDER BY T_Personne.NumPersonne;

5) Créer la requête analyse croisée

Enfin, on va réaliser une requête croisée basée sur la table "T_Personne" et sur la dernière requête "R_Planning" et qui affiche, en lignes les informations des personnes, et en colonnes les indices des 31 jours partant du 1er jour passé en paramètre :

TRANSFORM First(Activite) AS Activite 
SELECT NumPersonne, NomPersonne 
FROM R_Planning 
GROUP BY NumPersonne, NomPersonne 
ORDER BY NumPersonne 
PIVOT DateDiff("d",[Jour1],[Jour])+1 In (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);

La clause Pivot désigne les en-têtes de colonnes et l'opérateur In permet de fixer les colonnes : Ici, la requête comportera 31 colonnes (1,2..31).

L'expression DateDiff("d",[Jour1],[Jour])+1 renvoie l'indice du jour partant du 1er jour passé en paramètre.

Conclusion

Vous pouvez facilement adapter cet exemple à votre cas et utiliser le résultat dans un formulaire en mode continu.

Vous devez être identifié pour poster un commentaire.

03/04/2012

Permalink 16:50:50, Catégories: Récapitulatif .NET, Récapitulatif Office, Sharepoint, 854 mots   French (BE) , jab []

[.NET][Office] SharePoint 2007: Créer des interactions dans les écrans de saisie en utilisant des colonnes personnalisées

Vous êtes encore confronté à du SharePoint 2007 existant qui doit évoluer ou simplement vous n'avez pas migré vers SharePoint 2010. Si c'est le cas, ce blog peut vous être utile. Attention, la démarche décrite ci-dessous n'est pas portable vers SharePoint 2010.

Il ne s’agit pas ici d’expliquer comment faire une colonne personnalisée mais uniquement de discuter des interactions entres champs dans les écrans de saisie SharePoint..

Le cas le plus typique et le plus souvent demandé est la cascading dropdown. Il existe sur internet une solution gratuite que nous avons-nous même utilisé jusqu’au jour où il m’a été demandé de lui ajouter des caractéristiques plus avancées (parents multiples, choix multiples)

J’avais alors le choix soit de partir de cette classe, soit de partir sur une nouvelle conception. Vous l’aurez compris, c’est cette deuxième solution que j’ai choisi. Pourquoi, d’une part il n’était pas aisé d’inclure les nouvelles caractéristiques dans le concept existant. D’autre part, je n’ai jamais aimé le principe d’avoir une colonne parent également personnalisée. Toutefois, pour partie, les deux solutions sont basées sur le même concept. L’idée de base est d’abonner le contrôle de la colonne personnnalisée à un événement du contrôle de rendu d’une autre colonne, personnalisée ou non. Pour mon cas concret, je suis parti sur l’élément « SelectedIndexChange » mais le principe fonctionne sur n’importe quel événement. Evidemment l’événement choisi va déterminer les types de contrôles qui pourront être connectés.

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

27/03/2012

Permalink 18:10:10, Catégories: Récapitulatif Office, Autres, 142 mots   French (FR) , michaël []

[Office] Accéder à la vue impression en backstage en VBA

Voici un petit truc assez pratique. J'ai un fichier Excel avec des macros qui me génère une feuille à partir des données entrées. Je voulais créer un bouton qui m'emmène directement dans la vue impression en backstage.

J'ai trouvé différentes méthodes pour imprimer en vba mais malheureusement aucune pour aller directement dans cette vue. Cette vue est très pratique puisqu'on dispose d'un aperçu et d'une grande majorité d'options d'impression. La solution pour accéder directement à cette vue depuis un bouton est simple : il suffit de simuler un appui sur les touches Ctrl+F2.

Sur l'événement Click du bouton, mettez le code suivant :
SendKeys "^{F2}"

La touche Ctrl est représentée par "^" comme indiqué sur la page suivante : SendKeys Class.

Cela a été testé avec Excel 2010 SP1 (32 bits) sur Windows 7 (64 bits).

Vous devez être identifié pour poster un commentaire.

10/03/2012

[.NET][BI][C++][Office][SGBD][TechDays][Web][Windows] Les vidéos des Microsoft TechDays’12 France sont en ligne

Si vous faites partie des nombreuses personnes n'ayant pas eu l'occasion d'assister aux TechDays'12 ou que tout simplement vous n'aviez pas la faculté d'assister à plusieurs sessions en même temps, rassurez-vous car le contenu intégral des 3 jours de sessions, soit plus de 300 sessions techniques ainsi que les conférences plénières, vient d'être publié par Microsoft sur son site officiel.

Lire la suite...

Vous devez être identifié pour poster un commentaire.

24/01/2012

Permalink 22:22:57, Catégories: Récapitulatif Office, Sharepoint 2010, Développement, 740 mots   French (FR) , laurentvalente []

[Office] [SharePoint 2010]Comment changer la valeur d’un item d’une autre liste

 

L'idée est la suivante :

- J'ai une liste de cours qui contient le nom du cours et le nombre de place disponible dans ce cours.

- J'ai une liste participant qui contient le nom du participant et le nom du cours auquel il veut participer (champ lookup qui pointe sur le nom du cours de la liste cours, on associera le nombre de places disponibles pour une meilleure lisibilité).

- Quand j'inscris un participant à un cours je veux que le nombre de place disponibles dans ce cours diminue de 1.

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

28/11/2011

Permalink 09:18:06, Catégories: Récapitulatif .NET, Récapitulatif, Récapitulatif Office, SharePoint, .NET, Office 365, 347 mots   French (FR) , bertrandv []

[.NET][Office] [Office 365] Activer l'accès anonyme

J’ai donc voulu créer mon blog sur SharePoint Online étant donné que je me suis spécialisé cette année dans le développement SharePoint. Mais je me suis confronté à un léger souci, lorsque j’ai créé un site de type « Blog » sur SharePoint Online, il s’avère que les permissions héritent du site parent et que le site parent ne possède pas d’accès anonyme.

Il n’est pas non plus possible via l’interface d’activer l’accès anonyme, n’ayant pas accès à l’administration centrale !

Par exemple, pour un blog, si l’utilisateur clique sur un billet en page d’accueil pour y accéder, il est redirigé directement vers la page d’authentification. Idem pour les catégories et commentaires.

Du coup, et grâce à cet article de Martin Hatch, j’ai créé une webpart permettant de lister toutes les listes du site courant et de permettre d’activer l’accès anonyme en lecture seule ou en modification/écriture.​

anonymous access

Ainsi, j’ai activé l’accès anonyme pour la liste des billets, des commentaires et des catégories. De plus, j’ai activé l’ajout d’item pour la liste des commentaires afin que tout utilisateur puisse ajouter un commentaire. Voici, le code utilisé pour activer l’accès anonyme :

La permission SPBasePermissions.ViewFormPages n’est pas effective. Il suffit de l’ajouter sur le masque de permissions AnonymousPermMask64 de la liste.

SPList list = SPContext.Current.Web.Lists[listId];
if (list != null)
{
   if (!list.HasUniqueRoleAssignments)
   {
      list.BreakRoleInheritance(true);
   }
   list.WriteSecurity = 2;
   list.AnonymousPermMask64 |= (SPBasePermissions.Open | SPBasePermissions.OpenItems 
                                    | SPBasePermissions.ViewListItems | SPBasePermissions.AddListItems);
   list.Update();
   this.gridViewLists.DataBind();
}

Pour activer l’ajout d’items dans la liste des commentaires, il suffit d’ajouter la permission SPBasePermissions.AddListItems.

list.AnonymousPermMask64 |= (SPBasePermissions.AddListItems);

Vous pouvez trouver le code source de la webpart ici: http://bertrandvergnault.sharepoint.com/blog/PublicDocuments/ModifyListsPermissionsWebPart/Office365.ModifyListsPermissions.zip​


Ou télécharger directement le fichier solution WSP pour l'ajouter directement dans votre environnement:
http://bertrandvergnault.sharepoint.com/blog/PublicDocuments/ModifyListsPermissionsWebPart/Office365.ModifyListsPermissions.wsp

Vous devez être identifié pour poster un commentaire.

24/11/2011

Permalink 08:33:34, Catégories: Récapitulatif .NET, Récapitulatif, Récapitulatif Office, SharePoint, .NET, 144 mots   French (FR) , bertrandv []

[.NET][Office] [SharePoint 2010] Liens utiles aux developpeurs

Voici une liste de liens utiles et tips pour les développeurs SharePoint.

Cet article a plutôt un but personnel puisqu'il me permet de garder sous le coude les infos que je ne retiens pas forcément :)

Niveaux de permissions dans SharePoint​ : http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spbasepermissions.aspx

Custom actions locations and IDs : http://msdn.microsoft.com/en-us/library/bb802730.aspx

ID des types de listes natives SharePoint : http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splisttemplatetype.aspx

ID des Content types : http://msdn.microsoft.com/fr-fr/library/aa543822.aspx

Guid des features natives de SharePoint : http://blogs.msdn.com/b/mcsnoiwb/archive/2010/01/07/features-and-their-guid-s-in-sp2010.aspx

Liste des contentclass utilisable pour la recherche: http://www.rtsmedia.com/SharePoint/contentclass.aspx​

Activer/Désactiver le developer dashboard :

stsadm -o setproperty -pn developer-dashboard -pv On|Off|OnDemand

Cet article sera amené à grossir... ;)

Vous devez être identifié pour poster un commentaire.

23/11/2011

Permalink 08:28:40, Catégories: Récapitulatif .NET, Récapitulatif, Récapitulatif Office, SharePoint, .NET, 192 mots   French (FR) , bertrandv []

[.NET][Office] [SharePoint 2010] Erreur HRESULT E_FAIL lors de l'utilisation d'une FullTextSqlQuery

Lors de l’utilisation de la recherche et plus particulièrement d’une requête FullText, j’ai été confronté à une erreur pas vraiment explicite ;)

Voici la requête que j’ai exécutée :

SearchServiceApplicationProxy proxy = 
(SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(site));
FullTextSqlQuery myQuery = new FullTextSqlQuery(proxy);
myQuery.ResultsProvider = SearchProvider.Default;
myQuery.ResultTypes = ResultType.RelevantResults;
myQuery.QueryText = "SELECT Title FROM SCOPE() where \"scope\"='All Sites' AND MyManagedProperty LIKE ‘%test%’”;


Voici maintenant le libellé de l’erreur en question au moment du myQuery.Execute() : HRESULT E_FAIL has been returned from a call to a COM component

Après des recherches sur Google je suis tombé sur ce post m’indiquant la marche à suivre.
http://msdn.microsoft.com/fr-fr/library/microsoft.sharepoint.search.query.query.hint(v=office.12).aspx

Il suffit de spécifier la propriété Hint avec la valeur QueryHint.OptimizeWithPropertyStore.

myQuery.Hint = QueryHint.OptimizeWithPropertyStore;



Sur la msdn, il n’y a aucune information permettant de savoir réellement quel est l’impact de cette propriété. Cependant, il n’y a plus d’erreur et les résultats que me retourne la recherche sont ceux attendus ;)

Vous devez être identifié pour poster un commentaire.

22/11/2011

Permalink 08:33:01, Catégories: Récapitulatif .NET, Récapitulatif, Récapitulatif Office, SharePoint, .NET, ASP.NET, 249 mots   French (FR) , bertrandv []

[.NET][Office] [SHP2010] Modifier l'apparence d'un contrôle natif à l'aide d'un ControlAdapter

Un Control Adapter permet de modifier l’apparence de contrôles en récupérant le flux HTML généré par celui-ci.
Dans le cadre de SharePoint on peut du coup l’utiliser pour venir modifier l’apparence de certains contrôles natifs.
Pour cela, il faut créer une classe qui héritera de la classe ControlAdapter (dans l’espace de noms System.Web.UI.Adapters) et venir redéfinir la méthode Render :

public class InputFormDropDownListAdapter : ControlAdapter    
{        
    protected override void Render(System.Web.UI.HtmlTextWriter writer)        
    {            
        StringBuilder sb = new StringBuilder();            
        HtmlTextWriter htw = new HtmlTextWriter(new StringWriter(sb));            
        base.Render(htw);                        
        string stringToWrite = sb.ToString();             
        //Modifier la chaine "stringToWrite" à écrire dans le rendu du contrôle...             
        writer.Write(stringToWrite);        
    }    
}


Il faut maintenant mettre en place la prise en compte de ce ControlAdapter par le navigateur.

Pour cela, il faut se placer dans le constructeur de la masterPage
qui sera utilisée par SharePoint :

public SiteMaster()        
{            
    var adapters = HttpContext.Current.Request.Browser.Adapters;            
    var key = typeof(Microsoft.SharePoint.Portal.WebControls.InputFormDropDownList).AssemblyQualifiedName;            
    if (!adapters.Contains(key))            
    {                
        var adapter = typeof(InputFormDropDownListAdapter).AssemblyQualifiedName;                
        adapters.Add(key, adapter);            
    }        
}


La clé de l’entrée du dictionnaire correspond au nom de l’assembly du type du contrôle dont on viendra modifier l’apparence.

La valeur de l’entrée du dictionnaire correspond au nom de l’assembly du controlAdapter
que l’on a développé plus haut.


Il est ainsi possible de modifier l’apparence des contrôles natifs de SharePoint…

Vous devez être identifié pour poster un commentaire.

18/11/2011

Permalink 09:26:32, Catégories: Récapitulatif, Récapitulatif Office, SharePoint, 89 mots   French (FR) , bertrandv []

[Office] [SHP2010] Editer une webpart page cassée à cause d’une webpart

A première vue, une page contenant des webpart peut ne plus pouvoir être éditée si l’une des webparts contenue dedans plante.

Dans ces cas-là, un raccourci très simple permet d’éditer le contenu de la page via le menu d’administration de celle-ci. Pour cela, il suffit d’ajouter à l’URL le querystring suivant : ?contents=1

Exemple : http://mysharepointsite.com/mywebpartpage.aspx?contents=1

Voici l’affichage que vous obtiendrez :

listes webparts


A vous ensuite de faire les modifications qui s’imposent pour que la page soit à nouveau fonctionnelle…

Vous devez être identifié pour poster un commentaire.

17/11/2011

Permalink 15:24:42, Catégories: Récapitulatif, Divers, Récapitulatif Office, Excel 2010, 226 mots   French (FR) , Pierre Fauconnier []

Bonjour.

Je viens de mettre en ligne une nouvelle vidéo qui détaille les étapes à réaliser pour vérifier l'existence d'éléments dans une liste grâce à la mise en forme conditionnelle (durée: 14'23").

Au départ d'une plage de données, vous verrez comment créer un tableau 2010, puis vous aborderez la création de la formule conditionelle qui permettra la comparaison.

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

« Page Précédente 1 2 3 ... 7 8 9 Page suivante »

Liste des blogs

Developpez - Récapitulatif Office

Catégories


Rechercher

<  Avril 2012  >
Lun Mar Mer Jeu Ven Sam Dim
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web