Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Décalage de 2h entre les dates de ma liste SharePoint et celles de mon Excel
    Bonjour à tous,

    J'ai un classeur excel sur lequel je fais une requête vers une liste SharePoint, cette liste SharePoint est elle-même liée à une application de formulaire,

    Sur cette liste SharePoint je récupère les différents champs de formulaire, l'un des ces champs est "date heure" que je place dans la colonne du même nom dans la liste,

    Cette colonne est à ne pas confondre avec la colonne "Crée" de SharePoint qui est automatique.

    Le problème que j'ai est que les valeurs "date heure" dans la requête du classeur excel vers la liste SharePoint ont 2h d'avance sur celles de la liste SharePoint :





    Pourriez-vous m'expliquer pourquoi on observe ce décalage ou m'indiquer une solution de contournement pour ajouter 2h aux valeurs de la requête ?

    Merci

  2. #2
    Expert éminent sénior
    Les cellules du classeur Excel ne contiendraient-elles pas une formule ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre du Club
    Non, elles ne contiennent pas de formules, la feuille est vierge à la base, j'y insère juste la requête qui me créé le tableau croisé dynamique automatiquement.

  4. #4
    Responsable
    Office & Excel

    Salut.

    Les données de type DateTime sont stockées dans SharePoint en UTC. Il faut donc adapter un décalage pour les récupérer en local, si ton système n'est pas calé sur le fuseau horaire UTC.

    Si tu utilises PowerQuery, tu peux utiliser les fonctions DateTime pour convertir un moment UTC en moment local. Ces fonctions gèrent bien entendu le décalage hiver/été.

    Voici un exemple:


    Au départ, une liste SharePoint avec une date "été" et une date "hiver", toutes les deux à 16:00




    On récupère la liste en PowerQuery, et l'on remarque deux choses: La colonne n'est pas au format datetime et il y a un décalage de 1H pour Hiver et de 2H pour Eté.




    On transforme la colonne au type DateTimeZone pour avoir l'UTC. Ce sont les mêmes heures mais on va pouvoir opérer un décalage selon le fuseau local du pc.






    On peut alors opérer un décalage en ajoutant une colonne formulée qui utilise DateTimeZone.ToLocal. On observe que le résultat renvoie bien 16:00 pour les deux lignes.







    On récupère alors le résultat dans Excel (Ici, j'ai laissé la colonne Test mais tu peux évidemment la supprimer dans PowerQuery)





    Tu peux bien entendu te passer de PowerQuery et utiliser une formule Excel, sachant que la bascule été/hiver s'effectue toujours les derniers dimanches de mars et d'octobre. Voici une formule qui réalise cela pour la cellule A1.

    =SI(ET(A2>=(DATE(ANNEE(A2);3;31)+2/24)-MOD(JOURSEM(DATE(ANNEE(A2);3;31);2);7);A2<(DATE(ANNEE(A2);10;31)+3/24)-MOD(JOURSEM(DATE(ANNEE(A2);10;31);2);7));A2+2/24;A2+1/24)






    On pourrait aussi réaliser l'import en VBA et recalculer l'heure au moment de l'import, soit en utilisant grosso modo la même technique que la formule Excel (figée sur notre fuseau horaire), soit en utilisant les api windows.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre du Club
    Merci pour ta réponse très complète Pierre

    Y aurait-t-il moyen de modifier la date directement dans la requête et de ne pas avoir à créer une seconde colonne ?

    J'utilise l'outil de requête de Excel en allant dans Obtenir des données > a partir d'autres sources > a partir d'une liste SharePoint

  6. #6
    Responsable
    Office & Excel

    Citation Envoyé par js777 Voir le message
    Merci pour ta réponse très complète Pierre [...]
    Avec plaisir...

    Avec l'outil d'importation que tu utilises, je pense que ce n'est pas possible, sans Power Query ou VBA.

    Avec PowerQuery, comme je l'ai mentionné dans ma précédente réponse, tu peux supprimer la colonne supplémentaire avant de renvoyer tes données dans Excel. Si tu as une version 2010 ou plus récente, je te conseille d'aller voir du côté de Power Query qui offre un outil de préparation de données puissant. Cela demande une prise en mains, mais les efforts d'apprentissage de l'outil sont payés au centuple.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre du Club
    La solution en VBA permet-elle d'afficher les dates corrigées dans le tableau dynamique généré par la requête ?

  8. #8
    Responsable
    Office & Excel

    Vu ce que tu me dis de la façon dont tu récupères tes données, tu utilises PowerQuery (peut-être sans le savoir)



    il te suffit donc, lorsque tu as choisi ta liste, de choisir l'option Transformer les données pour "entrer" dans PowerQuery et appliquer la solution que je t'ai fournie dans ma première réponse...

    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre du Club
    Ahah quel idiot !

    Tu as bien fait d'insister ça fonctionne parfaitement !

    Merci

###raw>template_hook.ano_emploi###