Microsoft 365 Création d'un nouvel onglet du ruban en vba et y attacher 4 macros complémentaires (MAC et PC)

RyuAutodidacte

XLDnaute Impliqué
Bonjour,

j'ai beau chercher partout mais je ne trouve de solution pour le moment …

Comme l'onglet "Acceuil" qui existe dans le ruban, je cherche à pourvoir créer par vba un nouvel onglet "TOTO" et y insérer 4 macros, provenant d'un complément Excel d'un fichier xlam déjà insérer par macro :
VB:
Sub Add_AddIn() 'version Mac (peut être PC aussi pouvez vous confirmer SVP)
Dim addInPath As String
    addInPath = "MonChemin/TEST.xlam"
    AddIns.Add addInPath
    AddIns("TEST").Installed = True '
End Sub
Le but est de pourvoir faire une automatisation d'installation sur plusieurs utilisateurs Mac et PC

merci d'avance pour vos réponses

Ryu
 

patricktoulon

XLDnaute Barbatruc
re
merci pour le com sur youtube

pour répondre a ta question si il est abouti mais plein de petits bug que j'avais la flemme de corriger
pour moi ca va car je sais ce qui faut pas faire mais pour un utilisateur lambda ça aurait été une torture

l'ancien
demo.gif
 

RyuAutodidacte

XLDnaute Impliqué
re
et dans le menuj'ai mis un nouveau bouton dans le menu
Regarde la pièce jointe 1172384
c'est bien ça.
petite questions : tes indentations tu les fait avec des espaces ou des tabulation ?
Tes retours Chariot sont normalement des : vbNewline , vbCr ou vbcCrLf ?

PS : je vais te préparer un zip fait sur Mac, car j'ai besoin que tu m'aides pour trouver qu'elle est la différence avec le zip sur PC stp si tu veux bien …
 

RyuAutodidacte

XLDnaute Impliqué
Et on me dit que je suis une Usine à Gaz lol :p
On le dit pas c'est le pseudo qui le dit :p ;)

Faut quand même avouer que l'outil Creator de Patrick est hyper pratique et pas besoin de mettre les mains dans le cambouis ;)
Moi j'aime bien apprendre et comme je suis sur Mac (j'ai bien appris les diff entre PC et Mac), je fais en sorte que mes codes soient multi-plateforme … PC/MAC ;)
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Il est dit :
tu pose la question alors que je t'ai donné la version 4.0 de mon compilateur ou tu a tout dedans
Puis
Faut quand même avouer que l'outil Creator de Patrick est hyper pratique

Mais où peut on le trouver cet outil ? Ou alors j'ai pas compris.... Lol
Mais rien que le visuel du fonctionnement de cet outil et très prometteur !
Bonne fin de journée
Jean marie
 

RyuAutodidacte

XLDnaute Impliqué
Bonjour le Fil
Il est dit :

Puis


Mais où peut on le trouver cet outil ? Ou alors j'ai pas compris.... Lol
Mais rien que le visuel du fonctionnement de cet outil et très prometteur !
Bonne fin de journée
Jean marie
pour répondre a ta question si il est abouti mais plein de petits bug que j'avais la flemme de corriger
pour moi ca va car je sais ce qui faut pas faire mais pour un utilisateur lambda ça aurait été une torture
Hello,
je pense qu'une fois finalisé complètement en étant sur qu'il n y a plus de bug il le mettra dans les contributions, Patrick est toujours dans l'aide et le partage
 

RyuAutodidacte

XLDnaute Impliqué
Re @patricktoulon ,

Voilà le zip en question fais sur Mac, peux tu voir ce qu'il ne va pas avec le zip ??
si on peut trouver une différence entre le zip PC et le zip Mac
j'ai testé de le remettre en xlsm sur Mac, mais à l'ouverture avec Excel ce n'est pas ok
Est ce que le zip PC à besoin d'un nomenclature aussi ou autres …?
 

Pièces jointes

  • Testzip.zip
    8.2 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
pour répondre a @ChTi160 dans les premières pages tu trouvera le module compilateur
version basique
il prend un code xml et en fait un fichier XL avec le ruban
pour répondre a ryu
non j’utilise pas de tab ou de vbnewline comme je te l'ai dit c'est la fonction de compilation et de streamer fichier qui crée le xml intenté
pour info si tu regarde le code de la fonction dans le module de compilation
tu y trouvera l'ordre d'indenter "Indent=True"

