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
C'est possibleeole-33 a écrit :je pense que l'on c'est pas bien compris
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
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