Macro pour annulation ligne autre macro

Bonjour le forum

Je travail régulièrement sur un fichier excel contenant des macros qui est générer par notre client, tous les jours j'ai de nouveaux fichiers, contenant exactement les mêmes macros

Dans ce fichier, j'ai tout un code qui est arrété par un "End Sub" à son tout début, car un grand malin n'a pas su le décortiquer ou regarder à la fin et voir que c'était le contenu d'une cellule qui bloquait le lancement de ce code.

Le problème c'est que le chef ne veux pas que je modifie ce code.

Est ce que je peux créer une macro que je placerai dans le personal xlmb afin de placer simplement des " ' " et effacer le contenu d'une cellule dans une feuille du classeur afin d'annuler le blocage de la macro, lancer la macro normalement et remettre les " ' " à leurs place et enregistrer.

Comme les noms de fichiers changent à chaque fois, la macro créée ne fonctionnerait que lorsque le fichier serait ouvert

D'avance je vous remercie pour votre disponibilité et votre aide

Bonjour eole-33,

Si tu as possibilité d'ouvrir tous ces fichiers par macro, désactive temporairement les procédures évènementielles avant d'ouvrir les fichiers.

Voici le séquencement que je vois :

1 - désactive les évenements

2 - ouvre ton fichier

3 - efface le contenu de la cellule

4 - sauvegarde ton fichier

5 - réactive les évènements

Pour désactiver les évènements :

Application.EnableEvents = False

Tu remettras à True après ton traitement.

Bonjour vba-new

Si je comprend bien il faut que je crée une macro pour ouvrir le fichier?

Oui c'est comme ça que je vois les choses avec les indications apportées.

Donc pour moi

je créé une macro que je place dans personal xlmb.

Cette macro me demande d'ouvrir mon fichier (c'est jamais le même) se faisant,

la macro efface la donnée d'une cellule qui bloque le lancement de la macro,

puis et c'est là que je ne sais pas faire vas dans la macro que je dois lancer, pose aux endroits que j'ai besoin des " ' " et me redonne la main

pour cliquer sur la commande de la macro enfin ré activé

Une fois la commande terminée ma macro enlève les " ' " enregistre et c'est tout bon

je pense que l'on c'est pas bien compris

eole-33 a écrit :

je pense que l'on c'est pas bien compris

C'est possible

C'est un peu vague pour moi... Il faudrait que tu donnes au moins un vrai exemple et être plus précis !

Où est-ce que tu veux mettre exactement ton " ' " ?? Si j'ai bien compris c'est dans ton code VBA.

Si c'est le cas, c'est un peu compliqué... C'est pour ça que j'essaie de proposer une alternative.

La macro qui bug est-elle lancée à l'ouverture de tes fichiers ?

Bonsoir le fil

bonsoir vba-new

la macro fonctionne impec.

Le problème c'est qu'une fois qu'elle a terminé, elle rempli une cellule avec "ok" et ceci la verrouille et empêche de la relancer.

Donc un grand malin la carrément arrêtée à son départ avec un message box "macro momentanément indisponible"et juste à suivre un "End Sub"

