Supprimer lignes spécifiques dans les fichiers d'un répertoire [Résolu/Fermé]

Signaler
Messages postés
22
Date d'inscription
mercredi 5 mars 2014
Statut
Membre
Dernière intervention
19 juillet 2016
-
Messages postés
22
Date d'inscription
mercredi 5 mars 2014
Statut
Membre
Dernière intervention
19 juillet 2016
-
Bonjour,

J'aimerais faire une macro qui permet sélectionner un répertoire, chercher les fichiers xlsx, les ouvrir. Dans chaque fichier, il faut supprimer les lignes contenant le mot "NO READ" (toujours en colonne C), enregistrer (avec le même nom de ficheir) et fermer les fichiers. Le nombre de fichiers dans le répertoire est variable ainsi que le nombre de lignes contenant "NO READ" dans chaque fichier.
Quelqu'un peut-il m'aider ?

J'ai quelques bout de codes mais tout ce que j'ai testé pour supprimer les lignes n'a pas fonctionné :-(

Je comprends un peu le code VBA une fois qu'il est créé mais ne connaît pas assez les outils pour pouvoir l'écrire toute seule.

Merci d'avance,
Diane

5 réponses

Messages postés
16258
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 octobre 2020
3 051
bonjour Diane

Sur quelle feuille des classeurs non_read ?
Il y a t'il une ligne d'ent^tes dans les classeurs no_read ?

d'avance merci

 Michel
Messages postés
22
Date d'inscription
mercredi 5 mars 2014
Statut
Membre
Dernière intervention
19 juillet 2016

Bonjour, il n'y a qu'une feuille dans chaque classeur, je n'ai plus le classeur sous les yeux mais le nom de la feuille est sheet 1 je crois.
Et oui, il y a une ligne d'entête à chaque fois
Merci pour votre aide
Messages postés
16258
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 octobre 2020
3 051
OK, j'ai fait la recherche sans m'occuper de l'ent^te en remontant dans les lignes
le classeur collecteur dans lequel se trouve la macro se trouve en dehors du répertoire des "no read"
je n'ai pas testé s'il fallait tenir compte de la casse (majuscules-minuscules)

proposition:
Option Explicit
'---------------
Sub supprimer_no_read()
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String
Dim Fich As String, Nbre As Integer, Cptr As Integer, Lig As Integer

Application.ScreenUpdating = False
'------------------choix du répertoire à scanner
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error Resume Next
Set oFolderItem = objFolder.Items.Item
Chemin = oFolderItem.Path
'MsgBox Chemin
If Chemin = "" Then GoTo err1

'-------------parcours les classeurs du répertoire
ChDir Chemin
Fich = Dir("*.xlsx")
While Fich <> ""
Workbooks.Open Filename:=Chemin & "\" & Fich
'cherche les "no read" dans la colonne C
With Sheets(1)
Nbre = Application.CountIf(.Columns("C"), "No READ")
' "noread' trouvé dans une ligne---> suppression ligne
For Cptr = 1 To Nbre
Lig = .Columns("C").Find(what:="NO READ", searchdirection:=xlPrevious).Row
Rows(Lig).Delete
Next
'sauvegarde si "noread" trouvé(s) et fermeture classeur actif
With ActiveWorkbook
If Not .Saved Then: .Save
.Close
End With
End With
Fich = Dir
Wend

Exit Sub

'----------------gestionnaire erreurs
err1:
MsgBox " répertoire inconnu", vbCritical
End Sub


tu dis...

 Michel
Messages postés
22
Date d'inscription
mercredi 5 mars 2014
Statut
Membre
Dernière intervention
19 juillet 2016

je viens de tester, ça ne fonctionne pas :-(
Le nom de la feuille est en fait le nom du fichier.

Voici le code que j'avais commencé (grâce à des bouts d'exemples trouvés sur internet), qui ne fonctionne pas non plus, je peux sélectionner le répertoire, les fichiers "semblent" s'ouvrir et se fermer et il me dit "terminé" à la fin mais lorsque je ré-ouvre les fichiers, il y a toujours les lignes contenant un "NO READ".
je ne trouve pas le problème...



