Suppression de lignes selon critères

gege765

XLDnaute Nouveau
Bonsoir,

Premier point :
J'aimerai supprimer des lignes si les cellules de la colonne A1 ne contiennent pas les valeurs suivantes 1,2...48 ou A1, A2...G24 ou Trk1...Trk12 est ce possible ?

Deuxième point
Le but final est de faire une synthèse d'un ensemble des fichier csv (j'en ai environ une centaine) comme présenter dans l'onglet résultat.

Quel est votre avis la dessus ?
Dois-je transformer d'abord tout mes fichier csv en xlsm et après effectuer les différent traitements ?
Pour ensuite faire une synthèse des synthèses ?

Ou alors existe-t-il une autre méthode ?

Merci de vos avis et éventuelles solutions ?
 

Pièces jointes

  • swcsv.xlsm
    21.2 KB · Affichages: 46
  • swcsv.csv.txt
    650 bytes · Affichages: 28

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Suppression de lignes selon critères

Bonjour gege765 et bienvenu sur le forum :)

Un essai de synthèse sans les synthèses intermédiaires dans le fichier joint.

  • Ouvrir le fichier Synthèse.xlsm
  • Activer la feuille "Synthese"
  • Cliquer sur la forme "Bilan"
  • Effacer ou non les données de la précédente synthèse (permet de faire la synthèse en plusieurs fois)
  • Naviguer jusqu'au répertoire contenant les .CSV
  • Sélectionner les fichiers (on peut sélectionner plusieurs fichiers à la fois en utilisant les touches Maj et/ou Ctrl conjointement avec la souris)

Si plusieurs de vos fichiers .CSV sont dans un même répertoire, on peut les concaténer dans un seul fichier à l'aide du fichier de commande ConcatCSV.cmd. Ce fichier est bien sûr modifiable par vos soins. Comme on ne traitera qu'un seul fichier (toto.csv) plutôt qu'une centaine, la durée du traitement sera considérablement réduite.

La barre de statut en bas à gauche indique l'avancement du traitement.

Le code dans le module m_Synthese:
VB:
Sub Bilan()
Dim MesFichiers, X, N, Nfic
Dim Fin As Long, Trouve As Range
Dim oldStatusBar

Application.ScreenUpdating = False
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "Début traitement"

' on efface ou non les données de synthèse (possibilité de faire
' la synthèse en plusieurs fois ou de rajouter des fichiers
' chaque jour.
If MsgBox("Voulez-vous effacer la précédente synthèse ?", _
          vbYesNo + vbDefaultButton1) = vbYes Then
  If MsgBox("Êtes vous certain de vouloir effacer la précédente synthèse ?", _
            vbYesNo + vbDefaultButton1) = vbYes Then
    Sheets("Synthese").Range("A:D").ClearContents
  End If
End If

' boucle de sélection des fichiers et de traitement
Do
' Sélection des fichiers csv
MesFichiers = Application.GetOpenFilename( _
    FileFilter:="Fichier CSV (*.csv), *.txt,Tous fichiers (*.*), *.*", _
    FilterIndex:=1, Title:="Sélection fichiers (test)", MultiSelect:=True)

If VarType(MesFichiers) = vbBoolean Then
  ' aucun fichier sélectionné!
  MsgBox "aucun fichier choisi"
Else
  ' un ou plusieurs fichiers choisis -> on traite
  Nfic = UBound(MesFichiers) - LBound(MesFichiers) + 1
  N = 0
  MsgBox Nfic & " fichier(s) choisi(s)"
  For Each X In MesFichiers
    N = N + 1
    ' traitement de chacun des fichiers sélectionnés
    ' ouverture du fichier
    Workbooks.Open Filename:=X
    With ActiveSheet
    ' Convertir les données
    .Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlTextQualifierNone, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True
    'Nettoyage du fichier
      ' on ôte les lignes non = à 1..24, non = à A1..A24 et ne commençant pas "Trk"
      Fin = .Range("A" & Rows.Count).End(xlUp).Row
      .Range("D:D").Clear
      .Range("D1").FormulaArray = _
          "=SUM(COUNTIF(RC[-3],""A""&ROW(R1:R24))+COUNTIF(RC[-3],ROW(R1:R24))+" & _
          "COUNTIF(RC[-3],""Trk"" & ROW(R1:R24))) > 0"
      .Range("D1").Copy .Range("D2:D" & Fin)
      .Range("A1:D" & Fin).Sort key1:=.Range("D:D"), order1:=xlDescending, Header:=xlNo
      Set Trouve = Nothing
      Set Trouve = .Range("A1:D" & Fin).Find(what:=False, LookIn:=xlValues, lookat:=xlWhole)
      If Not Trouve Is Nothing Then .Range("A" & Trouve.Row & ":D" & .Rows.Count).Delete
      .Range("D:D").Clear
      
      ' on calcule le nombre de jour -> colonne C / 86400000
      Fin = .Range("A" & Rows.Count).End(xlUp).Row
      .Range("D1").Formula = "=C1 / 86400000"
      .Range("D1").Copy .Range("D1:D" & Fin)
      .Range("D1:D" & Fin).Value = .Range("D1:D" & Fin).Value
      .Range("D1:D" & Fin).Copy .Range("C1")
      
      ' on copie les colonne A à C à la fin des données de la feuille "Synthese"
      Set Trouve = ThisWorkbook.Sheets("Synthese").Range("A" & Rows.Count).End(xlUp)
      Set Trouve = Trouve.Offset(IIf(Trouve <> "", 1, 0))
      .Range("A1:C" & Fin).Copy Trouve
    End With
    Application.StatusBar = N & " fichiers traités / " & Nfic
    ActiveWindow.Close SaveChanges:=False
  ' on passe au fichier suivant
  Next X
