IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Modifier fichier silkyroad [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 438
    Par défaut Modifier fichier silkyroad
    Bonjour,
    Je me sers du fichier de silkyroad https://silkyroad.developpez.com/VBA...cEditor/#LII-D.
    Celui-ci fonctionne bien, mais je souhaite que pour chaque nouvelle macro, on reparte de 10, comme numéro de ligne.
    Dans la macro "NumerotationLignesProcedure'" actuellement il n'y a pas de remise à zéro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Option Explicit
    Option Compare Text
     
    Sub testAjout()
    '"laProcedure" est la macro dont vous souhaitez numéroter les lignes
    NumerotationLignesProcedure "Module1", "laProcedure"
    NumerotationLignesProcedure "Module1", "laProcedure_1"
    NumerotationLignesProcedure "Module1", "laProcedure_2"
    End Sub
     
     
    Sub NumerotationLignesProcedure(nomModule As String, nomMacro As String)
    '
    'Cet exemple ne gère pas les erreurs s'il existe déja une numérotation
    '
    Dim Debut As Integer, Lignes As Integer, x As Integer
    Dim Texte As String, strVar As String
     
    With ThisWorkbook.VBProject.VBComponents(nomModule).CodeModule
        Debut = .ProcStartLine(nomMacro, 0)
        Lignes = .ProcCountLines(nomMacro, 0)
    End With
     
    For x = Debut + 2 To Debut + Lignes - 1
        With ThisWorkbook.VBProject.VBComponents(nomModule).CodeModule
            Texte = .Lines(x, 1)
            strVar = Application.WorksheetFunction.Substitute(Texte, " ", "")
            strVar = Application.WorksheetFunction.Substitute(strVar, vbCrLf, "")
            strVar = Application.WorksheetFunction.Substitute(strVar, vbTab, "")
     
            'Adaptez les filtres en fonction de vos projets.
            'Remarque: les arguments PrivateFunction et PublicFunction sont volontairement accolés.
            '
            If strVar <> "" And _
            Left(strVar, 3) <> "Sub" And _
            Left(strVar, 10) <> "PrivateSub" And _
            Left(strVar, 9) <> "PublicSub" And _
            Left(strVar, 8) <> "Function" And _
            Left(strVar, 15) <> "PrivateFunction" And _
            Left(strVar, 14) <> "PublicFunction" And _
            Right(ThisWorkbook.VBProject.VBComponents(nomModule). _
                    CodeModule.Lines(x - 1, 1), 1) <> "_" _
            Then .ReplaceLine x, x & " " & Texte
        End With
    Next
    End Sub

    Merci de votre aide

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Par simple curiosité, une petite question : quel est l'intérêt de numéroter de lignes de VBA ?

    J'ai commencé le Basic avec des éditeurs "à la ligne" qui obligeaient une numérotation de ligne.
    On est parvenu à s'en libérer (et ce fut un grand soulagement) à la fin des années 80 avec Turbo Basic (bénit soit saint Bob).
    Je ne comprends pas quel intérêt il pourrait y avoir à revenir en arrière, si ce n'est pour des besoins d'enseignement.


    Pour ce qui est de ta question, ceci devrait faire l'affaire (même si ce n'est pas très propre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub NumerotationLignesProcedure(nomModule As String, nomMacro As String)
    '
    'Cet exemple ne gère pas les erreurs s'il existe déja une numérotation
    '
    Dim Debut As Integer, Lignes As Integer, x As Integer
    Dim Texte As String, strVar As String
    Dim CC As Long
     
    CC = 0
     
    With ThisWorkbook.VBProject.VBComponents(nomModule).CodeModule
        Debut = .ProcStartLine(nomMacro, 0)
        Lignes = .ProcCountLines(nomMacro, 0)
    End With
     
    For x = Debut + 2 To Debut + Lignes - 1
        With ThisWorkbook.VBProject.VBComponents(nomModule).CodeModule
            Texte = .Lines(x, 1)
            strVar = Application.WorksheetFunction.Substitute(Texte, " ", "")
            strVar = Application.WorksheetFunction.Substitute(strVar, vbCrLf, "")
            strVar = Application.WorksheetFunction.Substitute(strVar, vbTab, "")
     
            'Adaptez les filtres en fonction de vos projets.
            'Remarque: les arguments PrivateFunction et PublicFunction sont volontairement accolés.
            '
            If strVar <> "" And _
            Left(strVar, 3) <> "Sub" And _
            Left(strVar, 10) <> "PrivateSub" And _
            Left(strVar, 9) <> "PublicSub" And _
            Left(strVar, 8) <> "Function" And _
            Left(strVar, 15) <> "PrivateFunction" And _
            Left(strVar, 14) <> "PublicFunction" And _
            Right(ThisWorkbook.VBProject.VBComponents(nomModule). _
                    CodeModule.Lines(x - 1, 1), 1) <> "_" _
            Then .ReplaceLine x, (x + 9 - CC) & " " & Texte Else CC = x
        End With
    Next
    End Sub
    C'est du code tapé directement sur le forum et non testé, tu auras donc peut-être du débugage à faire.

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    bonjour,
    quand un code est bien ficelé, il n'y a aucun intérêt, dans le cas contraire il est possible de loguer les messages d'erreur en précisant le N° de ligne!


  4. #4
    Membre éclairé Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 438
    Par défaut
    Merci Menhir pour ta réponse.
    Effectivement il y a remise à 10, mais c'est la pagaille.
    Après une ligne blanche qui n'est pas numérotée, on repart à 10.
    Après un Sub on ne repart pas forcément à 10 (on peut repartir à la ligne numérotée 249...

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    au vu du sujet j'ai peur que l'on veuille faire des Goto N° ligne ...

    chose que j'exècre au plus haut point

    j'espère me tromper mais j'avoue que c'est louche

  6. #6
    Membre éclairé Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 438
    Par défaut
    Je crois que j'ai trouvé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub Test()
    'Nécessite d'activer la référence
    '"Visual basic For Application Extensibility 5.3"
    '
    Debug.Print recupereContenuMacro(Workbooks("Money.xlam"), "Module1", "Test")
    Debug.Print recupereContenuMacro(Workbooks("Money.xlam"), "Module1", "uneProcedure")
     
    Function recupereContenuMacro(Wb As Workbook, Mdl As String, NomMacro As String)
        Dim Debut As Integer, Fin As Integer, i As Integer
        Dim Ligne As Integer, x As Integer
        Dim strVar As String, strVar2 As String
        Dim Espace As String
        Ligne = 10
        Espace = "    "
        With Wb.VBProject.VBComponents(Mdl).CodeModule
            Debut = .ProcStartLine(NomMacro, vbext_pk_Proc)
            Fin = .ProcCountLines(NomMacro, vbext_pk_Proc) + Debut
                For i = Debut To Fin
                    'Resultat = Resultat & .Lines(i, 1) & vbCr
                    strVar = .Lines(i, 1)
                    strVar2 = Replace(Trim(.Lines(i, 1)), " ", "")
     
                    If Left(strVar2, 3) = "Sub" Or _
                        Left(strVar2, 6) = "EndSub" Or _
                        Left(strVar2, 7) = "ExitSub" Or _
                        Left(strVar2, 10) = "PrivateSub" Or _
                        Left(strVar2, 9) = "PublicSub" Or _
                        Left(strVar2, 8) = "Function" Or _
                        Left(strVar2, 11) = "EndFunction" Or _
                        Left(strVar2, 15) = "PrivateFunction" Or _
                        Left(strVar2, 14) = "PublicFunction" Or _
                        Left(strVar2, 3) = "Rem" Or _
                        Left(strVar2, 1) = "'" Or _
                        Len(Left(strVar2, 1)) = 0 Or _
                        Left(strVar2, 3) = "Dim" Or _
                        Left(strVar2, 10) = "ErrHandle:" Or _
                        Left(strVar2, 8) = "Handler:" Then
                        strVar = Espace & strVar
                     Else
                        'Debug.Print Left(strVar2, 1)
                        strVar = Ligne & Espace & strVar
                        Ligne = Ligne + 1
                    End If
                      Debug.Print strVar
                Next
        End With
     
    End Function
    C'est ma proposition, ne demande qu'à s'améliorer.

  7. #7
    Membre éclairé Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 438
    Par défaut
    Bonsoir,
    Je joins un fichier pour numéroter et dénuméroter avec contrôle si la numérotation est existante ou non.
    Je l'ai composé mais je ne suis pas responsable des erreurs qu'il pourrait impliquer. Chez moi tout fonctionne correctement et bien sûr, il ne demande qu'à être amélioré (je ne suis pas développeur professionnel). .
    Bonne soirée à tous.

    Numerotation_Lignes.txt

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    au vu du sujet j'ai peur que l'on veuille faire des Goto N° ligne ...
    J'espère que ce n'est pas le cas.
    Parce que le code modifie les numéros de lignes sans modifier les références des éventuels Goto.
    Donc, s'il existe déjà dans le code des "Goto n°ligne", ça va mettre une pagaille monstrueuse.

  9. #9
    Membre éclairé Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 438
    Par défaut
    Je n'ai pas de goto dans mes codes, donc je n'ai pas traité ce cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modifier fichier .txt avec Visual Basic
    Par marco1980 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/09/2006, 21h19
  2. Modifier fichier table liée
    Par jbbabb dans le forum Access
    Réponses: 9
    Dernier message: 26/07/2006, 21h33
  3. Modifier fichier dans .jar ?
    Par g0ldenrno dans le forum Langage
    Réponses: 6
    Dernier message: 20/06/2006, 17h48
  4. modifier fichier permission denied
    Par fara morgana dans le forum Langage
    Réponses: 12
    Dernier message: 14/06/2006, 15h32
  5. modifier fichier desklink
    Par alexp dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 01/03/2006, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo