XL 2013 Vba Indenter Interface v4.0a

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Statut
La discussion n'est pas ouverte à d'autres réponses

Jean BUSSER

XLDnaute Nouveau
Supporter XLD
Bonjour.
La démo étant séduisante, j'ai installé cette ressource. Mais dès le lancement d'Excel, le code VBA s'ffiche avec une erreur 1004 :
"Set bar = Application.VBE.CommandBars("Code Window")" "L'accès par programme au projet Visual Basic n'est pas fiable"
Je suis sous Windows 10, Excel 2013.
Que faire ?
Merci.
Jean
 
re
@Dudu2
Est-ce que ça veut dire que tu as une option pour détricoter les lignes multi-instructions en lignes mono-intruction ?
oui c'est exactement ça si tu prefère apeler ça "détricoter"
en mode normal il semi détricote uniquement si le one line n'est pas complétement fermé
et le mode hard qui restructure scolairement les blocs

demonstration
regarde bien
voici tout une serie de if imbriqués de différentes manieres
VB:
Sub test()
Dim a As Long, X As Integer, Y As Double

If jour = 1 Then
MsgBox "Hello, world!"
End If

If truc = machin Then chose = bidule 'un simple if in line

If zozo = 10 Then 'commentaire
zozo = 11
End If

If a = 1 Then X = 2: Y = 3: z = 4 'un if avec 3 recharge variable inline

If b > 10 Then truc = 99 ' simple in line

If zzz Then a = 1: b = 2 Else b = 3: C = 4 'un if avec 4 recharges variable avec un Else (inline

If a = 2 And u = 3 Then If R = 4 Then truc = "gogo" '2 if le 2d dependant du premier(then) inline

If X = 5 Then If Y = 6 Then z = 7: t = 8 '2 if le 2d dependant du premier(then) inline 2 recharges variable inline

If erreur Then GoTo Fin: logErreur = True 'if + goto +variable inline

If Not IsNumeric(Valz) Then MsgBox "Erreur": Exit Sub 'if+msgbox+sortie inline

If k = 1 Then X = 3: Y = 4 'if 2recharge variable inline

If ok Then Call go: Call Done 'if 2 call inline

If flag Then DoIt: UndoIt

'if le 2d dependant du premier(then) inline 2 recharges variable inline
If Left(Trim(TbL(I)), 3) = "If " Then If TbL(I) Like "* '*" Then comm = "'" & Split(TbL(I), " '")(1): TbL(I) = Split(TbL(I), " '")(0)

'if le 2d dependant du premier(then) inline 2 recharges variable dans le 2d If avec un Else ( inline)
If TypeOf t Is Range Then If t.Areas.Count = 1 Then t = t.Value Else TransposeXV3 = t: Exit Sub

'3 if consécutifs
If truc = 1 Then If chose = 2 Then If machin = 3 Then chose = 1

'3 if consécutifs avec un else
If truc = 1 Then If chose = 2 Then If machin = 3 Then chose = 1 Else chose = 0


If truc = 6 Then
chose = 10
ElseIf truc = 8 Then 'commentaire
chose = 11
ElseIf truc = 9 Then
chose = 12
End If

'encore plus hard
'un if avec 4 recharges variable avec un Else (inline mais coupé par underscore
If zzz Then a = 1: b = 2 Else _
b = 3: _
C = 4


' un If 2 recharges variables  coupé par underscore sans End IF
If truc = 8 Then _
machin = " _truc2": _
chose = bidule: _
www = aaa

If InStr(TbL(I), "'") And Left(Trim(TbL(I)), 1) <> "'" Then
comm = commentaire(TbL(I))
'If Len(comm) > 0 Then TbL(i) = Split(TbL(i), comm)(0)
End If

'prétraitrement des ligne If sous toutes sesformes
If Left(Trim(TbL(I)), 3) = "If " Then
If TbL(I) Like "* TOTOTITI *" Then
TbL(I) = Replace(TbL(I), " Then", " Then" & vbCrLf) & vbCrLf & "End If" & vbCrLf & "End If"
Else
If TbL(I) Like "*: *" And Not TbL(I) Like "* _*" Then TbL(I) = Replace(Replace(TbL(I), " Then", " Then" & vbCrLf), "Else", vbCrLf & "Else" & vbCrLf): F = 1
End If
End If

'remise en place du mommentaire
If coupe Then TbL(I) = comm & vbCrLf & TbL(I) Else TbL(I) = TbL(I) & comm
TbL(I) = Replace(TbL(I), Chr(34) & " " & Chr(182) & " " & Chr(34), Chr(34) & " : " & Chr(34))