End If
' on arrête ou continue
Loop Until MsgBox("Autres fichiers à traiter?", vbYesNo + vbDefaultButton1) = vbNo
Application.ScreenUpdating = True
Application.StatusBar = ""
oldStatusBar = Application.DisplayStatusBar

End Sub

J'ai ôté la formule de recherche du nom du fichier pour la remplacer par un tout petit peu de code dans le module de code de la feuille 'Synthese"
 

Pièces jointes

  • Concat-CSV.zip
    30.4 KB · Affichages: 25
Dernière édition:

gege765

XLDnaute Nouveau
Re : Suppression de lignes selon critères

Bonjour et merci de ton aide.
Le résultat espéré commence à se dessiner.

Cependant dans le nettoyage du fichier, certaines condition ont été oubliées :
Code:
' on ôte les lignes non = à 1..24, non = à A1..A24 et ne commençant pas "Trk"
      Fin = .Range("A" & Rows.Count).End(xlUp).Row
      .Range("D:D").Clear
      .Range("D1").FormulaArray = _
          "=SUM(COUNTIF(RC[-3],""A""&ROW(R1:R24))+COUNTIF(RC[-3],ROW(R1:R24))+" & _
          "COUNTIF(RC[-3],""Trk"" & ROW(R1:R24))) > 0"
      .Range("D1").Copy .Range("D2:D" & Fin)
      .Range("A1:D" & Fin).Sort key1:=.Range("D:D"), order1:=xlDescending, Header:=xlNo
      Set Trouve = Nothing
      Set Trouve = .Range("A1:D" & Fin).Find(what:=False, LookIn:=xlValues, lookat:=xlWhole)
      If Not Trouve Is Nothing Then .Range("A" & Trouve.Row & ":D" & .Rows.Count).Delete
      .Range("D:D").Clear

Comment ajouter/modifier la condition
on ôte les lignes non = à 1..48, non = à A1..G24 et ne commençant pas "Trk"

Autre point un peu moins important :
En réalité un fichier csv représente un équipement réseau et j'aimerai avoir une synthèse pour chaque équipement (identifié par le nom du fichier qui est une adresse ip) afin d'avoir une synthèse.

Peut-être ajouter le nom du fichier dans la colonne D du fichier de synthèse et ensuite l'utiliser pour générer une synthèse intermédiaire ?

Voila il faudrait ajouter les synthèses intermédiaires à la synthèse globale actuelle ?

Comment dois-je procéder ?

Je joins en pièce jointe quelques fichiers csv si cela peut aider.

Merci
 

Pièces jointes

  • csv.zip
    5.8 KB · Affichages: 23
  • csv.zip
    5.8 KB · Affichages: 23
  • csv.zip
    5.8 KB · Affichages: 19
Dernière édition:

gege765

XLDnaute Nouveau
Re : Suppression de lignes selon critères

Merci encore pour votre aide.
Je ne sais pas si vous avez vu ma dernière édition
Comment ajouter/modifier la condition
on ôte les lignes non = à 1..48, non = à A1..G24 et ne commençant pas "Trk"

Car je pense que nous avons éditez en même temps.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Suppression de lignes selon critères

Bonsoir gege765,

Une version v2 qui calcule les synthèses individuelles (deux présentations finales: en lignes et en colonnes)

Comment ajouter/modifier la condition
on ôte les lignes non = à 1..48, non = à A1..G24 et ne commençant pas "Trk"

Je ne comprends pas la condition non = à A1..G24 .
Je vois bien où commence A (A1) mais quelle valeur finale pour les A ? (A24 ou A48 ou A99999 ou autre).
Idem pour les B. Quel est le début ? Quelle est la fin ? Et ainsi de suite jusqu'au G...
 

Pièces jointes

  • Synthèse v2.xlsm
    34.7 KB · Affichages: 32

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Suppression de lignes selon critères

(re)Bonsoir gege765,

