begin process at 2012 02 16 13:08:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > ENCODER UNE URL EN UTF8 DEPUIS WORD

ENCODER UNE URL EN UTF8 DEPUIS WORD


 Information sur la source

Note :
Aucune note
Catégorie :VBA Classé sous :word, utf8, URL, encode, macro Niveau :Débutant Date de création :19/03/2008 Date de mise à jour :19/03/2008 14:11:01 Vu :6 951

Auteur : VBsnail

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Si on veut créer des URL correctes dans Word, il est nécessaire d'encoder convenablement tout ce qui n'est pas un caractère ASCII.
Pour tous les caractères de plus de 7 bits, il faut utiliser le codage UTF8.
Voir à ce sujet l'exellente page de Wikipedia http://fr.wikipedia.org/wiki/Utf8
Cette fontion n'existe pas en VB6. J'en ai écrit une, EncodeUTF8 ci-dessous, qui à l'air de bien marcher.

Nota pour les curieux :
Il y a des bien fonctions pour cela en .net, mais depuis les applications Office (même Office 2007 !), c'est du VB6 qui est utilisé pour programmer les macros.

Au hasard, copier, coller, sélectionner dans Word un peu de Chinois pour essayer

西藏精神领& #34966;达赖喇嘛八&#2 6085;呼吁藏人冷&#387 45;

Source

  • Sub Google()
  • '
  • ' Google Macro
  • ' Macro enregistrée le 21/02/2008 par VBsnail
  • Dim Utf8 As String
  • TexteSelectionne = ""
  • Text = Selection.Text
  • i = 1
  • For i = 1 To Len(Text)
  • car = Mid(Text, i, 1)
  • TexteSelectionne = TexteSelectionne + EncodeUTF8(car)
  • Next i
  • 'debug MsgBox (TexteSelectionne)
  • ' %22 c'est le guillement " à mettre en début et en fin de chaîne pour forcer la recherche Google sur la chaîne entière
  • URL = "http://www.google.com/search?q=%22" & TexteSelectionne & "%22"
  • ' MsgBox (Len(URL))
  • ' Attention, si la longueur dépassse 487, l'url transmise est tronquée.
  • ' Limitation liée à la taille de l'URL que Word accepte d'associer au texte. A éclaircir
  • ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
  • URL, SubAddress:="", ScreenTip:="", _
  • TextToDisplay:=Selection.Text
  • End Sub
  • Public Function EncodeUTF8(ByVal car As String) As String
  • CarVal = AscW(car)
  • If CarVal < 0 Then CarVal = CarVal + 65536
  • 'Ce IF, c'est pour éviter d'avoir un nombre négatif pour un code point >7fff
  • If CarVal < 128 Then 'Cas ASCII, codage sur 1 octet, 7 bits significatifs
  • EncodeUTF8 = car
  • Exit Function
  • End If
  • If CarVal < 2048 Then 'Cas du codage sur 2 octets, de 8 à 11 bits significatifs (5 bits puis 6 bits)
  • Sextet = 128 + CarVal Mod 64
  • CarVal = CarVal \ 64
  • Quintet = 192 + CarVal
  • EncodeUTF8 = "%" + Hex(Quintet) + "%" + Hex(Sextet)
  • Exit Function
  • End If
  • 'cas du codage sur 3 octets, de 12 à 16 bits significatifs, (4 bits, 6 bits, 6bits)
  • Sextet2 = 128 + CarVal Mod 64
  • CarVal = CarVal \ 64
  • Sextet1 = 128 + CarVal Mod 64
  • CarVal = CarVal \ 64
  • Quartet = 224 + CarVal
  • EncodeUTF8 = "%" + Hex(Quartet) + "%" + Hex(Sextet1) + "%" + Hex(Sextet2)
  • ' A ma connaisssnace, Windows ne gère pas de caractères Unicode au déla de U+FFFD, représenté par un rectangle vide
  • ' de toutes façons, l'Unicode est codé sur 2 octets !!!
  • ' Il n'est donc pas nécessaire de prévoir le cas du codage sur 4 octets
  • End Function
Sub Google()
'
' Google Macro
' Macro enregistrée le 21/02/2008 par VBsnail
    Dim Utf8 As String
    TexteSelectionne = ""
    Text = Selection.Text
    i = 1
    For i = 1 To Len(Text)
      car = Mid(Text, i, 1)
      TexteSelectionne = TexteSelectionne + EncodeUTF8(car)
    Next i
'debug    MsgBox (TexteSelectionne)

' %22 c'est le guillement " à mettre en début et en fin de chaîne pour forcer la recherche Google sur la chaîne entière
     URL = "http://www.google.com/search?q=%22" & TexteSelectionne & "%22"
'  MsgBox (Len(URL))
' Attention, si la longueur dépassse 487, l'url transmise est tronquée.
' Limitation liée à la taille de l'URL que Word accepte d'associer au texte. A éclaircir
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        URL, SubAddress:="", ScreenTip:="", _
        TextToDisplay:=Selection.Text
End Sub

