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 Sub

Une 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 Sub

Amicalement

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).Delete

Au 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 Sub

Cordialment

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).Delete

par :

If Left(Range("A" & i), 1) <> "0" Then Rows(i).Delete

Si 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).Delete

Amicalement

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).Delete

J'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

Rechercher des sujets similaires à "comment automatiser importee"