Indenter

VIARD

XLDnaute Impliqué
Bonjour à toutes et tous

C'est une manip que je fais pour le plaisir.
Je mets un listing de programme sur un formulaire puis je l'indente.
j'arrive à indenter correctement sur les mots clés mais pas entre-eux.
j'ai tenté plusieurs solution sans succès.
Tout est clair dans le fichier avec ce que je voudrais obtenir en rouge colonne "D".
fichier joint.

amicalement

Jean-Paul
 

Pièces jointes

  • Indenter(1).xlsm
    34.3 KB · Affichages: 135

VIARD

XLDnaute Impliqué
Re : Indenter

Bonjour Dranreb et à tous

Merci de t'intéresser du sujet.
j'ai testé la solution, il y a bien une tabulation mais le résultat est bâtard.
Comme toutes celles que j'ai testé.
Je continue de chercher.
merci encore

A+ Jean-Paul
 

MJ13

XLDnaute Barbatruc
Re : Indenter

Bonjour Jean-Paul, Bernard

Merci pour le code :).

J'ai toujours rêver de le faire pour mettre à jour les procédure VBA sans passer par un logiciel tiers. Mais jamais eu le temps de m'y mettre :(.
 

MJ13

XLDnaute Barbatruc
Re : Indenter

Re

Bon, j'ai fait un code pour indenté des procédures VBA copiées sur une feuille. Pour l'instant j'ai fait juste sur le for next :eek:.

J'ai pas encore fait sur les boucles imbriquées, mais cela doit être faisable avec un compteur, quoique cela doit être un poil plus complexe :confused:.

Code VBA:
Sub Indente()
boucle = 0
For Each cell In Selection
cell.Select
cell.Value = LTrim(cell.Text)
If cell.Text Like "*For*" Then cell.Value = " " & LTrim(cell.Text): boucle = 1: GoTo suite
If boucle = 1 Then cell.Value = " " & cell.Text
If cell.Text Like "*Next*" Then cell.Value = " " & LTrim(cell.Text): boucle = 0: GoTo suite
suite:
Next
End Sub
 

VIARD

XLDnaute Impliqué
Re : Indenter

Bonjour MJ13 à toutes et tous

Je te remercie de jeter un œil.
Je n’ai pas encore testé ta procédure. Pour l’instant je m’absente.
Tout comme toi il y a longtemps que je voulais le faire, mais trop occupé.
Toutefois j’ai fait évoluer le programme, voici un petit bout.
Il donne la tabulation juste pour les mots clés.
'------------------------
For i = 2 To 23
Texte = Cells(i, 1).Value
For J = K To Y
Don = Globale(J)
P = InStr(Texte & " ", Don)
If P = 1 Then
'------- Indentation montante -------
If Don = "For" Or Don = "If" Or Don = "With" Or Don = "Select Cse" Then
Z = Z + 1: Cells(i, 3).Value = Z: W = 1
'----- Indentation descendante -------
ElseIf Don = "Next" Or Don = "End If" Or Don = "End With" Or Don = "End Select" Then
Cells(i, 3).Value = Z: Z = Z - 1: W = 2
End If
End If
Next J
Next i
'------------------------
Donc je tente de traiter le résultat de la tabulation.
ligne attendu

9
10 1 1
11 2
12 2 2
13 3
14 3
15 3 3
16 4
17 4
18 3 3
19 3
20 2 2
21 1 1
22
23

Avec plusieurs conditions, 1 – 2 – 3 montant.
Entre 1 et 2 ce sera (1+1), entre 2 et 3 ce sera ( 2+1), et entre 3 et 3 ce sera (3+1)
Et descendant, entre 3 et 2 ce sera (3-1), etc.
Voilà ce qu’il me reste à faire. Ce n’est pas évident.

A+ Jean-Paul
 

MJ13

XLDnaute Barbatruc
Re : Indenter

Bonjour Jean-Paul, à tous

J'ai pas eu trop le temps de voir ton code non plus et j'aime bien partir d'une feuille vierge :eek:.

Voici le code qui me va pour l'instant.

Code:
Sub Indente_Code_MJ_2016()
'Remarque
Application.ScreenUpdating = False
For Each cell In Selection
'cell.Select
If cell.Text Like "*If *" Then cell.Value = "    " & LTrim(cell.Text): GoTo suite
If cell.Text Like "*Private*" Then cell.Value = LTrim(cell.Text): GoTo suite
If cell.Text Like "*Sub*" Then cell.Value = LTrim(cell.Text): GoTo suite
If cell.Text Like "*End If*" Then cell.Value = "    " & LTrim(cell.Text): GoTo suite
If cell.Text Like "*End*" Then cell.Value = LTrim(cell.Text): GoTo suite
If cell.Text Like "*Dim*" Then cell.Value = "   " & LTrim(cell.Text): GoTo suite
If cell.Text Like "*Public*" Then cell.Value = "   " & LTrim(cell.Text): GoTo suite
If cell.Text Like "*" & Chr$(39) & "*" Then cell.Value = Chr(39) & LTrim(cell.Text): GoTo suite
cell.Value = LTrim(cell.Text)
If cell.Text Like "*For *" Then cell.Value = "        " & LTrim(cell.Text): boucle = 1:: GoTo suite
If boucle = 1 Then cell.Value = "          " & cell.Text
If boucle = 0 Then cell.Value = " " & cell.Text
If cell.Text Like "*MsgBox*" Then cell.Value = "                                              " & LTrim(cell.Text)
If cell.Text Like "*GoTo *" Then cell.Value = "      " & LTrim(cell.Text)
If cell.Text Like "*With *" Then cell.Value = "        " & LTrim(cell.Text): boucle = 1: GoTo suite 'With
If cell.Text Like "*Next*" Then cell.Value = "        " & LTrim(cell.Text): boucle = 0: GoTo suite
If cell.Text Like "*End With*" Then cell.Value = "        " & LTrim(cell.Text): boucle = 0: GoTo suite
suite:
Next
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Indente_Code_MJ.xlsm
    26.9 KB · Affichages: 116

MJ13

XLDnaute Barbatruc
Re : Indenter

Bonjour Gosselien,

Oui je connais Smart Indenter, d'ailleurs souvent, les gens n'arrivent pas à l'installer :eek:.

Mais ce qui m'intéresse ici, comme Jean Paul :), c'est de faire un code que je pourrais intégrer dans un de mes nombreux utilitaires :D.
 

VIARD

XLDnaute Impliqué
Re : Indenter

Bonjour Michel, Gosselien et à tous

Je rejoins "Michel" dans son opinion et puis ou serait le plaisir.
c'est vrai le truc n'est pas facile, mais bon.
"Michel" j'ai testé c'est très différent, mais j'ai capté de petites choses qui me seront utiles.
Je continue sur la tabulation, mais à part des mots clés.

Cordialement

Jean-Paul
 

VIARD

XLDnaute Impliqué
Bonjour à toutes et tous

J'ai terminé l'indentation, tout fonctionne.
Je livre à l'état brute, il y a encore des mots clés à ajouter, je ferais cela plus tard.
En gros les mots clés sont le point de départ, ensuite un traitement ce résultat suffit

cijoint le fichier.

Cordialement
Jean-Paul
 

Pièces jointes

  • Indenter(2).xlsm
    38.4 KB · Affichages: 8

VIARD

XLDnaute Impliqué
Bonjour à toutes et tous

J'ai refais quelques manips, dans le précédent il s'est glissé une petite coquille.
il a fallu revoir le mot clé "If" cas particulier si la fonction est sur une ligne (il n'y a pas de "End If")
sinon il se produit un défaut dans les tabulations suivantes.
Il subsiste un problème quand les fonctions se succèdent, là je ne vois pas, c'est le brouillard.

nouveau fichier.

A+ Jean-Paul
 

Pièces jointes

  • Indenter(3).xlsm
    39.5 KB · Affichages: 91

VIARD

XLDnaute Impliqué
Bonjour MJ13 , à toutes et tous

Voici mon dernier jet d'indentation, j'ai corrigé les petits défauts restant ...
j'explique sur le formulaire le fonctionnement, maintenant il y a d'autres solutions possible
par contre j'ai appliqué une tabulation de 6 espaces au lieu de 4 pour un meilleur rendu.
J'ai mis quelque programme en exemple pour le test.
fichier joint

A+ Jean-Paul
 

Pièces jointes

  • Indenter(4).xlsm
    41.8 KB · Affichages: 96

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 190
Messages
2 107 001
Membres
109 735
dernier inscrit
Mounskad