VB:
'enregistrer le xml  au format utf-8 et indenté
Public Sub SaveFormatDocToFileXL(ByVal doc, ByVal FileName As String)
    Dim rdrdom As Object, StreamFormaté As Object, wtrFormatted As Object

    Set rdrdom = CreateObject("MSXML2.SAXXMLReader.6.0")
    Set StreamFormaté = CreateObject("ADODB.Stream")
    Set wtrFormatted = CreateObject("MSXML2.MXXMLWriter")

    With StreamFormaté
        .Open
        .Type = 1    'adTypeBinary
        With wtrFormatted
            .omitXMLDeclaration = False
            .standalone = True
            .byteOrderMark = False    'If not set (even to False) then
            '.encoding is ignored.
            .Encoding = "utf-8"    'Even if .byteOrderMark = True
            'UTF-8 never gets a BOM.
            .indent = True
            .output = StreamFormaté
            With rdrdom
                Set .contentHandler = wtrFormatted
                Set .dtdHandler = wtrFormatted
                Set .errorHandler = wtrFormatted
                .putProperty "http://xml.org/sax/properties/lexical-handler", wtrFormatted
                .putProperty "http://xml.org/sax/properties/declaration-handler", wtrFormatted
                .Parse doc
            End With
        End With
        If Dir(FileName) <> "" Then Kill FileName
        .SaveToFile FileName
        .Close
    End With
    Set rdrdom = Nothing
    Set StreamFormaté = Nothing
    Set wtrFormatted = Nothing
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
RYU
maintenant si tu y tiens je peux te faire une fonction en string pour indenter ton code xml
mais toujours pour windows car il me faut un domdocument contenant la hiérarchie
sinon ben ca va pas être de la tarte encore une fois sans avoir de hiérarchie a analyser
 

patricktoulon

XLDnaute Barbatruc
j'ai retrouvé ma vielle fonction qui n'enregistre pas mais te donne le code indenté

VB:
Sub test()
MsgBox IndenterXMLCode("<customUI><ribbon><tabs><tab><group><button></button></group></tab></tabs></ribbon></customUI>")
End Sub

'version 2 en memoire
'attention enleve l'instruction de pressing
Public Function IndenterXMLCode(vDomOrString As Variant) As String
    Dim XMLWriter As Object    ' MSXML2.MXXMLWriter

    On Error GoTo QH
    Set XMLWriter = CreateObject("MSXML2.MXXMLWriter")
    XMLWriter.indent = True    'ajoute l'attribut indent
    'XMLWriter.byteOrderMark = False
    'XMLWriter.Encoding = "UTF-8"    'encoding process ne fonctionne pas
    'alors on la supprime
    XMLWriter.omitXMLDeclaration = True    'supprime la declaration processing
    With CreateObject("MSXML2.SAXXMLReader")
        Set .contentHandler = XMLWriter
        '--- keep CDATA elements
        '.putProperty "http://xml.org/sax/properties/lexical-handler", XMLWriter
        '.putProperty "http://xml.org/sax/properties/declaration-handler", XMLWriter    'ne fonctionne pas non plus
        .Parse vDomOrString
    End With
    '--- success
    IndenterXMLCode = XMLWriter.output

    'essaie de faire un replace mais fonctionne pas ca supprime carrément l'instruction encoding dans l'entete
    'IndenterXMLCode = Replace(XMLWriter.output, "UTF-16", "UTF-8")
    Exit Function
QH:
End Function
 

Usine à gaz

XLDnaute Barbatruc
j'ai retrouvé ma vielle fonction qui n'enregistre pas mais te donne le code indenté

VB:
Sub test()
MsgBox IndenterXMLCode("<customUI><ribbon><tabs><tab><group><button></button></group></tab></tabs></ribbon></customUI>")
End Sub

'version 2 en memoire
'attention enleve l'instruction de pressing
Public Function IndenterXMLCode(vDomOrString As Variant) As String
    Dim XMLWriter As Object    ' MSXML2.MXXMLWriter

    On Error GoTo QH
    Set XMLWriter = CreateObject("MSXML2.MXXMLWriter")
    XMLWriter.indent = True    'ajoute l'attribut indent
    'XMLWriter.byteOrderMark = False
    'XMLWriter.Encoding = "UTF-8"    'encoding process ne fonctionne pas
    'alors on la supprime
    XMLWriter.omitXMLDeclaration = True    'supprime la declaration processing
    With CreateObject("MSXML2.SAXXMLReader")
        Set .contentHandler = XMLWriter
        '--- keep CDATA elements
        '.putProperty "http://xml.org/sax/properties/lexical-handler", XMLWriter
        '.putProperty "http://xml.org/sax/properties/declaration-handler", XMLWriter    'ne fonctionne pas non plus
        .Parse vDomOrString
    End With
    '--- success
    IndenterXMLCode = XMLWriter.output

    'essaie de faire un replace mais fonctionne pas ca supprime carrément l'instruction encoding dans l'entete
    'IndenterXMLCode = Replace(XMLWriter.output, "UTF-16", "UTF-8")
    Exit Function
QH:
End Function
comme koi : entre vieux ... lol :p
 

Membres actuellement en ligne

Statistiques des forums

Discussions
314 017
Messages
2 104 584
Membres
109 084
dernier inscrit
mizab