Retourner des infos sur excel provenant d'un mail.
Fermé
lixel
Messages postés
22
Date d'inscription
dimanche 23 mai 2010
Statut
Membre
Dernière intervention
18 juillet 2015
-
15 janv. 2015 à 09:20
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015 - 20 janv. 2015 à 11:46
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015 - 20 janv. 2015 à 11:46
A voir également:
- Retourner des infos sur excel provenant d'un mail.
- Yahoo mail - Accueil - Mail
- Retourner ecran windows - Guide
- Liste déroulante excel - Guide
- Publipostage mail - Accueil - Word
- Calculer une moyenne sur excel - Guide
9 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 15/01/2015 à 13:19
Modifié par pijaku le 15/01/2015 à 13:19
Bonjour,
Qu'elle boîte mail? Quel logiciel de messagerie?
🎼 Cordialement,
Franck 🎶
Qu'elle boîte mail? Quel logiciel de messagerie?
🎼 Cordialement,
Franck 🎶
lixel
Messages postés
22
Date d'inscription
dimanche 23 mai 2010
Statut
Membre
Dernière intervention
18 juillet 2015
15 janv. 2015 à 20:32
15 janv. 2015 à 20:32
Bsr bsr Pijaku
J'utilise Gmail comme boite mail.
J'utilise Gmail comme boite mail.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
16 janv. 2015 à 11:09
16 janv. 2015 à 11:09
Bonjour,
J'ai un peu avancé sur votre projet.
Il me manque maintenant des infos capitales :
> ensuite trouver les mails, ==> Quels mails et comment les retrouver?
> et retourner l'info qui m'interresse sur excel. ==> Idem : qu'elles infos et comment les retrouver?
Info subsidiaire mais très importante, vous devez avoir Internet Explorer installé sur votre machine.
J'ai un peu avancé sur votre projet.
Il me manque maintenant des infos capitales :
> ensuite trouver les mails, ==> Quels mails et comment les retrouver?
> et retourner l'info qui m'interresse sur excel. ==> Idem : qu'elles infos et comment les retrouver?
Info subsidiaire mais très importante, vous devez avoir Internet Explorer installé sur votre machine.
lixel
Messages postés
22
Date d'inscription
dimanche 23 mai 2010
Statut
Membre
Dernière intervention
18 juillet 2015
18 janv. 2015 à 14:43
18 janv. 2015 à 14:43
Bonjour, désolé pour le temps de réponse j'ai beaucoup de boulot et je n'ai pas pu repondre avant maintenant.
Je souhaite retrouver les mail qui m'interresse grace à l'adresse mail de l'emetteur.
(Si tu peux me fournir aussi toutes les differentes facon de faire les recherche je suis preneur).
Et pour l'info dans le mail... autant tous copier sur excel dans une feuille vierge et s'il faut je mixerai tous ca.
Merci pour ton aide Pijaku
Je souhaite retrouver les mail qui m'interresse grace à l'adresse mail de l'emetteur.
(Si tu peux me fournir aussi toutes les differentes facon de faire les recherche je suis preneur).
Et pour l'info dans le mail... autant tous copier sur excel dans une feuille vierge et s'il faut je mixerai tous ca.
Merci pour ton aide Pijaku
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
19 janv. 2015 à 09:14
19 janv. 2015 à 09:14
Bonjour,
Plus j'avance dans la macro Excel et plus je me dis que ce que tu essaies de faire est une vraie "usine à gaz".
Si tu disposes d'excel, peut être as tu tout le pack Office?
Si c'est le cas, installe et configure Outlook comme client de messagerie. Je pense que ce logiciel est à même de faire tout ce que tu désires.
Dis moi ce qu'il en est.
Plus j'avance dans la macro Excel et plus je me dis que ce que tu essaies de faire est une vraie "usine à gaz".
Si tu disposes d'excel, peut être as tu tout le pack Office?
Si c'est le cas, installe et configure Outlook comme client de messagerie. Je pense que ce logiciel est à même de faire tout ce que tu désires.
Dis moi ce qu'il en est.
lixel
Messages postés
22
Date d'inscription
dimanche 23 mai 2010
Statut
Membre
Dernière intervention
18 juillet 2015
19 janv. 2015 à 10:41
19 janv. 2015 à 10:41
Bonjour,
:) :) :) je suis un pro pour les usines a gaz!!
Et pour Outlook, je ne suis pas trop interesser. Je prefere passer par internet explorer, je ne ne sait pas me servir de cette outil, ca me fere de l'excercice... Certes il y a peut-etre plus simple mais ca ira!!
Merci
:) :) :) je suis un pro pour les usines a gaz!!
Et pour Outlook, je ne suis pas trop interesser. Je prefere passer par internet explorer, je ne ne sait pas me servir de cette outil, ca me fere de l'excercice... Certes il y a peut-etre plus simple mais ca ira!!
Merci
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
19 janv. 2015 à 14:41
19 janv. 2015 à 14:41
Il est des choses rendues impossibles, ou du moins fortement improbables, par la technique.
En VBA, ta demande me semble être dans ce cas.
J'ai réussi pas mal de choses, mais je butte sur deux bugs qui me semblent insoluble, surtout en ce qui concerne le second.
Je vais tout de même te donner le résultat de mon travail, si tu trouves le moyen de contourner les bugs...
Le premier bug est intermittent.
Parfois la fonction :
ne retourne rien.
Comme c'est intermittent, j'ai juste traité les fois ou elles ne retourne rien par :
Donc, si ça bug, il faut retenter... Pour moi, même si ça n'est pas correct, ce bug est "résolu"...
Par contre, le second est plus ***embêtant***
Il s'agit d'un bug de remplissage de collections.
Dans l'exemple, ce code (tout à fait correct!) :
buggue sur la ligne :
Exactement comme si la collection était vide.
Le message d'erreur est une erreur 70 permission refusée...
En Mode pas à pas (F8 successifs), cela se déroule parfaitement, toute la macro se déroule sans souci...
Donc, je ne saurais pas t'aider davantage, et le résultat que je te fourni n'est pas fonctionnel, j'en suis désolé.
Je te place les différentes procédures et mon classeur de test dans une réponse au cas ou quelqu'un pourrait nous dépanner...
En VBA, ta demande me semble être dans ce cas.
J'ai réussi pas mal de choses, mais je butte sur deux bugs qui me semblent insoluble, surtout en ce qui concerne le second.
Je vais tout de même te donner le résultat de mon travail, si tu trouves le moyen de contourner les bugs...
Le premier bug est intermittent.
Parfois la fonction :
Sub Cibler_Table_Msgs(Doc As HTMLDocument) Dim maColl As IHTMLElementCollection, Tabl As HTMLTable Set maColl = Doc.getElementsByTagName("table") For Each Tabl In maColl If Tabl.className = "th" Then Set TableMsgs = Tabl: Exit For Next End Sub
ne retourne rien.
Comme c'est intermittent, j'ai juste traité les fois ou elles ne retourne rien par :
If Not TableMsgs Is Nothing Then Call Collect_Emails(TableMsgs) Else MsgBox "Bug. Veuillez recommencer" IE.Quit Set IE = Nothing Exit Sub End If
Donc, si ça bug, il faut retenter... Pour moi, même si ça n'est pas correct, ce bug est "résolu"...
Par contre, le second est plus ***embêtant***
Il s'agit d'un bug de remplissage de collections.
Dans l'exemple, ce code (tout à fait correct!) :
Sub Lien_Boite_Reception(Doc As HTMLDocument) Dim maColl As IHTMLElementCollection, Lien As HTMLAnchorElement Set maColl = Doc.getElementsByTagName("a") For Each Lien In maColl If Lien.innerText Like "*" & "Boîte de réception" & "*" Then Set Lien_Reception = Lien: Exit For Next End Sub
buggue sur la ligne :
If Lien.innerText Like...
Exactement comme si la collection était vide.
Le message d'erreur est une erreur 70 permission refusée...
En Mode pas à pas (F8 successifs), cela se déroule parfaitement, toute la macro se déroule sans souci...
Donc, je ne saurais pas t'aider davantage, et le résultat que je te fourni n'est pas fonctionnel, j'en suis désolé.
Je te place les différentes procédures et mon classeur de test dans une réponse au cas ou quelqu'un pourrait nous dépanner...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 19/01/2015 à 14:51
Modifié par pijaku le 19/01/2015 à 14:51
Précisions :
- Ces codes, dans l'état comporte des bugs, à résoudre,
- la macro ne réalise l'opération que pour la première page des emails. Pour pouvoir le faire sur toutes, il conviendra de résoudre les bugs existants...
J'ai identifié les endroits succeptibles de bugguer dans les commentaires :
&
Les codes :
Le fichier :
https://www.cjoint.com/c/EAto5oQjk3h
Encore désolé...
Je vais continuer à suivre ce sujet, au cas ou...
🎼 Cordialement,
Franck 🎶
- Ces codes, dans l'état comporte des bugs, à résoudre,
- la macro ne réalise l'opération que pour la première page des emails. Pour pouvoir le faire sur toutes, il conviendra de résoudre les bugs existants...
J'ai identifié les endroits succeptibles de bugguer dans les commentaires :
'************* 1er BUG connu '***** Résolution 1er BUG
&
'******** Risque de 2ème BUG et 'ICI
Les codes :
Option Explicit Dim Lien_Reception As HTMLAnchorElement Dim Lien_Msgs_Prec As HTMLAnchorElement Dim Tb() Dim TableMsgs As HTMLTable Dim Identifier_Mail As String '************************************************** Sub Import_Mails_De_Gmail() Dim IE As New InternetExplorer Dim IEDoc As HTMLDocument Dim i As Integer Do Identifier_Mail = InputBox("Saisir un point commun pour identifier vos mails : ", "Correspondance dans la seconde colonne de Gmail") Loop While Identifier_Mail = "" 'Insertion d'une nouvelle feuille Call Ajoute_Feuille 'lance Internet Explorer IE.navigate "https://mail.google.com/" IE.Visible = True WaitIE IE Set IEDoc = IE.document If Not IEDoc.URL Like "*" & "inbox" & "*" Then Call Connecte(IEDoc) WaitIE IE Set IEDoc = IE.document 'Affichage html Call AffichageHTML(IEDoc) WaitIE IE Set IEDoc = IE.document 'recherche du lien vers boite de réception Call Lien_Boite_Reception(IEDoc) 'recherche du lien vers les mails précédents Call Lien_Precedents(IEDoc) 'cible la table contenant les emails Call Cibler_Table_Msgs(IEDoc) '************* 1er BUG connu 'boucle sur les éléments de cette table et remplit le tableau des liens If Not TableMsgs Is Nothing Then Call Collect_Emails(TableMsgs) Else MsgBox "Bug. Veuillez recommencer" '***** Résolution 1er BUG IE.Quit Set IE = Nothing Exit Sub End If 'Restitution des données For i = LBound(Tb) To UBound(Tb) Cells(i + 1, 1) = Tb(i) Next IE.Quit Set IE = Nothing End Sub '************************************************** Sub Ajoute_Feuille(Optional SertARien As Byte) Dim strNewName As String, strCara As String, NouvelleFeuille As Boolean Do NouvelleFeuille = True strNewName = InputBox("Nom de la nouvelle feuille : ", "Saisir un nom de feuille valide") If Len(strNewName) = 0 Then NouvelleFeuille = False If Valid_Name(strNewName, strCara) = False Then MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _ "Un nom de feuille ne peut pas contenir le caractère : " & strCara, vbCritical NouvelleFeuille = False Else End If If Feuil_Exist(ThisWorkbook.Name, strNewName) = True Then MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _ "Ce nom de feuille est déjà utilisé dans ce classeur.", vbCritical NouvelleFeuille = False End If If NouvelleFeuille = True Then Exit Do Loop ThisWorkbook.Sheets.Add ActiveSheet.Name = strNewName End Sub '************************************************** 'Test si la chaine contient un caractère à éviter Function Valid_Name(strName As String, strChr As String) As Boolean Dim i As Byte, Tb_Car() As String, strProhib As String strProhib = "/\:*?""<>|" ' Liste des caractères à éviter Tb_Car = Split(StrConv(strProhib, vbUnicode), Chr$(0)) 'Boucle sur tous les caractères à éviter 'Nota : le -1 est dû au Split de la chaine par le séparateur Chr(0) 'En effet, la chaine se terminant par un Chr(0) il convient d'exclure ce dernier caractère For i = LBound(Tb_Car) To UBound(Tb_Car) - 1 'Test si la chaîne contient un caractère prohibé If InStr(strName, Tb_Car(i)) > 0 Then 'Si oui : Return False Valid_Name = False 'ET Retourne le caractère prohibé strChr = Tb_Car(i) Exit Function End If Next i 'Si OK : Return True Valid_Name = True End Function '************************************************** 'Test si la feuille existe déjà Function Feuil_Exist(strWbk As String, strWsh As String) As Boolean 'Gestionnaire d'erreur On Error Resume Next '"Test" Feuil_Exist = (Workbooks(strWbk).Sheets(strWsh).Name = strWsh) End Function '************************************************** Sub WaitIE(IE As InternetExplorer) 'On boucle tant que la page n'est pas totalement chargée Do Until IE.ReadyState = READYSTATE_COMPLETE DoEvents Loop End Sub '************************************************** Sub Connecte(Doc As HTMLDocument) Dim eMailAdress As String, PassWord As String Dim InputMail As HTMLInputElement, InputPass As HTMLInputElement Dim InputCookie As HTMLInputElement, InputSubmit As HTMLInputElement Do eMailAdress = InputBox("Adresse e-mail : ", "Saisir votre adresse mail") Loop While eMailAdress = "" Do PassWord = InputBox("Mot de passe : ", "Saisir votre mot de passe") Loop While PassWord = "" Set InputMail = Doc.getElementById("Email") 'Saisie adresse email InputMail.Value = eMailAdress Set InputPass = Doc.getElementById("Passwd") 'Saisie Mot de passe InputPass.Value = PassWord Set InputCookie = Doc.getElementById("PersistentCookie") 'Décoche "Rester connecté" If InputCookie.Value = "yes" Then InputCookie.Click Set InputSubmit = Doc.getElementById("signIn") 'Clic sur Connexion InputSubmit.Click End Sub '************************************************** Sub AffichageHTML(Doc As HTMLDocument) '******** Risque de 2ème BUG Dim maColl As IHTMLElementCollection, Elem As HTMLInputElement Set maColl = Doc.getElementsByTagName("input") For Each Elem In maColl 'ICI If Elem.Value = "Affichage HTML simplifié" And Elem.className = "submit_as_link" Then Elem.Click: Exit For Next End Sub '************************************************** Sub Lien_Boite_Reception(Doc As HTMLDocument) '******** Risque de 2ème BUG Dim maColl As IHTMLElementCollection, Lien As HTMLAnchorElement Set maColl = Doc.getElementsByTagName("a") For Each Lien In maColl 'ICI If Lien.innerText Like "*" & "Boîte de réception" & "*" Then Set Lien_Reception = Lien: Exit For Next End Sub '************************************************** Sub Lien_Precedents(Doc As HTMLDocument) '******** Risque de 2ème BUG Dim maColl As IHTMLElementCollection, Lien As HTMLAnchorElement Set maColl = Doc.getElementsByTagName("a") For Each Lien In maColl 'ICI If Lien.innerText Like "Précédents" & "*" Then Set Lien_Msgs_Prec = Lien: Exit For Next End Sub '************************************************** Sub Cibler_Table_Msgs(Doc As HTMLDocument) '******** Risque de 2ème BUG Dim maColl As IHTMLElementCollection, Tabl As HTMLTable Set maColl = Doc.getElementsByTagName("table") For Each Tabl In maColl 'ICI If Tabl.className = "th" Then Set TableMsgs = Tabl: Exit For Next End Sub '************************************************** Sub Collect_Emails(maTable As HTMLTable) '******** Risque de 2ème BUG 'Collecte le contenu des mails "intéressants" Dim IE_2 As New InternetExplorer Dim IEDoc_2 As HTMLDocument Dim CollecLiens As IHTMLElementCollection, TbLiens() Dim CollecTR As IHTMLElementCollection, TD As HTMLGenericElement Dim CollecDiv As IHTMLElementCollection, Div As HTMLGenericElement Dim Elem As HTMLAnchorElement, Element As HTMLGenericElement, Enfant As HTMLGenericElement Dim i As Integer, j As Integer, Flag As Boolean Flag = False Set CollecLiens = maTable.getElementsByTagName("a") For Each Elem In CollecLiens ReDim Preserve TbLiens(i) Set TbLiens(i) = Elem i = i + 1 Next i = 0 Set CollecTR = maTable.getElementsByTagName("tr") For Each Element In CollecTR For Each TD In Element.Children If Flag = True Then IE_2.navigate TbLiens(i).href IE_2.Visible = True Flag = False Set IEDoc_2 = IE_2.document Set CollecDiv = IEDoc_2.getElementsByTagName("div") For Each Div In CollecDiv If Div.className = "msg" Then 'ICI For Each Enfant In Div.Children ReDim Preserve Tb(j) Tb(j) = Enfant.innerText j = j + 1 Next Enfant End If Next Div End If If TD.innerText = "*" & Identifier_Mail & "*" Then Flag = True Next TD i = i + 1 Next Element IE_2.Quit Set IE_2 = Nothing Set IEDoc_2 = Nothing End Sub
Le fichier :
https://www.cjoint.com/c/EAto5oQjk3h
Encore désolé...
Je vais continuer à suivre ce sujet, au cas ou...
🎼 Cordialement,
Franck 🎶
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 20/01/2015 à 10:51
Modifié par pijaku le 20/01/2015 à 10:51
Bonjour,
Je donnerai les explications après.
Voici le code fonctionnel :
🎼 Cordialement,
Franck 🎶
Je donnerai les explications après.
Voici le code fonctionnel :
Option Explicit 'Sources : Ces 6 lignes sont à conserver dans votre fichier 'http://www.commentcamarche.net/forum/affich-31378101-retourner-des-infos-sur-excel-provenant-d-un-mail 'http://www.commentcamarche.net/faq/41759-vba-ajouter-copier-une-feuille-dans-un-classeur#les-fonctions-de-verification 'http://www.commentcamarche.net/faq/41585-vba-inputbox 'http://qwazerty.developpez.com/tutoriels/vba/ie-et-vba-excel/ 'http://www.developpez.net/forums/d1192897-4/logiciels/microsoft-office/excel/contribuez/article-manipulation-d-internet-explorer-via-vba/ '********************************* Déclaration des variables publiques Dim IE As New InternetExplorer Dim IEDoc As HTMLDocument Dim Lien_Msgs_Prec As HTMLAnchorElement Dim Tb() Dim TableMsgs As HTMLTable Dim Identifier_Mail As String '********************************* Sub Principale Sub Import_Mails_De_Gmail() Dim CollLink As IHTMLElementCollection, CollInput As IHTMLElementCollection, CollTable As IHTMLElementCollection Dim i As Integer Do Identifier_Mail = InputBox("Saisir un point commun pour identifier vos mails : ", "Correspondance dans la seconde colonne de Gmail") Loop While Identifier_Mail = "" 'Insertion d'une nouvelle feuille Call Ajoute_Feuille 'lance Internet Explorer IE.navigate "https://mail.google.com/" IE.Visible = True WaitIE IE Set IEDoc = IE.document WaitDoc IEDoc 'connexion (au cas ou) au compte gmail If Not IEDoc.URL Like "*" & "inbox" & "*" Then Call Connecte(IEDoc) WaitIE IE Set IEDoc = IE.document WaitDoc IEDoc 'Affichage html Set CollInput = IEDoc.getElementsByTagName("input") If Not CollInput Is Nothing Then AffichageHTML CollInput Else Erreur "Collection des liens pour affichage HTML vide" Exit Sub End If WaitIE IE Set IEDoc = IE.document WaitDoc IEDoc Do 'recherche du lien vers les mails précédents Set CollLink = IEDoc.getElementsByTagName("a") If Not CollLink Is Nothing Then Lien_Precedents CollLink Else Erreur "Collection des Liens, pour accès mails précédents, vide" Exit Sub End If 'cible la table contenant les emails Set CollTable = IEDoc.getElementsByTagName("table") If Not CollTable Is Nothing Then Cibler_Table_Msgs CollTable Else Erreur "Collection des tables contenant les emails vide" Exit Sub End If 'boucle sur les éléments de cette table et remplit le tableau des liens If Not TableMsgs Is Nothing Then Collect_Emails TableMsgs Else Erreur "Collection des liens (liste des emails) vide" Exit Sub End If 'Clic sur le lien "Précédents>" ou sort de la boucle If Lien_Msgs_Prec Is Nothing Then Exit Do Else Lien_Msgs_Prec.Click Set IEDoc = IE.document WaitDoc IEDoc End If Loop IE.Quit Set IE = Nothing Set IEDoc = Nothing 'Restitution des données For i = LBound(Tb) To UBound(Tb) Cells(i + 1, 1) = Tb(i) Next Columns("A").AutoFit MsgBox "Import terminé" End Sub '********************************* Traitement d'erreur Sub Erreur(Texte As String) MsgBox "Bug à corriger :" & vbCrLf & Texte IE.Quit Set IE = Nothing Set IEDoc = Nothing End Sub '********************************* Attente chargement complet de la page Internet Explorer Sub WaitIE(IE As InternetExplorer) Do Until IE.readyState = READYSTATE_COMPLETE DoEvents Loop End Sub '********************************* Attente chargement complet du document (contenu de la page IE) Sub WaitDoc(doc As HTMLDocument) Do While Not doc.readyState = "complete" DoEvents Loop End Sub '********************************* Ajoute la nouvelle feuille pour accueillir les données des mails Sub Ajoute_Feuille(Optional NouvelleFeuille As Boolean) Dim strNewName As String, strCara As String Do NouvelleFeuille = True strNewName = InputBox("Nom de la nouvelle feuille : ", "Saisir un nom de feuille valide") If Len(strNewName) = 0 Then NouvelleFeuille = False If Valid_Name(strNewName, strCara) = False Then MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _ "Un nom de feuille ne peut pas contenir le caractère : " & strCara, vbCritical NouvelleFeuille = False Else End If If Feuil_Exist(ThisWorkbook.Name, strNewName) = True Then MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _ "Ce nom de feuille est déjà utilisé dans ce classeur.", vbCritical NouvelleFeuille = False End If If NouvelleFeuille = True Then Exit Do Loop ThisWorkbook.Sheets.Add ActiveSheet.Name = strNewName End Sub '********************************* Fonction de vérification pour ajout feuille 'Test si la chaine (nom de la future feuille) contient un caractère à éviter Function Valid_Name(strName As String, strChr As String) As Boolean Dim i As Byte Dim Tb_Car() As String Dim strProhib As String strProhib = "/\:*?""<>|" Tb_Car = Split(StrConv(strProhib, vbUnicode), Chr$(0)) For i = LBound(Tb_Car) To UBound(Tb_Car) - 1 If InStr(strName, Tb_Car(i)) > 0 Then Valid_Name = False strChr = Tb_Car(i) Exit Function End If Next i Valid_Name = True End Function '********************************* Fonction de vérification pour ajout feuille 'Test si la feuille existe déjà Function Feuil_Exist(strWbk As String, strWsh As String) As Boolean On Error Resume Next Feuil_Exist = (Workbooks(strWbk).Sheets(strWsh).Name = strWsh) End Function '********************************* Connexion au compte Gmail Sub Connecte(doc As HTMLDocument) Dim eMailAdress As String, PassWord As String Dim InputMail As HTMLInputElement, InputPass As HTMLInputElement Dim InputCookie As HTMLInputElement, InputSubmit As HTMLInputElement Do eMailAdress = InputBox("Adresse e-mail : ", "Saisir votre adresse mail") Loop While eMailAdress = "" Do PassWord = InputBox("Mot de passe : ", "Saisir votre mot de passe") Loop While PassWord = "" Set InputMail = doc.getElementById("Email") 'Saisie adresse email InputMail.Value = eMailAdress Set InputPass = doc.getElementById("Passwd") 'Saisie Mot de passe InputPass.Value = PassWord Set InputCookie = doc.getElementById("PersistentCookie") 'Décoche "Rester connecté" If InputCookie.Value = "yes" Then InputCookie.Click Set InputSubmit = doc.getElementById("signIn") 'Clic sur Connexion InputSubmit.Click End Sub '********************************* Affiche la page Gmail en affichage HTML (évite les 3 onglets "Principale", "Réseaux sociaux", "Promotions") Sub AffichageHTML(CollI As IHTMLElementCollection) Dim Elem As HTMLInputElement For Each Elem In CollI If Elem.Value = "Affichage HTML simplifié" And Elem.className = "submit_as_link" Then Elem.Click: Exit For Next End Sub '********************************* Enregistre le lien vers les mails précédents (si plusieurs pages de mails) Sub Lien_Precedents(CollLiens As IHTMLElementCollection) Dim Lien As HTMLAnchorElement For Each Lien In CollLiens If Lien.innerText Like "Précédents" & "*" Then Set Lien_Msgs_Prec = Lien: Exit For Next End Sub '********************************* Cible la table contenant les liens vers chaque email Sub Cibler_Table_Msgs(CollT As IHTMLElementCollection) Dim Tabl As HTMLTable For Each Tabl In CollT If Tabl.className = "th" Then Set TableMsgs = Tabl: Exit For Next End Sub '********************************* Ouvre les mails dans une nouvelle page IE et récupère leur contenu Sub Collect_Emails(maTable As HTMLTable) 'Collecte tous les liens vers les mails "intéressants" Dim IE_2 As New InternetExplorer Dim IEDoc_2 As HTMLDocument Dim CollecLiens As IHTMLElementCollection, CollecTR As IHTMLElementCollection, CollecDiv As IHTMLElementCollection Dim TD As HTMLGenericElement, Div As HTMLGenericElement, Element As HTMLGenericElement, Enfant As HTMLGenericElement Dim Elem As HTMLAnchorElement Dim TbLiens() Dim i As Integer, j As Integer Dim Flag As Boolean Flag = False Set CollecLiens = maTable.getElementsByTagName("a") For Each Elem In CollecLiens ReDim Preserve TbLiens(i) Set TbLiens(i) = Elem i = i + 1 Next i = 0 Set CollecTR = maTable.getElementsByTagName("tr") For Each Element In CollecTR For Each TD In Element.Children If Flag = True Then IE_2.navigate TbLiens(i).href IE_2.Visible = True WaitIE IE_2 Flag = False Set IEDoc_2 = IE_2.document WaitDoc IEDoc_2 Set CollecDiv = IEDoc_2.getElementsByTagName("div") For Each Div In CollecDiv If Div.className = "msg" Then For Each Enfant In Div.Children ReDim Preserve Tb(j) Tb(j) = Enfant.innerText j = j + 1 Next End If Next End If If TD.innerText Like "*" & Identifier_Mail & "*" Then Flag = True Next TD i = i + 1 Next Element IE_2.Quit Set IE_2 = Nothing Set IEDoc_2 = Nothing End Sub
🎼 Cordialement,
Franck 🎶
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 20/01/2015 à 10:53
Modifié par pijaku le 20/01/2015 à 10:53
Explications :
1- les bugs étaient dus au fait que le contenu des pages n'étaient pas chargés totalement alors que la page affichait "chargée"... Du coup, on a une boucle d'attente supplémentaire.
2- Pour faire fonctionner ce code :
=> copier-coller le code dans un module standard de votre classeur
=> !!!!!!!!!!!!!!!!! Toujours sous l'interface VBA : Menu OUtils, choix : références,
Trouvez puis sélectionnez les références :
Microsoft Internet Controls
Microsoft HTML Object Library
=> Depuis une feuille : Alt+F8, choix "Import_Mails_De_Gmail" et cliquer sur Exécuter
=> Question : "Saisir un point commun pour identifier vos mails : "
L'affichage HTML de gmail propose, pour la liste des emails, 4 colonnes :
- 1ère colonne : des cases à cocher,
- 2ème : des noms (soit adresses mails soit autre chose (Facebook par exemple))
- 3ème : objets et un peu du corps de l'email
- 4ème : une date
Pour sélectionner les mails que l'on souhaite exporter, il faut donc répondre à la question "Saisir un point commun pour identifier vos mails : " le contenu que vous souhaitez de votre seconde colonne
=> Question : "Nom de la nouvelle feuille : " saisir un nom de feuille valide. Une nouvelle feuille sera alors créée pour accueillir l'import en cours.
=> éventuellement seront demandés votre email et votre mot de passe pour se connecter.
=> Bien attendre le message final : "Import terminé" avant de faire quoique ce soit.
Cette procédure peut être longue, voir très longue.
Dans l'attente de votre retour.
1- les bugs étaient dus au fait que le contenu des pages n'étaient pas chargés totalement alors que la page affichait "chargée"... Du coup, on a une boucle d'attente supplémentaire.
2- Pour faire fonctionner ce code :
=> copier-coller le code dans un module standard de votre classeur
=> !!!!!!!!!!!!!!!!! Toujours sous l'interface VBA : Menu OUtils, choix : références,
Trouvez puis sélectionnez les références :
Microsoft Internet Controls
Microsoft HTML Object Library
=> Depuis une feuille : Alt+F8, choix "Import_Mails_De_Gmail" et cliquer sur Exécuter
=> Question : "Saisir un point commun pour identifier vos mails : "
L'affichage HTML de gmail propose, pour la liste des emails, 4 colonnes :
- 1ère colonne : des cases à cocher,
- 2ème : des noms (soit adresses mails soit autre chose (Facebook par exemple))
- 3ème : objets et un peu du corps de l'email
- 4ème : une date
Pour sélectionner les mails que l'on souhaite exporter, il faut donc répondre à la question "Saisir un point commun pour identifier vos mails : " le contenu que vous souhaitez de votre seconde colonne
=> Question : "Nom de la nouvelle feuille : " saisir un nom de feuille valide. Une nouvelle feuille sera alors créée pour accueillir l'import en cours.
=> éventuellement seront demandés votre email et votre mot de passe pour se connecter.
=> Bien attendre le message final : "Import terminé" avant de faire quoique ce soit.
Cette procédure peut être longue, voir très longue.
Dans l'attente de votre retour.
lixel
Messages postés
22
Date d'inscription
dimanche 23 mai 2010
Statut
Membre
Dernière intervention
18 juillet 2015
20 janv. 2015 à 11:46
20 janv. 2015 à 11:46
Bonjour,
J'ai juste jeté un coup d'oeil et... Il y a du boulot de fait!!
Je regarderait tout cela plus en detail ce week-end car je n'ai pas beaucoup de temps libre en ce moment.
Encore merci pour ton investissement pour ce sujet.
Cordialement
J'ai juste jeté un coup d'oeil et... Il y a du boulot de fait!!
Je regarderait tout cela plus en detail ce week-end car je n'ai pas beaucoup de temps libre en ce moment.
Encore merci pour ton investissement pour ce sujet.
Cordialement