La version v3 qui tient compte des dernières conditions (à vérifier tout de même car la formule est tarabiscotée)

Edit : oubliez la v3 (j'avais pris comme condition pour les nombres purs <=24 alors que c'est <=48). Passez à la v4.
 

Pièces jointes

  • Synthèse v4.xlsm
    32.3 KB · Affichages: 34
Dernière édition:

gege765

XLDnaute Nouveau
Re : Suppression de lignes selon critères

re,

Les résultats on l'air d'être OK. Cependant il faut éviter de sélectionner trop de fichier sinon Excel plante...
Mais c'est un détail

En tout cas merci.

Dernière question, pour avoir que le tableau de synthèse suivant que faut-il modifier ?
tab.jpg
 

Pièces jointes

  • tab.jpg
    tab.jpg
    17 KB · Affichages: 71
  • tab.jpg
    tab.jpg
    17 KB · Affichages: 72

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Suppression de lignes selon critères

Bonjour gege765,

Pas le courage :(de trop modifier le code, j'ai simplement utilisé la feuille "Synthese" en tant que feuille de travail (feuille masquée) et recopié les résultats sur une nouvelle feuille "Resultat".
 

Pièces jointes

  • Synthèse v5.xlsm
    52.8 KB · Affichages: 37

gege765

XLDnaute Nouveau
Re : Suppression de lignes selon critères

Bonjour mapomme,
Merci pour les modifications,
Autre question la dernière des dernière (je ne sais pas si je dois ouvrir un nouveau fil)
Je souhaite exécuter la macro pour l'ensemble des fichiers présent dans le même répertoire que le fichier de synthèse (afin d'éviter la sélection des fichiers) Est-ce possible ?

Merci et bonne semaine
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Suppression de lignes selon critères

(re) Bonjour gege765,

Le but final est de faire une synthèse d'un ensemble des fichier csv (j'en ai environ une centaine)

Cependant il faut éviter de sélectionner trop de fichier sinon Excel plante
Je souhaite exécuter la macro pour l'ensemble des fichiers présent dans le même répertoire que le fichier de synthèse (afin d'éviter la sélection des fichiers)

N'y aurait il pas comme une contradiction ? :confused:
 

gege765

XLDnaute Nouveau
Re : Suppression de lignes selon critères

Bonjour,
Je ne pense pas. Cependant au début j'ai voulu simplifié le problème.

J'ai bien une centaine de fichiers présents dans un répertoire.
Ce répertoire principal est constitué de sous dossier. Chaque sous dossier représente une localisation. Il peut également y avoir des dossiers dans les sous dossiers. Par exemple un site peut avoir un ou plusieur batiment qui lui m^me peut être constitué d'étage.
Chaque sous dossier peut contenir de un à 20 fichiers environ
Donc j'aurais souhaitez qu'une synthèse se face automatiquement pour chaque sous dossier comme cela j'aurais eu une visibilité rapide par localisation. Avec par exemple un fichier de synthèse qui se nomme comme le nom du sous dossier.

J'aurais peut être du expliquer cette vision dès le début mais je ne m'attendais déjà pas à un tel résultat et j'ai donc voulu simplifier le problème.

D'ailleurs la macro est déjà super génial et je te remercie.

Donc cette dernière partie est vraiment la cerise sur le gâteau.
Au pire j'utilise le fichier cmd de concaténation du premier post et comme cela je n'aurai qu'un fichier à sélectionner un fichier unique par localisation.

PS : Le but ultime serait de tout automatiser
Avoir la synthèse d'un site par exemple mais le nombre de sous dossiers peut tellement être important que je pense que l'utilisation d'Excel n'ai peu être pas approprié.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Suppression de lignes selon critères

Bonsoir gege765,

Voilà dans mes fichiers je me suis aperçu que certaines valeurs étaient négatives. Dans mon comptage à 7, 14 et 21 jours je souhaite les ignorer et prendre respectivement les valeurs comprises entre 0 et 7j, 0 et 14j et 0 et 21j

Pour arriver à cela j'ai tenter d'utiliser la formule frequence mais cela ne prend pas en compte l'ip.

Quel formule utiliser pour prendre en compte l'intervalle de valeur en fonction de l'ip

Utiliser la fonction: =NB.SI.ENS($D:$D;L$1;$B:$B;2;$C:$C;"<7";$C:$C;">=0") par exemple pour les valeurs supérieures ou égales à 0 et inférieures à 7.

Le fichier v6 prend en compte que les valeurs doivent être >=0. Voir les formules sur la feuille cachée "Synthese".
 

Pièces jointes

  • Synthèse v6.xlsm
    33.4 KB · Affichages: 25

Discussions similaires

Réponses
7
Affichages
405

Statistiques des forums

Discussions
312 491
Messages
2 088 889
Membres
103 982
dernier inscrit
krakencolas