Excel propose de créer des liens hypertextes soit en utilisant une fonction interne, soit en se servant de formules.
Les liens hypertextes peuvent mener à des pages web, à un emplacement particulier dans un classeur excel, des liens de messagerie électronique ...
Afin de créer un lien en utilisant la fonction interne, le classeur doit d'abord être sauvegardé, puis pour insérer un lien, choisissez l'option "Lien hypertexte" dans le menu Insertion.
Créer un hyperlien
formule : = lien_hypertexte(Z100;"cellule Z100")
= lien_hypertexte(feuil2!Z100;"Cellule Z100 sur la Feuille 2")
= lien_hypertexte("[http://xlbysteph.freee.fr/MonClasseur.xls]feuil1!F10", D1)
où la cellule D1 contient le nom de l'hyperlien (voir l'aide pour d'autres syntaxes)
VBA : activecell.formulaR1C1 = "=HYPERlink(R[95]C[23],""cellule Z100"")"
Autre méthode
activesheet.Hyperlinks.add Anchor:=selection, address:="", Subaddress:="Feuil1!Z100"
selection.Hyperlinks(1).Follow NewWindow:=false, addHistory:=true
Un hyperlien existe-t-il ?
Colorier tous les hyperliens d'une feuilledim Val
On Error Resume next
Val = MyCell.Hyperlinks(1).address
On Error Goto 0
if IsEmpty(Val) then Val = MyCell
Sub test()
for each HL In activesheet.Hyperlinks
HL.Parent.Interior.ColorIndex = 15
next HL
end Sub
Indiquer l'adresse des liens hypertextes dans la cellule à droite de ceux-ci
Effacer la ligne où figure un hyperlienSub Hyperliens()
dim rngCell As range
On Error Resume next
for each rngCell In selection
rngCell.Offset(0, 1).value = rngCell.Hyperlinks(1).address
next rngCell
end Sub
Dim hl As Hyperlink
For Each hl In Columns(1).Hyperlinks
hl.Parent.EntireRow.Delete
Next
Effacer les hyperliens d'une plage (mais le contenu de la cellule)
range("A1:C10").hyperlinks.delete
columns(1).hyperlinks.delete
Manipuler l'adresse d'un hyperlien : Right$(ActiveSheet.Hyperlinks(plage.Row).Address, 1) ?
L'hyperlien mène-t-il à un répertoire ou à un fichier
c'est pas infaillible, mais vous pouvez récupérer le dernier caractère de l'hyperlien et vérifier si c'est un anti-slash (\) dans quel cas c'est un répertoire : Right$(activesheet.Hyperlinks(numéro_de_l'hyperlien).address, 1)
Suivre un hyperlien : activeworkbook.followhyperlink address:="mailto:you@yours.com"
Faire suivre les barres de défilement lors d'un clic sur un hyperlien
Ouvrir une page web (Win95 minimum)Lorsqu'on suit un hyperlien, les barres de défilement ne suivent pas :
Ci-dessous deux méthodes pour se déplacer dans une feuille en activant les barres de défilement'Une procédure évènementielle existe sous XL97 pour effectuer une action quand Excel va suivre un hyperlien.
'ou encore, utiliser la méthode Goto pour aller à l'adresse d'une cellule et utiliser le paramètre Scroll=true
'On l'emploie ici en vérifiant la présence d'un Point d'exclamation, caractéristique d'un lien dit interne (dans le document lui-même).
A utiliser dans le code du classeur lui-même
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
'The address should only have a ! if it is a sheet
if InStr(Target.Subaddress, "!") then
application.Goto activecell, true
end if
end Sub
'un autre exemple à inscrire dans le code d'une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.range)
If Target.Count = 1 And Target.Hyperlinks.Count Then
doEvents
Application.Goto ActiveCell, True
End If
End Sub
'ou encore
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
If InStr(Target.SubAddress, "dot") Then
Shell ("execute C:\Program Files\Microsoft Office\Office\Flammes.dot")
Else
Application.Goto activecell, True
end If
end Sub
Sub myHyperlink()
application.Goto Reference:=range("Sheet1!Z100"), Scroll:=true
end Sub
'Exécuter une macro en suivant un lien si celui-ci mène à la feuille Feuil1
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal target
As Hyperlink)
If Sh.Name <> "Feuil1" Then Exit Sub
Application.Run "macro2"
End Sub
Sub macro2()
MsgBox "You are now in the " & activesheet.name & " sheet"
End Sub
Sub OpenWebPage()
URL = "http://www.j-walk.com/ss/index.html"
x = Shell("start " & URL, 1)
end Sub
Table des matières d'un classeur / Sommaire des feuilles d'un classeur : news
L'activation d'un lien ouvre le document lié mais ferme le document actif, que faire
http://support.microsoft.com/support/kb/articles/Q156/2/64.asp?LN=EN-US&SD=g n&FR=0
Empêcher la création automatique d'un lien : à la saisie de "ftp://, http://",etc. Excel crée un hyperlien, que faire ?
How to Prevent the Automatic Creation of Hyperlinks
regardez les articles suivants sur la base de connaissance de Microsoft : articles Q233073 & Q291209
publipostage : article de Mac Ritchie "Mail Merge, Using Mail Merge with data from Excel", http://members.aol.com/rexx03/excel/mailmerg.htmil existe des serveurs dont : http://serverwatch.internet.com/mailservers.html
voir aussi http://www.nameplanet.com/ pour créer une adresse simplifiée et la redirriger sur votre adresse
mailer avec VB :"Multipurpose Internet Mail Extensions MIME" : cela étend le format de messages électroniques afin d'autoriser des messages dans un format ASCII non US (américain), des messages non textuels, des corps de texte multi-parties ...
des infos en anglais ici : http://www.cis.ohio-state.edu/text/faq/usenet/mail/mime-faq/top.html
"mailto:" & destinataire &
"?subject=" & sujet &
"&Body=" & texte &
"&Cc=" & autresdestinataires1 &
"&Cci=" & autresdestinataires2 &
"&Attachment=" & cheminfichier
Quelques remarques sur les variables employées toutes de type string
l'efficacité de syntaxes mailto incluant un attachement ainsi que des destinataires cachés (Cc & Cci) est très aléatoire et vivement déconseilléedestinataire="toto@totoworld.com"
destinataire="toto@totworld.com;mafalda@by.mongolito.com"
ou encore, destinataire=array("toto@totworld.com","mafalda@by.mongolito.com")
'Cet exemple génère un mail en utilisant l'outil de messagerie par défaut. En effet, après l'activation d'un hyperlien, le système prend en charge son ouverture, et lance l'applicatif associé à l'extension du document lié (s'il n'en existe pas, le document est ouvert dans le navigateur par défaut je pense)
Sub SendMail()
dim addressString As String
addressString = "mailto:" & range("A1") & "?subject=" & range("B1") & "&body=" & range("C1")
activeworkbook.followhyperlink address:=addressString
end Sub
'Ce code laisse normalement le soin à l'utilisateur d'envoyer le message, mais si vous voulez procéder à l'envoi en automatique, utilisez les instruction suivantes :
Application.Wait (Now + TimeValue("0:00:02"))
Application.SendKeys "%s"
L'inconvénient de cette méthode (suivre un hyperlien) semble de ne pas pouvoir sauter des lignes dans le corps du document, la méthode ci-dessous conviendrait plus.
Espaces & retours à la ligne dans les syntaxes mailto :Sub Mail_Me()
Shell ("Start mailto:jmlee@freenetname.co.uk") 'vous pouvez bien sûr concaténer des paramètres comme ci-dessus
end Sub
Attention avec les espaces et les retours à la ligne, ils ne sont pas autorisés dans les urls, vous pouvez utilisez les instructions suivantes pour les remplacer par leur équivalent hexadécimal. (subj = variable contenant le sujet, Msg = variable contenant le corps du message)
Replace spaces with %20 (hex)
Subj = Application.WorksheetFunction.Substitute(Subj, " ", "%20")
Msg = Application.WorksheetFunction.Substitute(Msg, " ", "%20")
' Replace carriage returns with %0D%0A (hex)
Msg = Application.WorksheetFunction.Substitute(Msg, vbCrLf, "%0D%0A")
Envoyer un classeur excel
Liens sur l'envoi de mailIl existe une méthode VBA appelée SendMail ; elle permet de définir un sujet, des destinataires et si oui ou non on désire un accusé de réception, MAIS on ne peut pas définir de corps de message.
thisworkbook.SendMail Recipients:="someone@somewhere.com;someoneelse@somewhereelse.com", Subject:="Here is the workbook"
ActiveWorkbook.SendMail Recipients:=Array("Frank Bell", "Bill Manville", "John doe"), Subject:="Happy New Year", ReturnReceipt:=True
Cela peut se faire entre autres en créant un lien hypertexte par le biais du menu insertion avec une syntaxe du genre suivant :
mailto:xlbysteph@free.fr?attachment="c:\temp\classeur1.xls".
Mais la prise en compte de l'attachement ne marche pas sur tous les systèmes.
Ne comptez pas du tout sur cette méthode, à part peut-être si vous avez XL2000 & qu'il le gère.
XL2000: How to Use an Excel Database to Send E-Mail, http://support.microsoft.com/support/kb/articles/Q241/4/98.ASP
XL2000: Types of Formatting and Features Preserved in Workbook Sent as Body of HTML E-mail Message, http://support.microsoft.com/support/kb/articles/q238/5/74.ASP, cet article est mal intitulé, il parle de l'envoi d'une feuille (non pas du classeur) en tant que corps d'un message électronique.
OFF2000: E-mail Button Doesn't Appear on the Standard Toolbar, http://support.microsoft.com/support/kb/articles/Q248/7/35.ASP
select Case application.MailSystem
Case xlMAPI
msgbox "Mail system is Microsoft Mail"
Case xlPowerTalk
msgbox "Mail system is PowerTalk"
Case xlNoMailSystem
msgbox "No mail system installed"
end select
Envoi de mail avec Outlook Express (envoi direct)
Sub MailOXpress()
Dim dest$, sujet$, texte$dest = "f.s@wanadoudou.disdonc"
sujet = "Envoyer un mail depuis Xl"
texte = "Envoyé avec Outlook Express depuis Excel"
Shell "C:\Program Files\Outlook Express\msimn.exe " & _
"/mailurl:mailto:" & dest & _
"?subject=" & sujet & _
"&Body=" & texte & ", 3"
'sendkeys "{ENTER}" pour envoyer le mailEnd Sub
des infos sur le paramétrage de la ligne de commande : Q192341 - OLEXP: How to Send Outlook Express Mail from a Command Line: http://support.microsoft.com/support/kb/articles/q192/3/41.asp
Ci-dessous des exemples d'envois de classeur, etc.
Envoi d'un mail avec Outlook, nom du destinataire dans la première feuille, première cellule
Sub envoi()
dest="Zaza"
Set ol=CreateObject("outlook.application")
Set mail=ol.createitem(olmailitem)
mail.body=thisworkbook.sheets(1).cells(1).Text
mail.Recipients.add dest
mail.send
end Sub
Envoi d'un classeur avec Outlook
Sub SendEMailwithAttachments()
dim ol As Object, myItem As Object
Set ol = CreateObject("outlook.application")
Set myItem = ol.CreateItem(olMailItem)
myItem.to = "toto@excel.com"
myItem.Subject = "Test Mail"
myItem.Body = "Hello Word." & Chr(13) & Chr(13) & "Bye All"
Set myAttachments = myItem.Attachments
myAttachments.add "C:\temp\monclasseur.xls"
msgbox "Now sending to " & myItem.to
myItem.Send
Set ol = Nothing
end Sub
'Envoi d'un classeur avec la méthode Sendmail avec liste de destinataires sur une feuille
sub mel()
dim adresse_mel() as string
range("A1").Select
range(ActiveCell, ActiveCell.End(xldown)).Select
'Lecture des adresses dans la colonne A et stockage dans une variable
nb_mel = 0
For Each cellule In Selection
nb_mel = nb_mel + 1
ReDim Preserve adresse_mel(nb_mel)
adresse_mel(nb_mel) = cellule.Value
Next
If nb_mel >= 1 Then
For I = 1 To nb_mel
ActiveWorkbook.SendMail Recipients:=adresse_mel(i), Subject:="Bla bla bla ... "
Next I
End If
end sub
Envoyer un mail sur changement de cellule
Private Sub Worksheet_selectionChange(ByVal Target As Excel.range)
On Error Goto ErrorSubr:
Tempvalue = thisworkbook.worksheets("Sheet1").range ("A1").value
if Tempvalue > 0 then
dim ol As Object
dim MailSendItem As Object
Set ol = CreateObject("Outlook.application")
Set MailSendItem = ol.CreateItem(olMailItem)dim olns As Object
dim objFolder As Object
Set olns = ol.Getnamespace("MAPI")
with MailSendItem
.Subject = "Essai Mailing"
.Body = Tempvalue
.to = "toto@excel.com"
.Send
end with
Set ol = Nothing
Set MailSendItem = Nothing
Set olns = Nothing
end if
Exit Sub
ErrorSubr:
msgbox ("need a number")
end Sub
Manipulation de Microsoft Outlook
Ci-desssus, vous trouverez quelques exemples de création de mails. Ci-dessous, des liens vous amèneront vers des exemples de manipulation d'Outlook et vous montrons comment manipuler tout système de messagerie.
http://www.outlookcode.com
http://www.cdolive.com/cdo5.htm
http://www.slipstick.com
Cherchez également la page "Slovak Technical Services Code Samples", elle contient de bons exemples.
Vous trouverez ici juste une ou deux choses sur les queries mais plus généralement sur comment récupérer une page web
Regardez l'objet QueryTables dans l'aide VBA et les articles suivants de Microsoft Laissez-vous guider par l'aide : tapez-y "Web, queries", et choisissez l'option "Get Data from a Web source" !!La bourse et excelSub URL_Get_Query()
dim URL1 As String
dim tempo As Worksheet, rngList As rangeURL1 = "URL;http://quote.pathfinder.com/money/quote/qc?symbols=AAPL"
Set tempo = thisworkbook.sheets(1)
with tempo.QueryTables.add(Connection:=URL1, destination:=tempo.range("A1"))
.BackgroundQuery = true
.TablesOnlyFromHTML = false
.Refresh BackgroundQuery:=false
.SaveData = true
end withend Sub
Téléchargement les cours de la bourse au format excel : http://bourse.lesechos.fr/BOURSE/fr/telechargement/telechargement.htm
News
http://www.microsoft.com/france/scripting/default.htm?/FRANCE/scripting/WindowsHost/doc/wsRunWscript.htm
http://www.ccim.be/ccim328/VB/index.htm
http://cwashington.netreach.net/main_site/default.asp?topic=news
Sub SaveAsHtml()
'this saves as html
Dim ObjectToConvert 'As Variant
Dim Reslult As Integer
Set ObjToConvert = Sheets("sheet5").Range("b1:r14")
AddIns("Internet Assistant Wizard").Installed = True
Result = htmlconvert(rangeandcharttoconvert:=Sheets("sheet5").Range("b1:r143"), useexistingfile:=False, usefrontpageforexistingfile:=False, addtofrontpageweb:=False, codepage:=1252, htmlfilepath:="c:\My Documents\wssnba.htm", linebeforetablefullpage:=True, namefullpage:="VolFreak")
Application.Save : ActiveWindow.Close'this publishes to ftp,but not as html (I have tried File format html)
Workbooks.Open FileName:="C:\My Documents\wssnba.htm"
Windows("wssnba.htm").Activate
ActiveWorkbook.SaveAs FileName:="ftp://ftp.xoom.com/wssnba.prn", FileFormat :=xlTextPrinter, CreateBackup:=False
End Sub
Un autre exemple
Sheets("toto").Select
With ActiveWorkbook.PublishObjects("toto")
.HtmlType = xlHtmlStatic
.Filename = Nomdufichierhtml
.Publish (False)
End With
Création, Importation et Exportation de fichiers Excel et HTML
Créer un fichier excel à partir du webPiste de C. H., le lundi 10 avril 2000 14:30, sujet "Re: API Excel"
Si tu es sous W98, regarde les exemples dans le dossier \Windows\Samples Sinon: http://www.microsoft.com/france/scripting/default.htm?/FRANCE/scripting/WindowsHost/doc/wsRunWscript.htm http://www.ccim.be/ccim328/VB/index.htm
http://cwashington.netreach.net/main_site/default.asp?topic=news
Importer une page web sur une feuille de calcul : newsNaviguer à partir de cet article de MS : http://support.microsoft.com/support/kb/articles/Q112/8/13.asp
Regarder là http://www.mvps.org/vbnet/code/network/ftplist.htm et là http://kpdteam.tripod.com/vbasic/winftp.zip.htm
Chercher dans le MSDN
Ou utiliser un shell pour exécuter FTP, exécuter un ls et faites un import du fichier résultat sur le disque pour le manipuler
Connexion à un réseau : Randy Birch's site http://www.mvps.org/vbnet/_frames/code/ndxnetw.htm
Se connecter et se déconnecter : news
Etes-vous connecté
Determining Network Connections with InternetGetConnectedState
Six wrapper routines returning system network connection information.
http://www.mvps.org/vbnet/code/network/internetgetconnectedstate.htm
Faire un ping sur un nom de domaine en vba
Sample: PingCtrl.exe Uses Winsock2 Features from Visual Basic
http://support.microsoft.com/support/kb/articles/Q185/7/26.asp
Composer un numéro de téléphone
Des exemples : news, news, liens + exemple : newsJ@C, sujet: "Re: importer une valeur du CAC40", le vendredi 3 novembre 2000 21:03
Function valor(sicovam)
Workbooks.Open FileName:= _
"http://www.boursorama.com/cours33.phtml?code=" & sicovam &
"&choix_bourse=pays%3D33"
Cells.MergeCells = False
valor = Cells.Find(What:="Dernier", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Offset(0, 2)
ActiveWorkbook.Close (False)
valor = 6.55957 * WorksheetFunction.Substitute(valor, " (c)", "")
End Function