Autres en ce beau dimanche un petit aperçu de mon ribbon creator vba

patricktoulon

XLDnaute Barbatruc
bonjour a tous
juste un petit apercu de mon ribbon creator VBA version beta 1.0

la version avec litview ;la version sans listview et 2/3 projet commencé pour exemple
allez c'est parti les beta testeur ;)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
@Staple1600
en gros avec la macro4 il faut declarer "jj..." le type d'arguments avant les argument
tiens
un morceau de mon modul tuto macro4/api
VB:
'**************************************************************************************************************************
'        Manipulation des Api avec   ((ExecuteExcel4Macro))
'                          patricktoulon
'               fonctionne en 32 comme en 64 bits

' syntaxe de codage:
' CALL (nom_dll, nom_fonction, chaîne_type, func_arguments1, ..., func_argumentsN)

'1° nom_dll - le nom de la DLL, qui contient la fonction souhaitée. Ce nom doit contenir le chemin d'accès complet si non enregistrée
' si la DLL ne se trouve pas dans votre dossier Windows, Système ou dans le dossier spécifié dans la variable d'environnement PATH.

'2° nom_fonction - nom de la fonction.

'3° type_string - chaîne de texte qui identifie le type de données de la valeur de retour et les types de données de tous les paramètres. Le premier caractère type_string définit la valeur de retour.

'4°  func_arguments1, ..., func_argumentsN - paramètres de fonction. Leurs types doivent respecter type_string. Il peut être transmis jusqu'à 27 paramètres.

'Types de données pour type_string: argument(chaîne_type)

'B - nombre à virgule flottante de 8 octets (IEEE), transféré par valeur, type C double.

'C - Chaîne terminée par zéro (null) (longueur max. = 255 caractères), transférée par référence, type C char *

'F - Chaîne terminée par zéro (null) (longueur max. = 255 caractères), transférée par référence (modifier sur place) , Type C char *

'J - entier signé de 4 octets de large, transféré par valeur, type C long int

'P - structure de données OPER d'Excel, transféré par référence, type C OPER *

'R - structure de données XLOPER d'Excel, transféré par référence, type C XLOPER *
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Bon boulot.
Il a produit ce xml :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<customUI xxmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="tab0" label="Outils">
<group id="group_1" label="Adh鳩on"/>
</tab>
</tabs>
</ribbon>
</customUI>

Où l'on voit que le tab n'a pas son attribut visible. N'ayant pas trouvé le moyen de le faire par ton outil, j'ai utilisé CustomUi sinon pas de tab.

Cordialement
 

patricktoulon

XLDnaute Barbatruc
re
Dim cls() As New creatorX2

sérieux vous posez encore la question!!!???🤣 c'est pourtant ma marque de fabrique 🤣🤣

c'est simple un module userform EST UN MODULE CLASSE ben je m'en sert comme tel en parallèle a son utilisation

c'est pour instancier les events des labels dynamiques de la vue de gauche à leur création dans la sub visual
et l'event commun c'est Private Sub btx_Click()

voilà pourquoi mes boites de dialogs perso(calendar,msgboxX,imputboxX etc...) sont transportables
 

Staple1600

XLDnaute Barbatruc
Re

=>Patricktoulon
Justement puisque Roblochon cite Custom UI Editor, quels sont les avantages de ton appli par rapport à celui-ci?
(à part la beauté du geste et du code)

[EDITION]
PS: merci pour l'extrait de "tuto macro4/api"
Tu as lien qui renverrait vers le fil où tu en causes?
(sur XLD ou DV)
 

patricktoulon

XLDnaute Barbatruc
Re,

Bon boulot.
Il a produit ce xml :


Où l'on voit que le tab n'a pas son attribut visible. N'ayant pas trouvé le moyen de le faire par ton outil, j'ai utilisé CustomUi sinon pas de tab.

Cordialement
?????????? quel attribut??
le tab dans cette version ne fait que l'ID et le label
je n'ai pas fait les attributs pour callback (le getvisible etc...)
je pense qu'avant de se lancer dans le callback des onglet il faut bien comprendre comment fonctionne mon app
 

patricktoulon

XLDnaute Barbatruc
perso j'ai aussi customUI editor mais le code tu te le tape
là avec mon app tu code rien du tout
dans customUI editor tu n'a pas de bouton ADD button ,Insertbefore BUtton etc....
c'est une page blanche et tu tape et tu n'as pas de vue graphique(aussi simpliste soit elle) indenté) comme ma vu de gauche

@Staple1600 non la question n'est pas bête mais j'y ai répondu tellement de fois 🤣 🤣
non de lien pour les api macro4 j'en ai pas je me suis fait mon propre tuto avec plus d'une 100 aine d'api testé
 

patricktoulon

XLDnaute Barbatruc
j'ai oublié une chose importante
les accents NIET!!!!!!!

c'est peut être pour ça @Roblochon

après si tu me dis que l'onglet n'est pas visible si il n'a pas d'attribut visible alors c'est que ta version d'excel visiblement l'impose , sinon il devrait être visible
cela dit je peux vous l'ajouter ça mange pas de pain
je vais tester
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

?????????? quel attribut??

l'attribut 'visible'.
Comme il n'est pas présent par défaut avec sa valeur true, le tab n'est pas affiché, du moins sur ma version excel.
<tab id="tab0" label="Outils" visible="true">


Les accents ne sont pas pris en compte dans les labels: Adhésions donne Adh?sions. Re CustomUi pour corriger.

Pour enregistre les docs XML et ne plus avoir de problèmes d'accent, d'indentation et autres, j'utilise :
VB:
Private Sub FormatDocToFile(ByVal Doc As MSXML2.DOMDocument, _
                            ByVal FileName As String)
    'Reformats the DOMDocument "Doc" into an ADODB.Stream
    'and writes it to the specified file.
    '
    'Note the UTF-8 output never gets a BOM.  If we want one we
    'have to write it here explicitly after opening the Stream.
    Dim rdrDom As MSXML2.SAXXMLReader
    Dim stmFormatted As ADODB.Stream
    Dim wtrFormatted As MSXML2.MXXMLWriter

    Set stmFormatted = New ADODB.Stream
    With stmFormatted
        .Open
        .Type = adTypeBinary
        Set wtrFormatted = New MSXML2.MXXMLWriter
        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 = stmFormatted
            Set rdrDom = New MSXML2.SAXXMLReader
            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
        .SaveToFile FileName
        .Close
    End With
End Sub

cordialement

[suggestion] Permettre de changer les id des objets[/suggestion]
 

patricktoulon

XLDnaute Barbatruc
oui les accents ne sont pas gérés j'ai pas encore trouvé pourquoi

pour ton attribut "visible
j'ai testé on peut le mettre

change les deux event des bouton Add et insertbefore pour tab
VB:
'*********************************************Ajout et insertion d'une balise TAB************************************************
'tab
Private Sub btAddtab_Click()
    If docXML Is Nothing Then MsgBox "créer dabords un new Custom ou loader un project": Exit Sub
    Dim ids, nbtab&, lab$, Btab, ctrl
    nbtab = docXML.getelementsbytagname("tab").Length
    ids = "tab" & nbtab
    lab = "onglet" & nbtab
    Set Btab = docXML.createelement("tab"): Btab.setattribute "visible", "true": Btab.setattribute "id", ids: Btab.setattribute "label", "onglet" & nbtab
    BtaBs.appendchild (Btab)
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is TextBox Then ctrl = ""
    Next
    actifelement = ids
    visual
End Sub


Private Sub btInserttab_Click()
    Dim ids, nbtab, lab$, Btab, B
    If docXML Is Nothing Then MsgBox "il n'y a pas de projet chargé": Exit Sub

    nbtab = docXML.getelementsbytagname("tab").Length
    ids = "tab" & nbtab
    lab = "onglet" & nbtab
    Set Btab = docXML.createelement("tab"): Btab.setattribute "visible", "true": Btab.setattribute "id", ids: Btab.setattribute "label", lab
    Set B = GetXElementsById(docXML, actifelement.Text)
    If B Is Nothing Then MsgBox " veuillez sélectionner un element dans le visuel pour insérer": Exit Sub
    B.ParentNode.InsertBefore Btab, B
    If Btab.ParentNode.tagname <> "tabs" Then Btab.ParentNode.RemoveChild (Btab): MsgBox "on ne peut placer un onglet ici!!": Exit Sub
    actifelement = ids
    visual

End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

C'est fait. Merci,

Détail.Remplacer ("créer dabords un new Custom ou loader un project", "Créer d'abord un nouveau projet ou chargez un project existant")
@Roblocon tu peux me donner le n° de version de ton customUI editor?

il faut "enregistrer" avant de lancer la création du fichier sampleC sinon vous avez que le départ du customUI.xml

Pour le coup, ça je le fait toujours, ça fait partie des réflexes.....
Quant au n° de version de mon CustomUI editor, je ne la connais pas. Et pas de 'A propos' ni propriété de ce type. Sa date de création : 28/03/2016.

Dans mon précédent post que j'ai ré-édité, je vous suggérais d'autoriser la modification des ids des objets.

Cordialement
 

patricktoulon

XLDnaute Barbatruc
d'accord tu utilise l'adobstream et instruit le bom ok
pour les ids
j'ai décidé qu'il soient automatiques pour éviter les doublons justement qui te foutent en l air un customUI.xml

nom du tag plus le length des tag identiques
et pour le label qui est modifiable aussi avec un X

sachant que pour reconnaître le callback j'utilise soit l'id si il n'y a pas de label soit le label +"_onAction" ou "_click" ou "_onChange" etc..... selon le tagelement
comme ça même si j'ai prévu un commentaire avant chaque callback on reconnait aisément a qui est le callback
j'implante l'adobstream ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 469
Messages
2 088 697
Membres
103 924
dernier inscrit
Patrick c