Suppression de ligne contenant une valeur

Fermé
MomoAbou - 2 mars 2016 à 13:07
 MomoAbou - 3 mars 2016 à 17:51
Bonjour à tous,

j'ai un petit problème (sur fichier CSV).

Je dispose de 100 Fichiers dans un répertoire, tous au même Format, une seule feuille pour chaque fichier mais de nom différent d'un fichier à l'autre
Je voudrais qu'à chaque fois qu'on rencontre "Open" dans la colonne B, qu'on supprime la ligne correspondante et ceci pour tous les fichiers.

Est ce que ceci est faisable sur CSV?

Merci par avance.

Momo
A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
2 mars 2016 à 16:45
Bonjour MomoAbou, bonjour le forum,

Le code ci-dessous devrait faire l'affaire. Sans fichier exemple je ne peux pas faire beaucoup mieux. N'oublie de modifier le chemin d'acces CH!...

Sub Macro1()
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim FICH As String 'déclare la variable FICH (FICHier)
Dim CO As Workbook 'déclare la variable CO (Classeur Ouvert)
Dim OO As Worksheet 'déclare la variable OO (Onglet Ouvert)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)

CH = "ecrire ici le chemin d'accès complet au dossier spécifié" 'exemple CH = "C:\Users\Robert\Documents\Tests\"
FICH = Dir(CH) 'définit la variable FICH (1er fichier du dossier indiqué par CH)
Do While FICH <> "" 'boucle tant que FICH n'est pas vide
    If UCase(Right(FICH, 4)) = ".CSV" Then 'condition : si le fichier a une extension ".csv" ou ".CSV"
        Workbooks.Open CH & "\" & FICH 'ouvre le classeur
        Set CO = ActiveWorkbook 'définit le classeur ouvert CO
        Set OO = CO.Sheets(1) 'définit l'onglet ouvert OO
        DL = OO.Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée de la colonne B de l'onglet ouvert OO
        For I = DL To 1 Step -1 'boucle inversée de la dernière ligne Dl à la première
            If UCase(OO.Cells(I, 2).Value) = "OPEN" Then OO.Rows(I).Delete 'condition si la cellule en colonne 2 (=B) de la ligne contient "OPEN" (quelle que soit la casse), supprime la ligne
        Next I 'prochaine ligne de la boucle inversée
        CO.Close True 'ferme le classeur en enregistrant les modification faites
    End If 'fin de la condition
    FICH = Dir 'passe au fichier suivant...
Loop 'boucle
End Sub

0
Bonjour ThauTheme,

merci beaucoup, je teste ça et vous fais un retour. Merci beaucoup d'avance.

Momo
0
Bonjour,

J'ai fait un premier Test mais rien ne se passe apparemment même je n'ai pas non plus de message d'erreur.
Un fichier exemple est dispo ci dessous

http://www.cjoint.com/c/FCcqk5IrBIx.

Je l'ai mis ici sous Excel parce que le format csv était illisible.

Merci beaucoup.

Momo
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
2 mars 2016 à 17:16
Re,

Mets le quand même au format csv sinon on va pas s'en sortir...
0
Voici un lien,

http://www.cjoint.com/doc/16_03/FCcqgDgleLx_Org-Axis-ARG-2015-Close-File.csv

Il me le met au format Text dans un autre éditeur par contre.

Merci
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
2 mars 2016 à 17:30
Re,

Je regarde ça ce soir si j'ai le temps...
0
Merci beaucoup,

juste pour info il se pourrait que quelques colonnes aient été déplacées. Le format Final (pour ré-adaption si nécessaire ) est celui que je vous ai mis sur le lien.

Merci.

Momo
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
3 mars 2016 à 14:37
Bonjour Momoabou, bonjour le forum,

Le code ci-dessous s'applique aux fichiers csv où tout le texte est contenu dans la première colonne. Pour éviter les catastrophes je te recommande de faire une copie de sauvegarde du dossier complet au cas ou le résultat de la macro ne correspondrait pas à tes désir. Ça risque de mouliner pas mal à l'exécution et ça peut prendre pas mal de temps... À tester.

Pense à modifier la ligne du code avec ton chemin d'accès à toi

Sub Macro1()
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim FICH As String 'déclare la variable FICH (FICHier)
Dim CO As Workbook 'déclare la variable CO (Classeur Ouvert)
Dim OO As Worksheet 'déclare la variable OO (Onglet Ouvert)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)

CH = "ecrire ici le chemin d'accès complet au dossier spécifié" 'exemple CH = "C:\Users\Robert\Documents\Tests\"
FICH = Dir(CH) 'définit la variable FICH (1er fichier du dossier indiqué par CH)
Do While FICH <> "" 'boucle tant que FICH n'est pas vide
    If UCase(Right(FICH, 4)) = ".CSV" Then 'condition : si le fichier a une extension ".csv" ou ".CSV"
        Workbooks.Open CH & "\" & FICH 'ouvre le classeur
        Set CO = ActiveWorkbook 'définit le classeur ouvert CO
        Set OO = CO.Sheets(1) 'définit l'onglet ouvert OO
        DL = OO.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne B de l'onglet ouvert OO
        For I = DL To 1 Step -1 'boucle inversée de la dernière ligne Dl à la première
            'si dans le texte en colonne 1 le mot "Open" existe, efface la ligne
            If InStr(1, OO.Cells(I, 1).Value, "Open") <> 0 Then OO.Rows(I).Delete
        Next I 'prochaine ligne de la boucle inversée
        CO.Close True 'ferme le classeur en enregistrant les modification faites
    End If 'fin de la condition
    FICH = Dir 'passe au fichier suivant...
Loop 'boucle
End Sub

0
Bonjour ThauTheme,

je teste ça ce soir et te reviens.

Je commence à kiffer VBA :)

Merci.
0
Je viens de faire le test et ça a marché nickel comme je le souhaitais!! Merci beaucoup ThauTheme.
0