Comment automatiser ma BD importée
Bonsoir le forum
Merci de me permettre comme d'habitude de poser mon problème.
Je produis des statistiques de comptes ouverts à partir de données importées d'un fichier. le fichier lui même est obtenu à partir de notre logiciel.
J'ai une facon de traiter mes données mais cela me prend énormement de temps et lorsque je suis absent, cela cause encore de soucis à mes collègues. Voila pourquoi j'ai pensé aux "génies" de ce forum qui me donnent toujours satisfaction.
Voici les différentes étapes de la réalisation:
A partir de l'enregistreur, j'ai pu réaliser un premier traitement donc voici le code ci-dessous.
Sub STAT()
'
' STAT Macro
'
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Documents and Settings\pk9086\Bureau\STATSSEMAINE.txt", Destination:= _
Range("$A$1"))
.Name = "STATSSEMAINE"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(16, 7, 23, 3, 12, 27, 6, 4, 19, 3, 11)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Columns("A:D").Select
Selection.Delete Shift:=xlToLeft
Rows("2:13").Select
Selection.Delete Shift:=xlUp
Range("A3").Select
End SubUne fois ce 1er traitement réalisé j'ai une plage de donnée (A1:H1865), voici ce que je souhaite qu'on réalise pour moi:
1: les code AU de la colonne H soient remplacé par les code de la colonne F correspondant.
2: Suppression de la colonne H
3: que les solde devises de la colonne E soient converti en format acceptable car ce format(2,500.00) ne sont pris en compte lors des calculs.
4: Aussi, que toute cellule de la colonne G qui ne contient pas de date entraine la suppression de la ligne ou des lignes.
Avec votre permission, je me limiterai à ces conditions afin d'apprécier les résultats avant de poursuivre.
NB: la plage de donnée n'est pas standard car ca varie mais c'est toujours de A1:H...
Si tout se passe bien, je dois retrouver le résultat de la feuil2
Je reste à votre disposition pour de plus amples informations.
Bonsoir
Point 2 - Je suppose que tu voulais dire " : Suppression de la colonne F
Point 4 - J'ai traité la suppression d'après la colonne A
Teste ce code :
Sub test()
Application.ScreenUpdating = False
Dim Derlg As Long
Dim i As Long
Dim c As Range
Dim x As Range
Derlg = Range("A65536").End(xlUp).Row
For i = Derlg To 1 Step -1
If Len(Range("A" & i)) <> 11 Or Left(Range("A" & i), 1) = "-" Then Rows(i).Delete
Next i
For Each c In Range("H1:H" & Range("H65536").End(xlUp).Row)
If c = "AU" Then c = c.Offset(0, -2)
Next c
Columns(6).Delete Shift:=xlToLeft
For Each x In Range("E1:E" & Range("E65536").End(xlUp).Row)
If (x.Value Like "*,*") Then x.Value = Replace(x.Value, ",", "")
x.NumberFormat = "#,##0.00"
Next x
End SubAmicalement
Nad
Bonsoir NAD
C'est très super ce que vous venezde réaliser d'après mes tests.
Permet que je face de petites observations pour sa perfection:
Nad a écrit :Point 2 - Je suppose que tu voulais dire " : Suppression de la colonne F
C'est bien vu de ta part.
Nad a écrit :Point 4 - J'ai traité la suppression d'après la colonne A
En passant par la colonne A, je pense qu'il faut renforcer la condition: il y'a souvent des cellules qui contiennent des mots à 11 lettres. Pouvez-vous revoir le code ci-dessous afin qu'il ne prend pas en compte les mots qui auront 11 lettre comme ce que j'ai rencontré lors de mon test?
If Len(Range("A" & i)) <> 11 Or Left(Range("A" & i), 1) = "-" Then Rows(i).DeleteAu niveau du format de la devise, peut-on remplacer
x.NumberFormat = "#,##0.00"par
x.NumberFormat = "#,##0"Aussi, le code ci-dessous peut-il être intégré dans votre code afin que ca devienne un seul code?
C'est un code que j'ai réalisé à partir de l'enregistreur. si possible pour de l'adater en code facilement lisible et compréhensible.
Sub STAT()
'
' STAT Macro
'
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Documents and Settings\pk9086\Bureau\STATSSEMAINE.txt", Destination:= _
Range("$A$1"))
.Name = "STATSSEMAINE"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(16, 7, 23, 3, 12, 27, 6, 4, 19, 3, 11)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Columns("A:D").Select
Selection.Delete Shift:=xlToLeft
Rows("2:13").Select
Selection.Delete Shift:=xlUp
Range("A3").Select
End SubCordialment
Salut Nad et le forum
Juste une relance.
Cdlt
Bonjour
Si tous les comptes commencent par 0 (comme dans le fichier), pas besoin de compter le nombre de lettres. Tu peux remplacer :
If Len(Range("A" & i)) <> 11 Or Left(Range("A" & i), 1) = "-" Then Rows(i).Deletepar :
If Left(Range("A" & i), 1) <> "0" Then Rows(i).DeleteSi ce n'est pas le cas, envoie un fichier avec les différents mots que l'on peut trouver.
Edit : en travaillant sur la colonne G :
If Left(Range("G" & i), 1) > 3 Then Rows(i).DeleteAmicalement
Nad
Salut Nad
Merci pour le feedback.
Ca marche avec ce code que j'ai remplacé :
If Left(Range("A" & i), 1) <> "0" Then Rows(i).DeleteJ'avais laissé également d'autres questions au cas ou vous pourriez tenter quelque chose encore.
Cdlt
Re
Pour la question du format, la réponse est oui.
Pour essayer d'améliorer ton code, peux-tu joindre le fichier STATSSEMAINE.txt
Nad