Public Function EncodeUTF8(ByVal car As String) As String
        CarVal = AscW(car)
        If CarVal < 0 Then CarVal = CarVal + 65536
        'Ce IF, c'est pour éviter d'avoir un nombre négatif pour un code point >7fff
        If CarVal < 128 Then 'Cas ASCII, codage sur 1 octet, 7 bits significatifs
            EncodeUTF8 = car
            Exit Function
        End If
        If CarVal < 2048 Then 'Cas du codage sur 2 octets, de 8 à 11 bits significatifs (5 bits puis 6 bits)
            Sextet = 128 + CarVal Mod 64
            CarVal = CarVal \ 64
            Quintet = 192 + CarVal
            EncodeUTF8 = "%" + Hex(Quintet) + "%" + Hex(Sextet)
            Exit Function
        End If
        'cas du codage sur 3 octets, de 12 à 16 bits significatifs, (4 bits, 6 bits, 6bits)
        Sextet2 = 128 + CarVal Mod 64
        CarVal = CarVal \ 64
        Sextet1 = 128 + CarVal Mod 64
        CarVal = CarVal \ 64
        Quartet = 224 + CarVal
        EncodeUTF8 = "%" + Hex(Quartet) + "%" + Hex(Sextet1) + "%" + Hex(Sextet2)
' A ma connaisssnace, Windows ne gère pas de caractères Unicode au déla de U+FFFD, représenté par un rectangle vide
' de toutes façons, l'Unicode est codé sur 2 octets !!!
' Il n'est donc pas nécessaire de prévoir le cas du codage sur 4 octets
End Function

 Conclusion

Je sais, je sais, ce code n'est pas optimal, ni très propre.
mais enfin il a l'air de marcher.


 Historique

19 mars 2008 14:10:26 :
Cas codage sur deux octetes: correction de la constant pour les poids forts du premier octet.
19 mars 2008 14:11:01 :
Cas codage sur deux octets: correction de la constant pour les poids forts du premier octet.

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) VB8: EXTRACTION DE CARACTÈRES CHINOIS ET CONSTRUCTION DE LIS...

 Sources de la même categorie

Source avec Zip Source avec une capture OUTLOOK ATTACHEMENT SAVER par MoiLafouine
Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) EXPORTER LES IMAGES DE WORD ET D' EXCEL par Le Pivert
Source avec Zip UTILISER LES PROPRIÉTÉS PERSO D'UN DOCUMENT COMME PARAMETRES... par bigfish_le vrai
SOUS-TITRES : INCRÉMENTATION DE TOUTES LES CHAÎNES DE CARACT... par ALMIRA
Source avec Zip FREEBOOK : MODELE ET MACRO WORD EBOOK POUR LES LISEUSES ELEC... par Patrice99
Source avec Zip WORD : OUVERTURE (AVEC OU SANS PASSWORD) ET PROPRIÉTÉES D'UN... par DJMoustique

Commentaires et avis

Commentaire de VBsnail le 19/03/2008 01:13:22

Heu, je vous prie de m'excuser, la phrase en Chinois n'est pas passé.
Mais enfin, vous êtes assez grand pour aller sur pêcher un ou deux caractères Chinois, Japonais, Arabe ou Cyrilique sur le net.

Commentaire de VBsnail le 19/03/2008 08:32:40

Désolé, mais les caractères Chinois ne sont pas passés.
Mais pour ici,
http://www.smarthanzi.net/
on peut trouver des références à des sites en Chinois, et en plus, ce site remarquable permet de comprendre de quoi ça parle !! Si, si.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lancer une macro au démarrage d'un fichier Word [ par Super Franck ] Comment lancer automatiquement une macro au démarrage d'un fichier Word Macro Word: insertion champs de fusion [ par Laurent ] J'ai besoin d'écrire une macro qui me permette d'insérer dans mon document word un champ de fusion qui pourra prendre deux valeurs lors de la fusion e executer macro word à l'ouverture de word [ par kkm ] SVP,Je souhaite executer une fusionde doc sous word en la lançant à partir d'un formulaire vb. Par exemple un utilisateur A clique sur un bouton qui f editer un formulaire WORD depuis macro EXCEL [ par Yann ] Bonjour tous,De cherche désespérément la commande qui me permettra de modifier un texte dans un fichier word en mode formulaire.j'arrive à atteindre l pb de macro word + formulaire [ par steph ] Bonjour Ce que je veux faire : Je rempli un formulaire (fait sous vb editor)Puis chaque zone de ce formulaire je le positionnne a un endroit bien pr Lancer macro word automatiquement [ par one ] Bonjour,Je suis un debutant en VBA. Voila j'ai developpe une appli avec word (alt+f11). Le probleme est que pour lancer cet appli je suis oblige de pa MACRO WORD !! need help !! [ par kimsRE ] help me !!!comment tester dans une macro word en vb si on est sur la derniere page d'un document ???exemple : verifier ke dans un document de X je sui MACRO WORD !! need help !! [ par kimsRE ] help me !!!comment tester dans une macro word en vb si on est sur la derniere page d'un document ???exemple : verifier ke dans un document de X je sui Pb de bibliothèque dans une macro Word [ par rutabaga ] J'ai écrit une macro Word AutoNew. Elle fonctionne parfaitement sur ma bécanne. Quand j'installe le .dot contenant cette macro sur d'autres bécannes a Pb Word vba et impression en nombre [ par Lunacy ] j'utilise NT4 SP6 Word 2000J'ai une imprimante ( par défaut ) pour convertir en PDF ( type PDFWRITER )j'ai fait une macro qui automatise le traitement


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,106 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales