Complément (Vba Indenter Interface)

Complément (Vba Indenter Interface) V3.1.C Fx4

patricktoulon

XLDnaute Barbatruc
c'est normal tu l'a pas encore le dégradé ;)

pour tes checkbox là c'est une énigme

pour le choix du module peut être le textcolumn est obligatoire sur vos versions
chez moi il est automatiquement à 0
je regarde ce textcolumn
 

fanch55

XLDnaute Barbatruc
Bonjour, Patrick
Le checkboxes sont décochables maintenant, le dégradé est bien présent .
A première vue, les paramètres ne sont pas tous conservés ?
1716886578893.png

1716886760005.png


Les modules avec juste des déclarations ne veulent pas être indentés ???
Je te joins un exemple source :
VB:
'----- Pour récupérer la position du pointeur de la souris ----------------------------------------------
Public Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
        X As Long
        Y As Long
End Type
Public Souris  As POINTAPI
Public Const Pro = 0.78
'--- Pour la partie Son ---------------------------------------------------------------------------------
Public Declare PtrSafe Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _
        ByVal lpszName As String, _
        ByVal hModule As Long, _
        ByVal dwFlags As Long) As Long
       
Public Const SND_SYNC = &H0
Public Const SND_ASYNC = &H1         'audition asynchrone (rend la main pendant la lecture)
Public Const SND_FILENAME = &H20000

'----- Couleurs utilisées --------------------------------------------------------------------------------
Public Enum Couleur
        Bleuciel = 15986394
            rose = 16751103
          Orange = 49407
   Orange_Sombre = 26367
            Gris = 12566463
     Gris_Sombre = 8421504
      Gris_Clair = 14610923
     Gris_Clair2 = 14277081
            Vert = 5287936
           rouge = 255
      Vert_Clair = 65280
            Vide = 16777215
End Enum

'----- Pour récupérer des information sur une cellule précise ------------------------------------------------
Type Infocell
     Address     As String
     Col         As Long
     Row         As Long
     text        As String
End Type

Public Old_Inscrip      As New Dictionary ' Pour déterminer l'appairage existant dans les inscriptions
Public Reponse          As String
Public Match_Type       As String
Public Match_Num        As Integer
Public Bande            As IRibbonUI
Public Couleur          As Couleur
Public Match            As Worksheet
Public TMatch           As ListObject
Public Lignes()         As Integer

Pour la recherche dans le code, je vais chipoter ; c'est quoi cette icône ? ;)
Y'a des réactions bizarres dans la recherche :
pat.gif
 

fanch55

XLDnaute Barbatruc
Dis-moi Patrick,
Dans la partie Export Html Couleur,
Pourquoi définis-tu des Class="..." dans le Body alors qu'il n'y a pas de déclaration de <style type="text/css"> ? 🤔 , du coup le html n'honore que ta spécification de color ....
 

patricktoulon

XLDnaute Barbatruc
Bonjour @fanch55
l'icone
1716889508103.png


pour l’indentation qui n'est pas faite je sais pourquoi c'est parce que elle ne trouve pas au minimum le mot"Sub" c'est pour éviter d'indenter n'importe quoi et de planter si on essaie avec n'importe quel texte

pour le recherche j'ai vu ça tout a l'heure
il semblerait qu'après le dernier trouvé il continue a descendre ou remonter alors que normalement ça s'arrête
 

patricktoulon

XLDnaute Barbatruc
Dis-moi Patrick,
Dans la partie Export Html Couleur,
Pourquoi définis-tu des Class="..." dans le Body alors qu'il n'y a pas de déclaration de <style type="text/css"> ? 🤔 , du coup le html n'honore que ta spécification de color ....
tu dois parler de la class "comm"

quand je met le bleue dans ma boucle sur tblexpr ça le fait même dans les commentaires

donc après je boucle sur les class "comm" et innerhtml=innertext
et voilà terminé les commentaires sont tout verts ;)

je cherche une technique plus précis
mais manipuler le html en vba c'est compliqué tout n'est pas possible comme en JS
 

fanch55

XLDnaute Barbatruc
tu dois parler de la class "comm"
De toutes les classes( Bleu , noir et Comm ), elles ont toutes la couleur précisée en <Font>
VB:
                ps(i).innerhtml = "<font class=""noir"">" & Replace(ps(i).innerhtml, comm, "</font><Font  class=""comm"" color=""green"">&nbsp;" & comm & "</font>")
les spécifs class ne servent pas dans l'html sans la définition de celles ci en début de fichier.
 

patricktoulon

XLDnaute Barbatruc
l'attribut"Class est un attribut comme les autres
on vous a trop habitué a attribuer cette expression au CSS
mais ce n'est ABSOLUMENT pas le cas
cette attribut existait déjà bien avant le CSS(1)et le query
et le pire c'est qu'aux jeunes on leur apprend ça ,par ce que c'est plus simple
par ce que c'est devenu une pratique d'utiliser cette attribut pour styler x element (même de tag différents) dans le CSS

mais ne te casse pas la tête j'ai revue la copie j'ai trouver un moyen de faire beaucoup plus vite
car sur des grands module fiuuuu.... c'est long
là maintenant c'est instantané et en plus avant on avait le code sans les indnetation des ligne(Underscore) maintenant on les a
laisse moi un peu de temps je peaufine
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour Patrick,
Merci pour ta nouvelle version
L'erreur que je t'ai cité il y a quelques jour, apparait toujours sur la ligne:
"Set vbComp = Workbooks(wbnam.Caption).vbProject.vbcomponents(modunam.Caption)"
Suite à ce petit problème, je travail directement depuis le module, indenter le module, mais quand tu as un code assez long, est ce que il serait possible que que quand tu fait indenter le module, l'étage du module reste au même niveau ou tu était , parce que que ça retourne systématiquement au début du module, pour ci retrouver tu mouline avec la souris
 

patricktoulon

XLDnaute Barbatruc
re
bonjour nicolas
non ça c'est pas possible ce sont des commandes internes non pilotables par vba
pour le reste je ne sais il n'y a aucune raison si tu y arrive directe et que ca indente alors tu dois pouvoir le faire dans l'interface
est ce que tu a bien les nom de classeur et module dans les deux input en haut ? et est ce que ça correspond ?
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
re
bonjour nicolas
non ça c'est pas possible ce sont des commandes internes non pilotables par vba
pour le reste je ne sais il n'y a aucune raison si tu y arrive directe et que ca indente alors tu dois pouvoir le faire dans l'interface
est ce que tu a bien les nom de classeur et module dans les deux input en haut ? et est ce que ça correspond ?
Un seul fichier, un seul module, d'ailleurs n'importe quel module de n'importe quel fichier pareil. bizarre, dès que je passe par l'interface
 

patricktoulon

XLDnaute Barbatruc
ben tu es le seul chez qui ça fait ça pour le moment
j'ai eu 63 retours aujourd'hui

@fanch55 il y a quand même quelques pechtouilles encore , avec les lignes undescore
c'est pas rédhibitoire mais bon
je travaille dessus
perso je me suis ajouté une option
1716920959486.png
 

patricktoulon

XLDnaute Barbatruc
@fanch55
voici la nouvelle fonction d'export en htmlcolor
plus rapide
les balise class blue n'iront plus dans les commentaire

en fait il faut faire les replace dans un ordre précis
exemple end with avant with sinon les espaces ne sont plus dispo pour l’analyse
et je fait un replace global code et plus ligne par ligne
au debut tu peux choisir la couleur si tu veux changer
VB:
Private Sub BtRegHtmlFile_Click()
    Dim Fichier$, X&
    If Trim(TextBox2.Value) = "" Then MsgBox "Aucun code à enregistrer , veuillez d'abords indenter dans l'interface": Exit Sub
    'Debug.Print Cod
    Fichier = Application.GetSaveAsFilename("code vba _" & modunam.Caption & "Color.html", filefilter:="image Files (*.html), *.html", Title:="Enregistrement du fichier au format html")
    If Fichier = "Faux" Then Exit Sub
    X = FreeFile
    Open Fichier For Output As #X: Print #X, codvbToHtml: Close #X
    Frame1.Left = Me.InsideWidth + 10
    MsgBox "Un fichier html a été créé Dans" & vbCrLf & Fichier
End Sub