If Right(Trim(TbL(I)), 2) = " _" Then coupe = False:
If Trim(TbL(I)) Like "*: "" *" Then coupe = False ' pour les cas ou cette condition serait entre guillemet donc a ne pas prendre en compte
If Trim(TbL(I)) Like "*"": *""" Then coupe = False ' pour les cas ou cette condition serait entre guillemet donc a ne pas prendre en compte

End Sub

et voila en mode hard
Attention ca va très vite
demo3.gif
 
Salut à tous,
@patricktoulon Je ne pense pas que les gens qui installent RubberDuck ne le fassent que pour indenter des lignes, (Cela serait très bête au vue des ressources qu'il demande.
Concernant le code sur une même ligne pour ma part je ne l'utilise pas, mais cela peut-être une bonne option.
Par contre concernant les autres options dans Refactorer par exemple, insérer ou supprimer un paramètre, renommer un contrôle, encapsuler un champ et bien d'autres se révèlent assez rapidement indispensable.
Je salut ton implication, pour ce code, ceux qui ont des machines anciennes pourront en profiter.
 
re
au même rang que tout les cracks vbe (et j'en ai une liste longue comme le bras )
l'utilisateur doit savoir ce qu'il fait
que tu lui ouvre la fenêtre par vba est acceptable à la limite
mais le faire a sa place et qui puis est par le registre là non
d'ailleurs chez moi tu ne peux pas le faire ça ,sauf si je débloque l’accès au registre
 
Dernière modification par un modérateur:
Je ne vois pas ça comme un crack si c'est pour la "bonne cause" d'autant qu'à la fin le setting est restoré.
Sans passer par le dialogue, un message peut aussi demander l'accord (Oui/Non) de l'utilisateur pour être parfaitement clair sur un sujet qui ne l'est pas forcément pour tout le monde.
C'est un crack si le code derrière en profite pour cracker de manière malveillante.
Perso ça ne me gênerait pas. Enfin, midi à sa porte chacun voit !
 
Bonjour @Valtraze
perso j'ai essayé le canard
comme tu le dit pour ce qu'il offre ça fait beaucoup de ressource surtout que c'est vrai c'est un gros lourdaud
perso je ne vois pas ce qu'il fait qu'avec vba et ou excel je ne puisse faire en tout cas de réellement utile
à la limite je préfère MZ tool

un outils d'indentation oui !!! ça vaut le coup car ça permet aux utilisateur comme @Dudu2 l'a dit de se reposer les neurones
et d'avoir une lisibilité correcte et intelligible du code vba

moi ce que je propose
aucune installation (c'est juste un complement xlam )et rien de plus
je n'utilise pas de librairie particulière qui ne soient pas connue de presque tous (la seule c'est un dom document)
il n'y a pas de mécanique qui tourne en arrière plan(ça c'est important)
je propose un interface (userform evolué)pour travailler le code en dehors du module (tranquillité d'esprit)
un accès a l'outils par le ruban ou par le click droite dans le vbe
il detecte les erreurs de bloc( ça toute vos app ne le font pas
ça n'a rien a voir avec une vielle ou récente machine (ça marche sur les deux)
c'est du pure vba et rien de plus
 
Je ne vois pas ça comme un crack si c'est pour la "bonne cause" d'autant qu'à la fin le setting est restoré.
Sans passer par le dialogue, un message peut aussi demander l'accord (Oui/Non) de l'utilisateur pour être parfaitement clair sur un sujet qui ne l'est pas forcément pour tout le monde.
C'est un crack si le code derrière en profite pour cracker de manière malveillante.
Perso ça ne me gênerait pas. Enfin, midi à sa porte chacun voit !
rend toi compte @Dudu2
que nous développons nos petite app avec tout les activx activer puis que userform et compagnie(sinon on pourrait pas faire grand chose )
le seul rempart et encore comme tu le démontre sur certaine machine c'est démontable par le registre
(d'ailleurs chez moi l'adresse de cle n'est pas bonne)

l'utilisateur doit voir et décider de le faire ou pas
il y a quelque année je développait aussi comme ça (je fait tout pour toi t'inquiet)
sauf que l'on ne peut pas tout gérer et qu'un non averti peut encore faire des sottises
et là il y a un proverbe bien connu de tous
à une personne ,mieux vaut lui apprendre à peché que lui donner du poisson
après vous faites comme vous voulez
et pour finir
depuis le 30 décembre 2024 la sortie de la version 3.1 Fx4.1 a totalisé 40 téléchargements au mois de juillet 2025(certaines version précédente un peu plus)
la version 4.0a a totalisé 45 téléchargement en 7 jours (18 téléchargement la première heure )
en 7 jour j'ai faire le score que la version précédente a fait en presque un an

la version 4.0b déposé hier avec le protocole de semie décompilation renforcé en est à 2 depuis hier soir (ca va un peu moins vite)

je peux donc en conclure que le besoin ou la demande est bien là
c'est donc un dev utile
c'est gratos , facile après intégration,utile
c'est pour moi aussi indispensable que les outils de typo dans word
pour tout vous dire j'ai toujours eu depuis que j'ai des poils un indenter dans mon vbe
avant j'utilisai smart indenter 3.5 facile a intégrer connu depuis la vie des rats
j'avais même développé un patch pour pouvoir l'installer et l'utiliser sur 2010 ,2013 et 2016 pour le vba7
et ben je peux te dire que mon complément n'a rien à lui envier je l’écrase a plate couture d'ailleurs le canard aussi c'est même pire

essayez le qu'est ce que ça vous coute?


et je fait ça avec du simple vba avec toute les contraintes des fenêtre MDi et du vbe
sans forcer tranquille leger
 
Re,
il y a quelque année je développait aussi comme ça (je fait tout pour toi t'inquiet)
Du coup je ne suis pas entièrement d'accord avec avec ta philosophie. Ce qui est sûr c'est que tu dois gérer les exceptions, une simple fonction permet de faire cela.
VB:
'@Description "Check that: "Approved access to the VBA project object model" is enabled."
Private Function HasTrustedAccess() As Boolean
    Dim objVBE As Object
    On Error Resume Next
    Set objVBE = Application.VBE
    Dim isChecked As Boolean
    isChecked = (Err.Number = 0)
    On Error GoTo 0
    HasTrustedAccess = isChecked
End Function
Si l'option n'est pas cochée, un message peut demander que cela soit fait.

Quelle version de Rubberduck as-tu installé ? Moi je n'ai pas du tout cette interface.
1756634146376.png

1756634207715.png

1756634232616.png

1756634253356.png
 
Alors, concernant ta fonction @Valtrase, j'avais la même approche en testant ThisWorkbook.VBProject.VBE.Version.
Ça fonctionne tant que la modif est faite manuellement via le dialogue Excel.

Par contre si on "Disable" l'accès en modifiant le registre, la fonction retourne toujours Vrai alors que la Checkbox est décochée.
L'inverse est également vrai, si on "Enable" l'accès en modifiant le registre, la fonction retourne toujours Faux alors que la Checkbox est cochée.

Est-ce que ça veut dire que la modif par le registre est opérante seulement sur la Checkbox ?
C'est assez étrange. Comment vérifier si on a vraiment accès aux modifs VBE ? Quelques instructions à essayer ?
 
voilà tu viens de soulever la couleurvre mon cher @Dudu2 je vien de faire le même constat
en fait dynamico la clé est bien enregistrée ok sauf que excel continue avec les paramètres avec les quels il a démarré
j'ai donc mis un redemarrage neccessaire
la clé est bien a 1 mais la case a cocher chez moi est toujours décoché quand je redémarre
par contre (et je n'ai pas encore essayé) je sais pas si ma méthode agissant sur la MDI de ce paramètre va fonctionner
en tout cas avec la clé c'est sur ca ne marche pas
voici ce que j'ai mis dans le open du xlam (vba indenter Interface)
VB:
Public WithEvents app As Application
'vba Indenter Interface
Private Sub Workbook_Open()
On Error Resume Next
Set vbcomps = ThisWorkbook.VBProject.VBComponents
    If Err Then
        Err.Clear
        If MsgBox("L'accès approuvé au modele d'object du projet vba" & vbCrLf & _
                                " n'a pas été activé" & vbCrLf & _
                                "Voulez vous l'activer?", vbYesNo + vbInformation) = vbYes Then

              With CreateObject("WScript.Shell")
                .RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM", 1, "REG_DWORD"
             End With
             DoEvents
             MsgBox "Vous devez redémarrer Excel", vbOK
            Application.DisplayAlerts = False
            Application.Quit
        Exit Sub
        Else
            MsgBox "D'accords Vba Indenter Iinterface  est deactivé": Exit Sub
        End If
    Else
        Set app = Application
     End If
End Sub
 
Le redémarrage c'est plus lourd que le prompt du dialog si l'utilisateur coche la bonne case.
VB:
'-------------------------------------------------------------------------------------
'Return True if the "Trust Access to the VBA Project Object Model" checkbox is checked
'-------------------------------------------------------------------------------------
Private Function VBATrusted(Optional PromptUser As Boolean = True) As Boolean
    Dim Version As String
    Dim ErrNumber As Long
    Dim BN As Integer
   
    'Check access to VBA Project
    GoSub CheckVBATrusted
   
    'Access denied
    If Not ErrNumber = 0 Then
        'Prompt the User to change the Macros Security
        If PromptUser Then
            BN = MsgBox("La sécurité actuelle des macros n'autorise pas l'accès au code VBA." & vbCrLf & _
                "Vous serez invité à modifier cette option si vous acceptez." & vbCrLf & vbCrLf & _
                "Pour autoriser l'accès au code VBA, cochez la case ""Autoriser l'accès au modèle objet du projet VBA""", _
                        vbOKCancel + vbInformation)
            If BN = vbCancel Then Exit Function
           
            Application.CommandBars.ExecuteMso "MacroSecurity"
           
            'Check access to VBA Project
            GoSub CheckVBATrusted
        End If
    End If
   
    'Return value
    VBATrusted = (ErrNumber = 0)
    Exit Function
   
    'Internal Sub to check access to VBA Project
CheckVBATrusted:
    On Error Resume Next
    Version = ThisWorkbook.VBProject.VBE.Version
    ErrNumber = Err.Number
    On Error GoTo 0
    Return
End Function
 
Y a sûrement un moyen d'éviter le redémarrage, non ? C'est lourd.
non c'est comme ca
je le redis excel continue avec les paramètres avec les quels il a démarré

PAR CONTRE!!!!!!!!
si tu le fait mano mano dans la fenêtre et donc en simulant le redemarrage n'est pas necessaire
et voila comment je fait pour que ca marche
en plus la fenêtre s'affiche donc l'utilisateur sait ce qu'il fait
j'ai supprimé les tape tape sur les touches pour que ca se fasse tout seul (je prefère que l'utilisateur clique la case avec sa souris )

VB:
Public WithEvents app As Application
'vba Indenter Interface
Private Sub Workbook_Open()
On Error Resume Next
'on teste si on peut collectionner les modules
Set vbcomps = ThisWorkbook.VBProject.VBComponents
    If Err Then
        Err.Clear
        If MsgBox("L'accès approuvé au modele d'object du projet vba" & vbCrLf & _
                                " n'a pas été activé" & vbCrLf & _
                                "Voulez vous l'activer?", vbYesNo + vbInformation) = vbYes Then

              
     'ici normalement je lance une sub en addressof AVEC UN PEU DE RETARD par un settimer qui me tape les touches qu'il faut car la fentre est modale
     Application.CommandBars.ExecuteMso "MacroSecurity" 'si c'est oui on ouvre la fenêtre  de la case a cocher
     'ELLE EST MODALE DONC TANT QU ELLE EST OUVERTE ON IRA PAS PLUS LOIN DANS LE CODE SUB POUR LA SUB EN SETTIMER
      'donc les wscript.shell.sendkeys et compagnie bye bye!!ON OUBLIE C EST PAS LA PEINE
     'MAIS comme JE NE VEUT PAS PAS D API DANS MON VBA INDENTER INTERFACE !!!!!!!! BEN ON S EN PASSE
     'je le coche donc à la main quand la fenêtre s'ouvre
      
      
      'LA FENTRE FERM2E LE CODE CONTINUE
      
      Set app = Application 'je créée un event application qui va gérer  tout les events possible
      
        Else
            'si je dis non bye bye vba indenter interface !!!!
            MsgBox "D'accords Vba Indenter Iinterface  est deactivé": Exit Sub
        End If
    Else
        'si c'est deja coché  ca fait le job
        Set app = Application 'je créée un event application qui va gérer  tout les events possible
        ' en dehors des events workbook actif
     ' ces events re enclenche les menu  dans vbe qui est géré par une classe
     ' car les ".onAction" des boutons de commandbars ne sont pas gérables dans  le VBE
     End If
End Sub
 
Je pense que la modif par le registre ne fonctionne pas et ne fonctionnera jamais même après ré-ouverture parce que Excel a introduit une sécurité qui n'est levée que si la modif est faite manuellement via le Dialog.

D'autre part, l'accès au Dialog via des Sendkeys de raccourcis, je n'y arrive pas non plus, et ça doit être voulu aussi par Excel.

Donc on oublie le "crack" registre ! 😭
 
Statut
La discussion n'est pas ouverte à d'autres réponses
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
914
Retour