IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

VBA et Sharepoint via SOAP [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut VBA et Sharepoint via SOAP
    Salut


    J'utilise un code VBA à base d'ADODB, qui me permet de mettre à jour des listes sharepoint (SP).
    Je souhaiterais élargir le champs des possibles en utilisant directement SOAP.


    J'ai essayé de moultes façons, j'ai écumé un peu tous les codes.
    Le problème c'est que mon organisation n'utilise pas les client/secret et ne répond pas aux demandes de token. J'ai réussi à faire les enchainements de requêtes http nécessaires mais un vilain message m'a expliqué que les règles de mon organisation ne permettaient pas de passer par là... (Pourtant j'en ai sué pour y arriver... bref).


    Au début de mes expérimentations de SOAP, j'avais des périodes où les requêtes passaient et d'autre fois non... sans que je comprenne les actions que je faisais et qui faisaient que ça fonctionnait pendant quelques heures/jours, avant de planter de nouveau, en me signalant des erreurs d'authentification. J'ai fini par découvrir que SOAP passait par une authentification NTLM et que les cookies étaient stockés dans IE/Edge (c'est un peu floue). J'ai fini par lire sur un site de M$, que ce système était plutôt instable... Pour le moins oui.


    Quand j'ai des erreurs d'authentification, les requêtes me retournent la page html d'authentification. Le but serait alors d'afficher cette page, pour que l'utilisateur s'authentifie et pouvoir récupérer le cookie-graal...
    J'ai tenté Chromium VBA et Webedgeservcie mais je n'ai pas réussi à les implémenter pour faire ça.... Je vais peut-être retenter...


    J'ai donc essayé d'identifier mes requêtes à l'aide des cookies FedAuth et rtFA (récupéré à la main en espionnant le contenu des requêtes émissent sur l'interface de Sharepoint). Ca fonctionne... Par contre, j'ai abandonné l'idée de récupérer les dit cookies de façon automatique (que ce soit dans la jar par powershell, script python ou via des demandes http sur les serveurs d'authentification). Si quelqu'un à une solution, je prends.


    J'ai aussi tenté, à l'aide de Fiddler, d'espionner ce que faisait ADODB... et oh surprise, ça passe par SOAP! et avec un cookie différent SPOIDCRL! J'ai donc encore passé des heures/jours à essayer de récupérer celui là... mais rien non plus.
    En fait, quand mes requêtes SOAP passent ou quand j'utilise ADODB, les requêtes semblent utiliser mon authentification locale, c'est ça que je voudrais obtenir.


    J'ai tenté les codes proposant d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MSXMLRequest.SetAutoLogonPolicy AutoLogonPolicy_Always
    Ce qui est sensé utiliser les crédentials déjà actifs sur la session windows.
    D'ailleurs ici, je me pose une question. j'ai mon login et MdP windows mais s'agissant de l'authentification pour aller sur Office, il me faut utiliser adresse mail et MdP, est-ce que c'est ce qui m'empêcherais de pour voir utiliser cette méthode?


    Est-ce que quelqu'un utilise actuellement un code en VBA (ou approchant) qui permet d'identifier les requêtes SOAP auprès de Sharepoint (le mieux en utilisant l'authentification locale, sans avoir à fournir login/MdP)?
    J'avoue que je désespère un peu.


    Je vous remercie d'avance pour les infos et vous souhaite une bonne soirée
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Bon, j'ai beau tourner ça dans tous les sens, il me faut un IdClient et un secret pour faire une demande de cookie...

    Du coté des credentials qui sont déjà présents dans windows, ce qui est probablement ce qui est utilisé par Excel, je pense que le noeud du problème est le suivant. Si j'utilise le credential windows, probablement utilisé par défaut lorsque j'utilise autologonPolicy, le user est de la forme prénomNom + mot de passe. Lorsque je me connecte sur mon compte office pour accéder à sharepoint, c'est adresse mail + mot de passe.

    Est-ce que quelqu'un sait comment fonctionne le système de credentials? Peut-il y en voir plusieurs de mémorisés et si oui, comment puis-je le choisir au sein de mon code VBA?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Bon, je pense avoir trouvé une solution.
    Tous mes essais http de récupération de cookie sans avec d'IDClient et de Secret (et sans demander de login mp à l'utilisateur) se sont clos par des échecs...

    Par contre, le fait de faire une intervention sur une liste sharepoint à partir d'ADODB force Excel à faire les gestes d'authentification pour récupérer le cookie SPOIDCRL... une fois obtenu, excel l'inclus automatiquement dans les futures requêtes http SOAP qu'il émet, y compris si elles sont issues de VBA. Par contre attention, il ne faut pas utiliser le protocole WinHttp (ou du moins je n'ai pas réussi à le paramétrer pour que ça fonctionne avec...). Il faut utiliser l'objet MSXML2.XMLHTTP60...

    J'avais essayé cette démarche il y a quelques jours... mais avec WinHttp probablement et j'ai cru à tord que ça ne fonctionnait pas. Si ça peut éviter à quelqu'un d'autre de perdre du temps...
    Je vous souhaite une bonne journée

    [Edit]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub SPOIDCRL_Auth(SP_Url as string)'On force Excel à s'authentifier auprès du serveur pour obtenir le cookie SPOIDCRL en déclenchant une requête ADODB
    'Par la suite, le cookie sera incorporé par excel à chaque connexion http vers le serveur
    Dim adodb_Connection As Object
    Dim adodb_Recordset As Object
     
     
        Set adodb_Connection = CreateObject("ADODB.Connection")
        Set adodb_Recordset = CreateObject("ADODB.RecordSet")
     
        'les informations d'identification de la table ci-dessous ne sont pas bonnes (NomListe = Null)
        'On passe la gestion d'erreur
        On Error Resume Next
     
        'On ouvre la connexion sur la fausse liste en passant la vrai adresse du site Sharepoint
        With adodb_Connection
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=" & SP_Url & ";LIST={Null};"
            .Open
            adodb_Recordset.Open "Select * From `Null`;", adodb_Connection, 2, 3
            .Close
        End With
     
        'On libère les instances
        Set adodb_Connection = Nothing
        Set adodb_Recordset = Nothing
     
    End Sub


    Voila un bout de code pour forcer l'authentification
    [/Edit]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2013] Chargement de fichier sur Sharepoint via VBA
    Par Grostimo dans le forum SharePoint
    Réponses: 0
    Dernier message: 27/06/2018, 15h17
  2. Re-connexion à Sharepoint via VBA
    Par ornicus31 dans le forum Développement Sharepoint
    Réponses: 4
    Dernier message: 23/03/2016, 09h46
  3. [2010] Import d'une liste sharepoint via VBA
    Par Arcaneur dans le forum Microsoft Office
    Réponses: 0
    Dernier message: 29/07/2014, 16h33
  4. Réponses: 3
    Dernier message: 21/09/2013, 09h37
  5. Réponses: 1
    Dernier message: 19/04/2011, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo