Supprimer lignes spécifiques dans les fichiers d'un répertoire

Résolu/Fermé
dianedg Messages postés 22 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 19 juillet 2016 - 5 déc. 2015 à 09:26
dianedg Messages postés 22 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 19 juillet 2016 - 6 déc. 2015 à 22:45
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
A voir également:

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 5/12/2015 à 10:40
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
0
dianedg Messages postés 22 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 19 juillet 2016 1
5 déc. 2015 à 11:18
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 5/12/2015 à 12:40
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
0
dianedg Messages postés 22 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 19 juillet 2016 1
5 déc. 2015 à 14:05
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 déc. 2015 à 14:46
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 déc. 2015 à 15:00
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)
0
dianedg Messages postés 22 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 19 juillet 2016 1
5 déc. 2015 à 21:06
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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 déc. 2015 à 08:32
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
0
dianedg Messages postés 22 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 19 juillet 2016 1
6 déc. 2015 à 22:45
Ah oui effectivement...je suis vraiment une débutante... Et maintenant ça fonctionne nickel (les 2 macros) :-) merci pour ton aide !
0