moi ce qui m'intéresse, puisque je n'ai pas le droit de modifier même ça, c'est d'avoir une commande qui annule ces bêtises et me laisse lancer la macro. (C'est pas pour moi que je le fais mais pour les collègues, moi je sais où taper)

Ce n'est pas moi qui génère les fichiers, ils arrivent tel quel

Je prèffererai ne pas mettre le dossier sur le forum mais si tu veux une copie donne moi une adresse et je te l'envoi

Re eole-33,

Bien reçu ton fichier.

Voici une solution adaptée à ton cas pour commenter/décommenter les lignes concernées :

Sub test()

    Dim sRepertoire As String, sFichier As String
    Dim wbkToComment As Workbook

    sRepertoire = ThisWorkbook.Path & "\"    '-> A ADAPTER : pointer sur le répertoire du classeur contenant la macro à commenter/décommenter
    sFichier = "Ton_Classeur_A_Commenter.xls"    '-> A ADAPTER : pointer sur le classeur contenant la macro à commenter/décommenter
    'ouvre le classeur concerné
    Set wbkToComment = Workbooks.Open(sRepertoire & sFichier)

    'commente les lignes de code concernées
    CommenteCode "YES" 'mettre "NO" pour décommenter les lignes de code concernées

End Sub

Sub CommenteCode(wbk As Workbook, YesNo As String)

    Dim CodeLignCourante As String, CodeLignNew As String
    Dim oVBC As Object    'VBComponent
    Dim i As Long

    'on va modifier le module "L_Génération_présentation"
    Set oVBC = wbk.VBProject.VBComponents("L_Génération_présentation")

    With oVBC

        'boucle sur toutes les lignes de code du module concerné
        For i = 1 To .CodeModule.CountOfLines

            'code actuel de la ligne
            CodeLignCourante = .CodeModule.Lines(i, 1)

            If InStr(CodeLignCourante, "MsgBox ""Fonction momentanément désactivée.""") <> 0 Or _
               InStr(CodeLignCourante, "Exit Sub") <> 0 Or _
               InStr(CodeLignCourante, "Range(zCWpg_IndicGénéPrés).Value = zOK") <> 0 Then

                Select Case YesNo
                Case "YES"    'si YES on commente la ligne
                    'nouveau code de la ligne
                    CodeLignNew = "'" & CodeLignCourante    'commente la ligne concernée en ajoutant un "'"
                    .CodeModule.ReplaceLine i, CodeLignNew    'remplace la ligne existante par le code commenté

                Case "NO"    'si NO on décommente la ligne
                    'on regarde d'abord si le ligne est commentée = le premier "'" est un "'" qui commente la ligne
                    If Trim(Left(CodeLignCourante, InStr(CodeLignCourante, "'"))) = "'" Then
                        CodeLignNew = Left(CodeLignCourante, InStr(CodeLignCourante, "'") - 1) & Mid(CodeLignCourante, InStr(CodeLignCourante, "'") + 1)
                        .CodeModule.ReplaceLine i, CodeLignNew    'remplace la ligne existante par le code décommenté
                    End If

                End Select

            End If

        Next i

    End With

    'vide la mémoire
    Set wbk = Nothing
    Set oVBC = Nothing

End Sub

Il y aura sûrement des petites adaptation à faire mais le traitement principal est là.

Bonjour le forum

Bonjour le fil

Merci vab-new pour ta disponibilité et ton aide

J'ai essayé le code, et dès que je lance la macro "test" j'ai immédiatement un message

"erreur de compilation : incompatibilité de type"

Bonjour eole-33,

Un oubli de ma part. Remplace la macro "test" par celle-ci :

Sub test()

    Dim sRepertoire As String, sFichier As String
    Dim wbkToComment As Workbook

    sRepertoire = ThisWorkbook.Path & "\"    '-> A ADAPTER : pointer sur le répertoire du classeur contenant la macro à commenter/décommenter
   sFichier = "Ton_Classeur_A_Commenter.xls"    '-> A ADAPTER : pointer sur le classeur contenant la macro à commenter/décommenter
   'ouvre le classeur concerné
   Set wbkToComment = Workbooks.Open(sRepertoire & sFichier)

    'commente les lignes de code concernées
   CommenteCode wbkToComment, "YES" 'mettre "NO" pour décommenter les lignes de code concernées

End Sub

Lorsque tu obtiens une erreur, essaie de préciser quelle ligne fait défaut la prochaine fois

Bonsoir le forum

Bonsoir le fil

Bonsoir vba-new

Comme les fichiers comme celui que je t'ai envoyé sont sur un serveur, j'ai besoin d'avoir le menu ouvrir au démarrage de la macro pour pouvoir sélectionner le fichier.

D'avance merci

Re,

Remplace la précédente macro test par celle-ci :

Sub test()

    Dim sRepertoire As String, sFichier As String
    Dim wbkToComment As Workbook

    '___________________________________
    'Ouverture d'un fichier
    '-----------------------------------
    With Application.FileDialog(msoFileDialogOpen)
        sRepertoire = ThisWorkbook.Path & "\"
        .InitialFileName = sRepertoire
        .Title = "Sélectionnez votre fichier"
        .Filters.Clear
        .Filters.Add "Fichier Excel", "*.xls"
        .FilterIndex = 1
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewSmallIcons
        sFichier = .Show
        'sort si aucun fichier n'a été sélectionné
        If sFichier <> -1 Then Exit Sub
        sFichier = .SelectedItems(1)
    End With

    'ouvre le classeur concerné
    Set wbkToComment = Workbooks.Open(sFichier)

    'commente les lignes de code concernées
    CommenteCode wbkToComment, "YES"    'mettre "NO" pour décommenter les lignes de code concernées

End Sub

Bonsoir le forum

Bonsoir le fil

Bonsoir vba-new

J'ai essayé les macros c'est bon pour " ' " , et ça me libère la commande, mais pas ça ne supprime pas le "ok" dans la page de garde

Par contre les "YES" et "NO" de la macro "test" je ne pige pas

Essaie avec ce fichier.

Clique sur le bouton une première fois pour :

1- ouvrir ton fichier

2- enlever le OK en U68 de la page de garde

3- commenter le code (choix 1)

4- une fois les 3 étapes complétées, fais ce que tu as à faire

5- re-clique ensuite sur le bouton orange

6- tape 2 pour décommenter

7- sauvegarde ou pas ton fichier

5interface.zip (19.08 Ko)

Bonsoir le forum

Bonsoir vba-new

Je viens de tester

super ça fonctionne impec

tu me sort une mauvaise épine du pied avec cette macro

MERCI BEAUCOUP POUR TON AIDE

Rechercher des sujets similaires à "macro annulation ligne"