Suppression de ligne contenant une valeur

MomoAbou -  
 MomoAbou -
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

4 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. MomoAbou
       
      Bonjour ThauTheme,

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

      Momo
      0
    2. MomoAbou
       
      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
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    Re,

    Mets le quand même au format csv sinon on va pas s'en sortir...
    0
    1. MomoAbou
       
      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
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    Re,

    Je regarde ça ce soir si j'ai le temps...
    0
    1. MomoAbou
       
      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
  4. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. MomoAbou
       
      Bonjour ThauTheme,

      je teste ça ce soir et te reviens.

      Je commence à kiffer VBA :)

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