Sub SupprimerNoREAD()
'creation de la liste des fichiers contenu dans le repertoire qui contient ce même fichier
Dim Chemin As String, Fichier_xlsx As String, CompteurDeFichier As Integer
Dim MessageFinDeTraitement As String, MaFeuille As Worksheet
Dim Repertoire As FileDialog, Chemin_et_Fichier As String

'fige ecran
Application.ScreenUpdating = False
'Selection d'un repertoire
Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
Repertoire.Show 'boite a dialogue choix repertoire
If Repertoire.SelectedItems.Count > 0 Then 'choix ok
Chemin = Repertoire.SelectedItems(1)

Fichier_xlsx = Dir(Chemin & "\*.xlsx") 'recupération 1er fichier .xslx
If Fichier_xlsx <> Empty Then 'fichier xlsx existe
Do While Fichier_xlsx <> Empty 'boucle tant que fichier xlsx existe
'-------------------- Traitement fichier xlsx----------------------
Call SupprimerNoREAD_Traitement(Chemin, Fichier_xlsx)
'---------------------------------------------------------------------------------------------
Fichier_xlsx = Dir ' suivant
Loop
Msg = "Terminé"
Else
Msg = "Aucun Fichier trouvé dans le répertoire " & Chemin & " ! "
End If
MsgBox Msg
Else 'choix pas ok
MsgBox "Aucun Répertoire Sélectionné"
Exit Sub
End If
Application.ScreenUpdating = True
End Sub

Sub SupprimerNoREAD_Traitement(Chemin, Fichier_xlsx)

Dim der As Long
Dim i As Long

'ouverture fichier xlsx
Workbooks.Open Filename:=Chemin & "\" & Fichier_xlsx, Local:=True
With ActiveWorkbook.ActiveSheet
'Sélection d'une colonne

der = Range("C65536").End(xlUp).Row
For i = der To 1 Step -1
If Range("C" & i) = "NO READ" Then Rows(i).Delete
Next i


'sauvegarde en xlsx
ActiveWorkbook.Save
End With
ActiveWorkbook.Close False 'fermeture fichier
End Sub
Messages postés
16258
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 octobre 2020
3 051
Comme d'hab, J'avais essayé sur une maquette et c'était OK

comme c'est le faux nom de la feuille que tu m'avais communiqué qui était faux
j'ai modifié le code

While Fich <> ""
Workbooks.Open Filename:=Chemin & "\" & Fich
'cherche les "no read" dans la colonne C
folio = Left(Fich, Len(Fich) - 5)
With Sheets(folio)


Déclare au début macro folio en string
j'ai essayé et ça marche
Messages postés
16258
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 octobre 2020
3 051
ci joint maquette de travail
http://www.cjoint.com/c/ELfn577CNdG
http://www.cjoint.com/c/ELfn7I212NG (il faut dézipper et non ouvrir directement)
Messages postés
22
Date d'inscription
mercredi 5 mars 2014
Statut
Membre
Dernière intervention
19 juillet 2016

Bonne et mauvaise nouvelle. J'ai testé la maquette, ça marche parfaitement avec tes fichiers :-) J'ai donc ajouté les miens à la suite dans le dossier dézipper, remis des NO READ dans tes fichiers aaa et bbb pour tester. Les NO READ dans aaa et bbb sont bien supprimés avec la macro, mais pas ceux dans mes fichiers :-(
Du coup je me demande si mes fichiers n'ont pas un pb.
En voici un en exemple en PJ si ça peut aider: https://www.cjoint.com/c/ELfubbY5StM
Pour info, à la base ce sont des fichiers csv transformés par macro en xlsx.

Merci d'avance si tu peux encore m'aider!
Messages postés
16258
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 octobre 2020
3 051
Bonjour

dans la feuille tu as un esapce devant NO READ (vérif avec nbcar=8 au lieu de 7) donc... met un espace devant NO READ dans la macro
Messages postés
22
Date d'inscription
mercredi 5 mars 2014
Statut
Membre
Dernière intervention
19 juillet 2016

Ah oui effectivement...je suis vraiment une débutante... Et maintenant ça fonctionne nickel (les 2 macros) :-) merci pour ton aide !