1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

(RESOLU) Supprimer des lignes d'une macro dans 400 fichiers Excel

Discussion dans 'Forum Excel' démarrée par LBi, 10 Août 2018 à 19:10.

  1. LBi

    LBi XLDnaute Junior

    Inscrit depuis le :
    28 Octobre 2017
    Messages :
    68
    "J'aime" reçus :
    0
    Bonjour,
    J'aimerais automatiser la suppression d'une ligne de code à l'intérieure d'une macro "Enregistre" dans plusieurs fichiers excel qui se trouvent dans un dossier.
    Merci de votre aide
     
  2. Chargement...

    Discussions similaires - (RESOLU) Supprimer lignes Forum Date
    XL 2013 supprimer ma valeur #n/a et#div par 0(résolu) Forum Excel 22 Janvier 2018
    XL 2007 (RESOLU)supprimer une ligne selon son numéro Forum Excel 31 Décembre 2016
    XL 2007 (RESOLU)supprimer selon combobox Forum Excel 26 Juin 2016
    Supprimer ligne en fonction d'une liste de mots (résolu) Forum Excel 19 Février 2016
    (résolu) supprimer saut de ligne Forum Excel 6 Décembre 2011

  3. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour LBi,

    Pour que ce soit facile il faut que la macro soit dans un même module, par exemple Module1, pour tous les fichiers.

    C'est le cas ?

    Et quel est le texte du code à supprimer ?

    A+
     
  4. Victor21

    Victor21 XLDnaute Barbatruc

    Inscrit depuis le :
    20 Octobre 2007
    Messages :
    8831
    "J'aime" reçus :
    943
    Habite à:
    près de Dijon
    Utilise:
    Excel 2013 (PC)
    Bonjour, LBi.

    Merci de joindre les 400 fichiers après les avoir anonymisés.
    (A défaut, quelques explications supplémentaires et la macro en question pourraient aider un éventuel intervenant à vous aider)
    Edit : Bonjour, job75.
     
  5. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    6962
    "J'aime" reçus :
    517
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Utilise:
    Excel 2013 (PC)
    Bonsoir Gerard, Patrick, LBi :)

    @Victor21 :
    tu veux faire péter la baraque? o_O :D. Tu me fait flipper! :eek::D
     
  6. LBi

    LBi XLDnaute Junior

    Inscrit depuis le :
    28 Octobre 2017
    Messages :
    68
    "J'aime" reçus :
    0
    Option Explicit
    Sub Enregistre()
    Sheets("Nouvelle").Select
    ActiveWorkbook.Sheets("Nouvelle").SaveAs Filename:="D:\Biologie\Termine\" & Range("F137")
    Sheets("T1").Select
    Application.Workbooks.Open "D:\Biologie\Tableau biologique.xlsm"
    End Sub


    C'est la ligne en rouge qui est à supprimer. ( elle me permettait d'ouvrir automatiquement un nouveau Tableau biologique lors de la saisie des 1300 prises de sang que j'avais à saisir, mais maintenant elle me gêne car elle ouvre un nouveau tableau à chaque sauvegarde.)
    @job75
    Les macros se trouvent tous dans le Module 2
     
    Dernière édition: 10 Août 2018 à 21:12
  7. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re, salut Patrick, Lone-wolf,

    Voyez les fichiers (zippés) joints et cette macro :
    Code (Text):
    Sub SupprimerCode()
    Dim chemin$, module$, macro$, texte$, fichier$, deb&, i&
    chemin = ThisWorkbook.Path & "\" 'à adapter
    module = "Module2" 'adaptable
    macro = "Enregistre" 'adaptable
    texte = "Application.Workbooks.Open ""D:\Biologie\Tableau biologique.xlsm""" 'adaptable
    fichier = Dir(chemin & "*.xlsm") '1er fichier du dossier
    Application.ScreenUpdating = False
    On Error Resume Next 'si le module ou la macro n'existent pas
    While fichier <> ""
        If fichier <> ThisWorkbook.Name Then
            With Workbooks.Open(chemin & fichier)
                With .VBProject.VBComponents(module).CodeModule
                    deb = .ProcStartLine(macro, 0)
                    For i = deb To deb + .ProcCountLines(macro, 0) - 1
                        If .Lines(i, 1) = texte Then .DeleteLines i, 1: Exit For
                    Next
                End With
                .Close Not .Saved 'enregistrement et fermeture
            End With
        End If
        fichier = Dir 'fichier suivant
    Wend
    End Sub
    Avec ce code tous les fichiers doivent être dans le même répertoire.

    Il faudra patienter car le traitement de 400 fichiers prendra du temps...

    Nota : pour que l'accès au VBAProject soit possible par macro il faut avoir coché l'option :

    - sur Excel 2003 et versions antérieures Faire confiance au projet Visual Basic (menu Outils-Macro-Sécurité-Editeurs approuvés)

    - sur Excel 2007 et versions suivantes Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).

    A+
     

    Pièces jointes:

  8. LBi

    LBi XLDnaute Junior

    Inscrit depuis le :
    28 Octobre 2017
    Messages :
    68
    "J'aime" reçus :
    0
    Bonsoir,
    La macro fonctionne avec les fichiers qui sont dans votre ZIP.
    Mais pas sur mes fichiers.

    J'ai collé ma macro dans le fichier à traiter 3 et cela ne fonctionne pas non plus.

    Dans la macro du début de mon post, j'avais omis les lignes avec un guillemet pensant que c'était inutile, mais peut être que le problème vient de là ?
    Donc voilà la macro tel que dans les 400 fichiers.
    Et tant qu à faire on peut aussi les supprimer pour nettoyer le code.

    Option Explicit
    Sub Enregistre()
    Sheets("Nouvelle").Select 'selectionne onglet Nouvelle
    ActiveWorkbook.Sheets("Nouvelle").SaveAs Filename:="D:\Biologie\Termine\" & Range("F137") 'chemin de sauvegarde lié à la cellule F137 de l'onglet Nouvelle
    Sheets("T1").Select 'selectionne onglet T1
    'ActiveWorkbook.Close False
    'DoEvents
    'Application.Quit
    Application.Workbooks.Open "D:\Biologie\Tableau biologique.xlsm"

    End Sub
     
    Dernière édition: 11 Août 2018 à 08:28
  9. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour LBi, le forum,

    Il y avait peut-être des espaces devant le texte à supprimer, il faut alors les supprimer avec Trim.

    Par ailleurs supprimer les lignes mises en commentaire ne pose pas de problème :
    Code (Text):
    Sub SupprimerCode()
    Dim chemin$, module$, macro$, texte$, fichier$, deb&, i As Variant
    chemin = ThisWorkbook.Path & "\" 'à adapter
    module = "Module2" 'adaptable
    macro = "Enregistre" 'adaptable
    texte = "Application.Workbooks.Open ""D:\Biologie\Tableau biologique.xlsm""" 'adaptable
    fichier = Dir(chemin & "*.xlsm") '1er fichier du dossier
    Application.ScreenUpdating = False
    On Error Resume Next 'si le module ou la macro n'existent pas
    While fichier <> ""
        If fichier <> ThisWorkbook.Name Then
            With Workbooks.Open(chemin & fichier)
                With .VBProject.VBComponents(module).CodeModule
                    deb = .ProcStartLine(macro, 0)
                    For i = deb + .ProcCountLines(macro, 0) - 1 To deb Step -1
                        If Trim(.Lines(i, 1)) = texte Then .DeleteLines i, 1
                        If Left(Trim(.Lines(i, 1)), 1) = "'" Then .DeleteLines i, 1 'lignes en commentaire
                    Next
                End With
                .Close Not .Saved 'enregistrement et fermeture
            End With
        End If
        fichier = Dir 'fichier suivant
    Wend
    End Sub
    Edit : déclaré i As Variant.

    Fichier (2).

    Bon week-end.
     

    Pièces jointes:

    Dernière édition: 11 Août 2018 à 09:44
  10. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    J'ai constaté que si la macro "Enregistre" n'est pas trouvée la boucle For/Next boucle sans fin.

    Pour l'éviter j'ai déclaré la variable i As Variant dans la macro précédente.

    A+
     
  11. LBi

    LBi XLDnaute Junior

    Inscrit depuis le :
    28 Octobre 2017
    Messages :
    68
    "J'aime" reçus :
    0
    Merci, tous les fichiers ont été traités.
    Vraiment génial.
     
  12. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    Pour info j'ai créé 400 fichiers contenant uniquement la macro "Enregistre".

    Chez moi sur Win 10 - Excel 2013 la macro s'exécute en 480 secondes.

    A+
     
  13. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    24538
    "J'aime" reçus :
    1081
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Bonjour job75

    Tu as créé manuellement 400 fichiers ? :eek:
     
  14. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour JM,
    Bien sûr avec une macro (une ligne de code avec SaveAs).

    A+
     
  15. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    24538
    "J'aime" reçus :
    1081
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Re

    Une suggestion en passant (à l'attention du demandeur)
    Pourquoi ne pas simplement créer une petite macrodans PERSONAL.xlsb ?
    Code (Visual Basic):

    Sub Ouvrir
    Application.Workbooks.Open "D:\Biologie\Tableau biologique.xlsm"
    End sub
     
    qui serait appelé dans Enregistre
    Code (Visual Basic):

    Sub Enregistre()
    Sheets("Nouvelle").Select
    ActiveWorkbook.Sheets("Nouvelle").SaveAs Filename:="D:\Biologie\Termine\" & Range("F137")
    Sheets("T1").Select
    Ouvrir
    End Sub
     
    Ensuite quand Ouvrir devient ennuyeuse, il suffit d'ajouer un ' dans Ouvrir ;)
    Code (Visual Basic):

    Sub Ouvrir
    'Application.Workbooks.Open "D:\Biologie\Tableau biologique.xlsm"
    End sub
     
    Et là le temps de traitement n'est plus un problème ;)
     
    Dernière édition: 11 Août 2018 à 16:34
  16. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re JM,

    Bah que vas-tu chercher là ?

    Il est évident que les 400 fichiers de LBi sont ce qu'ils sont et que la question est de les traiter !

    A+
     
  17. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    24538
    "J'aime" reçus :
    1081
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Re


    @job75
    Si j'ai bien compris le contexte (gestion de prises de sang)
    Le 400 fichiers sont appelés à un jour être 500 ou plus
    Rien n'empeche d'emettre telle ou telle suggestion pour modifier ou pas un mode opératoire.
    Libre au demandeur de s'en inspirer ou pas.

    Personnellement, plutôt que modifier N fichiers une fois qu'ils sont créés je préfère mettre en commentaire une macro stockée dans le classeur de macros complémentaires appelée par ces N fichiers.

    [aparté]
    je suis étonné (si il s'agit bien de cela ici) qu'un laboratoire d'analyes sanguines utilise Excel pour gérer ce genre d'analyses...
    Il doit exister des logiciels métiers dédiés, non ?
    [/aparté]
     
  18. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    24769
    "J'aime" reçus :
    1972
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    je suis étonné JM que tu méconnaisses ma réponse du post #15.

    LBi a 400 fichiers sur les bras à modifier, point barre.

    La question de savoir pourquoi et comment a été rédigée la macro "Enregistre" est sans aucun intérêt, le mal est fait.

    Perso je ne l'aurai jamais créée, re-point barre.

    A+
     
  19. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    24538
    "J'aime" reçus :
    1081
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Re

    @job75
    Je n'ai pas à commenter ta proposition ou ton code (je l'ai lu et compris)
    C'est le demandeur qui posera ses questions le cas échéant.

    Ma suggestion s'adressait au demandeur
    (Et il en fera ce qu'il voudra)

    Quant à savoir ce qui présente de l'interêt ou pas , c'est à chacun d'en décider, non ?

    PS: Je ne vois pas où est le problème puisque ma "suggestion" est intervenue une fois que le post ait été passé en résolu par le demandeur...
     
    Dernière édition: 11 Août 2018 à 16:35
  20. LBi

    LBi XLDnaute Junior

    Inscrit depuis le :
    28 Octobre 2017
    Messages :
    68
    "J'aime" reçus :
    0
    Pour info, il s'agit d'un cabinet de rhumatologie et le nombre de tableaux biologiques (bien utiles pour suivre l’évolution biologique des patients) dépasse les 6000 que l'on rentrait avant manuellement...de 5 à 10 mn par résultat d’analyse médicale x 6000 tableaux x 3 résultats en moyenne par tableau = 1500 heures mini de saisie.
    Les 400 tableaux correspondent aux dossiers en cours dans les 6 derniers mois. Maintenant, ils vont être créer au fur mesure des nouveaux patients.
    En tous cas un grand merci aux personnes qui m'ont aidé dans l'élaboration de ce tableau biologique qui est vraiment au Top.
     
  21. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    24538
    "J'aime" reçus :
    1081
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    @LBi
    Dans ce cas, la suggestion* n'est pas si saugrenue que cela, non ?
    Qu'en penses-tu?


    *Celle du message#14
     

Partager cette page