Importer des données google sheet dans Excel avec login et mdp

Bonjour à tous,

Je viens vers vous car j'ai beau chercher sur le web et je ne trouve pas de solution à mon problème.

j'essaie d'importer les données d'un tableau google sheet dans excel.

Lorsque je supprime les sécurités du formulaire google, c'est a dire que tout le monde peut y accéder, j'ai une macro qui fonctionne très bien de ce type:

Sub I_G()

Sheets("BASE DE SAISIE").Select
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
Sheets("Copie de l'importation google").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;https://docs.google.com/spreadsheets/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" _
, Destination:=Range("$A$1"))
'.WebFormatting = xlWebFormattingNone
.Refresh BackgroundQuery:=False

End With

Sheets("Copie de l'importation google").Range("D4:AT103").Copy Sheets("BASE DE SAISIE").Range("A" & Rows.Count).End(xlUp)(2)

End Sub

Lorsque je remets les sécurités (donc accès au tableau via "login" et "MDP"), pas moyen d'y arriver.

Chose normal !!

Seulement voilà, pour des raisons évidentes, je souhaite maintenir cette sécurité et donc le "login" et "MDP".

J'ai cherché sur le web un code dans lequel serait intégrer le "login" et "MDP" afin que celui-ci puisse accéder au tableau et importer les données.

j'ai trouver celui-ci qui me paraissait être une bonne approche:

Sub I_G5()
    Dim url
    url = "https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    telecharge url, "Mon Login", "Mon MDP"
End Sub

Function telecharge(url, login, password)
    Dim IE As Object, doc As Object
    Set IE = CreateObject("internetexplorer.application")
    With IE
        .navigate url
        .Visible = True
        Do: DoEvents: Loop While .readystate <> 4 Or .busy
        If .locationurl = "https://accounts.google.com/signin/v2/identifier?service=wise&passive=1209600&continue=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2F%3Fusp%3Dmkt_sheets&followup=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2F%3Fusp%3Dmkt_sheets&ltmpl=sheets&flowName=GlifWebSignIn&flowEntry=ServiceLogin" Then
            .document.all("j_username").innertext = login
            .document.all("j_password").innertext = password
            Do: DoEvents: Loop While .readystate <> 4 Or .busy
            .document.getElementsByClassName("ui-button ui-widget ui-state-default ui-corner-all")(3).Click
        End If
    End With
End Function

Mais il bloque sur la page de connection Google.

Je n'ai pas réussi à savoir si c'était faisable, mais si c'est le cas merci, d'avance pour l'aide que vous pourriez m'apporter.

Bonjour,

à tester,

With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;https://docs.google.com/spreadsheets/xxxxx", UID:="name", PWD:="password", Destination:=Range("$A$1"))
End Sub

info ici: https://docs.microsoft.com/fr-ca/office/vba/api/excel.querytables.add

Bonsoir i20100,

Tout d'abord, merci pour l'aide.

J'ai donc intégré tes propositions et non, ça ne fonctionne pas.

Le debogage est proposé de "With" jusqu'à ("$A$1").

J'ai une erreur d'exécution 448 avec "argument nommé introuvable"

Est-ce que tu sais si c'est faisable?

re,

voici un autre possibilité, mais il faudrait vérifier le nom des cases pour le ID et le PW

dans cette exemple j'ai utilisé mail et password mais ce n'est surement pas ça.

Sub test()
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe") 'à adapter
    With objExec
        .Visible = True
        .Navigate "URL;https://docs.google.com/spreadsheets/xxxx.xlsx"
            Do Until .ReadyState = 4
                DoEvents
            Loop
        .document.all.Item("mail").Value = "ldfsdfh"
        .document.all.Item("password").Value = "lkjgshdgsh"
        .document.forms(0).submit
    End With

    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;https://docs.google.com/spreadsheets/xxxx.xlsx" _
        , Destination:=Range("$A$1"))
        .Name = _
        "pid1-paris-turf-la-base-numero-1-du-turf.-tierce-quarte-quinte-pmu-pmh"
        .FieldNames = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .HasAutoFormat = True
        .TablesOnlyFromHTML = True
        .AdjustColumnWidth = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Bonjour i20100,

Donc j'ai adapté ton code mais il y a une proposition de débogage sur une partie que je n'ai pas adapté.

il s'agit de la ligne .visible=true

    With objExec
        .Visible = True
        .Navigate "URL;https://docs.google.com/spreadsheets/xxxx.xlsx"

J'ai copié/coller le code html de la case login et celle de password.

J'en ai déduit que le nom de la case login était "identifier" et celle de password était "password"

Je ne suis pas un expert mais je ne pense pas m'être trompé .

est-ce que tu confirme?

Page login

<input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="Adresse e-mail ou numéro de téléphone" name="identifier" autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="">

Page login avec saisie login « XXXXXX »

<input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="Adresse e-mail ou numéro de téléphone" name="identifier" autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="XXXXXXXXXXXXX" badinput="false">

Page password

<input type="password" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="current-password" spellcheck="false" tabindex="0" aria-label="Saisissez votre mot de passe" name="password" autocapitalize="off" dir="ltr" data-initial-dir="ltr" data-initial-value="">

Page password avec saisie password « XXXXXX »

<input type="password" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="current-password" spellcheck="false" tabindex="0" aria-label="Saisissez votre mot de passe" name="password" autocapitalize="off" dir="ltr" data-initial-dir="ltr" data-initial-value="XXXXXXXXXXXX" badinput="false">

Sinon le code n'avait pas réussi à arriver sur cette étape mais étant donné que le login se fait sur une page et la password sur une autre j'ai modifié ton code de cette manière:

Loop
        .document.all.Item("identifier").Value = "XXXXXXXX"
        .document.forms(0).submit
        .document.all.Item("password").Value = "XXXXXXXX"
        .document.forms(0).submit

Qu'en penses-tu?

Merci

Bonjour Michaël,

j'ai essayé plusieurs code mais rien n'y fait avec Google pour mettre l'identifiant et le mdp, désolé

peut être que cela fonctionnera avec Internet Explorer.

Bonjour i20100,

Je suppose, lorsque tu parles de "Google", que c'est Google Chrome et non Google Sheet ?

Merci beaucoup d'avoir essayé.

Si quelqu'un s'y connaît avec Internet Explorer, je suis preneur !

Merci à tous

Bonjour,

J'étais perturbé jusqu'ici quand tu évoquais Google Sheet, puis Google Chrome...

Pourrais-tu déjà retourner ce que produit cette application quand tu mets le lien sans les id et mdp ?

Mets ton URL dans A1.

63page-complete.xlsm (19.64 Ko)

Bonjour Steelson,

Je n'ai jamais évoqué Google Chrome.

Le code de i20100 était basé sur Google Chrome, c'est tout.

Alors, pour une bonne compréhension du problème, dans Google sheet si tu autorise le partage avec tout le monde sur le web, tu n'as pas besoin de te connecter à ton compte.

Tu tape l'URL dans le navigateur(peu importe lequel) et tu y accèdes .

Seulement comme ce sont des données confidentielles, je ne le partage pas avec tout le monde sur le Web, d'où ma question pour l'intégration du mdp et login.

Après, dans Google sheet c'est juste un tableau de données dans lequel il n'y a aucune formule car ce tableau est corrigé dans Excel suite à l'importation .

Moi, je veux juste avoir l'autorisation d'importer les données qui sont sur mon tableau Google Sheet vers mon tableau Excel avec un code vba dans lequel j'y aurai intégré le mot de passe et login, comme je l'ai précisé au tout début.

Lorsqu'il n'y a pas besoin de login et mdp, aucun message d'erreur n'est retourné et j'ai les 100 premières lignes qui sont importées.

Par contre lorsqu'il y a besoin du login et mot de passe j'ai un message d'erreur Excel m'indiquant l'impossibilité d'importer les données suite à un problème de sécurité.

Par contre lorsqu'il y a besoin du login et mot de passe j'ai un message d'erreur Excel m'indiquant l'impossibilité d'importer les données suite à un problème de sécurité.

et justement je voulais savoir comment été codée la réponse !

OK je vais donc créer un compte Google et je mettrai l'URL en A1

Merci Steelson

voilà c'est fait.

Au cas où.... mon fichier excel sur lequel je retravaille l'importation du tableau Google est au format .XLS

Merci Steelson

42excel-pratique.xlsm (15.96 Ko)

OK c'est ce que je voulais voir ... Ils sont trop fort chez google. D'abord il faut se signer sous gmail, ensuite demander l'accès ce qui ne sera pas immédiat ! et cerise sur le gâteau, ils ne reconnaissent excel comme navigateur pour ces étapes d'authentification a priori. Je crains que ce soit l'impasse, en tous cas cela dépasse mes compétences.

Zut !

J'ai pas tout saisi mis à part que tu ne peux plus m'aider

Merci quand même !!

Si quelqu'un a une idée ou une autre approche, je ne désespère pas et je suis preneur

re,

voici le code avec Internet Explorer

Sub Naviguer_docs_google()

'nécéssite d'activer la référence Microsoft HTML Objects Library
'nécéssite d'activer la référence Microsoft Internet Controls

Dim i As Integer
Dim IE As InternetExplorer
Dim maPageHtml As HTMLDocument
Dim Helem As IHTMLElementCollection
Set IE = CreateObject("internetExplorer.Application")
IE.Visible = False
IE.Navigate "https://docs.google.com/"

Do Until IE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop

Set maPageHtml = IE.Document
Set Helem = maPageHtml.ie9_all

identifiant = "xxxxxxxx@xxxx.xx"
passW = "xxxxxxxxx"

For i = 0 To Helem.Length - 1
    On Error Resume Next
    If Helem(i).getAttribute("name") = "identifier" Then Helem(i).innerText = identifiant
Next i

Do Until IE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop

For i = 0 To Helem.Length - 1
    If Helem(i).getAttribute("name") = "password" Then Helem(i).innerText = passW
Next i

Do Until IE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop

IE.Visible = True
AppActivate IE
SendKeys "{ENTER}", True

End Sub

Merci i20100,

je vais voir ça.

re,

j'ai trouvé celle-ci sur le forum,

ici: 'https://forum.excel-pratique.com/viewtopic.php?t=105416

veux-tu faire le test ?

ps/ #gid=0 pour l'onglet 1

Sub Importer1()
conn = "URL; https://docs.google.com/spreadsheets/d/1019qOXypx42o5y8bTDg7dmASrzb2Ns69PPC__jycu3g/edit#gid=0"

moi = "xxxxxx@xxxx.xxx"
pw = "xxxxxxxxxx"

With ActiveSheet.QueryTables.Add(conn, Range("A1"))
        .PostText = "identifier=moi&password=pw"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingAll
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
End With

End Sub

je suis intéressé ... mais le lien renvoie vers ceci

capture d ecran 656

Bonjour Steelson,

re voici le lien

" https://forum.excel-pratique.com/viewtopic.php?t=105416 "

j'ai fait le test, j'ai pas d'erreur, mais rien ne s'importe

Merci à vous deux,

aujourd'hui c'est un peu compliqué pour que je passe le temps nécessaire vu que j'ai mon fils de 5ans.

Je vous tiens au jus et vous remercie encore

Rechercher des sujets similaires à "importer donnees google sheet login mdp"