Function codvbToHtml()
 Dim cod, expr, tblexp, i&, Fichier$, X&, elem, ps, comm, Color1$, Color2
    Color1 = "#2980b9"    'couleur des expressions
    Color2 = "green"    'couleurs des commentaires
    cod = TextBox2.Value
    'les insertion des balise  class blue doivent se faire dans un ordre precis
    ' en effet certaines composées peuvent contenir une une autre non composée
    'expression composées
    expr = "Private Sub,Public Sub,Private Function,Public Function,End Sub,End If,End With,End Type,End Enum,End property,Select Case,End Select" & _
           ",Exit Sub,Do While,Do Until,For Each,Exit For,#If,#Else,#End If,Debug.Print, TypeOf " & _
           ",Private ,Sub ,,Function , Function, Sub,End Exit ,On Error " & _
           ",Option Compare text,Option Explicit"
    'expression simples
    expr = expr & "Do ,Until ,While ,With,For ,If , If ,Else, Next, Next,Case ,.Select ,Not , And , Or , Xor ,Const ,Constante ,Const " & _
           ",Loop ,Wend, As ,Set ,Call , To ,Resume,Err.Clear,then,Exit , Object, Long, Double, Integer, Boolean,Goto 0,Goto,GoSub" & _
           ",ElseIf,Dim , Is ,False,True, Me ,Me., Each ,Optional ,ByRef ,ByVal ,Nothing,CDbl,Clng,Cdec, In ,ReDim, Preserve," & _
           ",Cdate,Print ,Open ,.Close,Output,Property,Declare ,PtrSafe,Type,Ubound,Lbound,Resume," & _
           vbCrLf & "Next"

    tblexp = Split(expr, ",")
    cod = Split(cod, vbCrLf)
    'on met les commentaires et les lignes commentaire
    For i = 0 To UBound(cod)
        If InStr(1, cod(i), " '") > 0 Then
            cod(i) = Replace(cod(i) & " ", " '", "<font class=""comm"" color=""" & Color2 & """>" & " '") & "</font>"
        End If
        If Left(Trim(cod(i)), 1) = "'" Then cod(i) = "<font class=""comm"" color=""" & Color2 & """>" & cod(i) & "</font>"

    Next
    cod = Join(cod, vbCrLf)

    'on fait un replace global des expressions et plus ligne par ligne
    For i = 0 To UBound(tblexp)
        cod = Replace(cod, tblexp(i), "<font class=""blue"" color=""" & Color1 & """><B>" & tblexp(i) & "</B></font>")
    Next

    cod = Replace(cod, " ", "&nbsp; ")
    cod = Replace(cod, "<font&nbsp;", "<font ")
    cod = Split(cod, vbCrLf)
    'on met un espace dans les lignes vides sinon elle n'aparaissent pas (margin 0 des p)
    For i = 1 To UBound(cod)
        If cod(i) = "" Then cod(i) = "&nbsp;"
    Next
    'on pet les lignes dans des balises "P" in one shot
    cod = "<p style='margin:0;color:black;'>" & Join(cod, "</p>" & vbCrLf & "<p style=""margin:0;color:black;"">") & "</p>"

    With CreateObject("htmlfile")
        .body.innerhtml = cod
        Dim par
        'maintenant comme on a replacé les expression il se peut que certaines soit dans des commentaires
        'alors on nettoie les commentaires
        For Each elem In .body.all
            On Error Resume Next
            If elem.classname = "blue" Then If elem.parentelement.classname = "comm" Then elem.outerhtml = elem.innertext
            Err.Clear
        Next
        codvbToHtml = .body.innerhtml
    End With
 
End Function
 

patricktoulon

XLDnaute Barbatruc
Bonjour @fanch55
à ce jour 79 retours
4 erreurs relevées dont une grave les autres bénignes corrigées par les utilisateur eux mêmes avec mes recommandations
pour l'erreur grave je suis dessus j'ai quasiment solutionné le problème
à suivre ;)
 

patricktoulon

XLDnaute Barbatruc
84 retours
pas d'autres erreurs trouvées
les 4 précédentes sont corrigées y compris la plus grave
fonction htmlcolor complétement repensée 1000 fois plus rapide (plus de méprise avec mot et partie de mot)
plus de coloration d'expression dans les commentaires (couleur variabilisée)
retour de de l'accès à l'interface par le menu contextuel
le classeur parent bien identifié
Ajout de l'option de recompilation des ligne coupées par underscore pilotée par son checkbox

mise à jour dans la ressource programmée pour dimanche 2 juin
 

Statistiques des forums

Discussions
314 705
Messages
2 112 083
Membres
111 411
dernier inscrit
NIMY