Copie de données et mise en page

Bonjour,

Je dois dans le cadre de mon travail, mettre à jour des données dans une base via un fichier au format .txt.

Mais je reçois les données dans un fichier excell avec une mise en page prévu pour impression.

Du coup dans le fichier que je reçois les données (volume, hauteur) se suivent par colonnes : A-B,C-D,E-F,G-H page1 , la suite sera sur la page 2 après la mise en page et de nouveau A-B....

Selon les bacs les données trés nombreuses. Par fichier, j'ai normalement 2 feuilles de calcul à traiter, une pour le baremage et une pour le fond de bac

j'arrive à copier les feuilles depuis le fichier source vers mon fichier mais en créant des nouvelles feuilles je n'arrive pas à écrire dedans

mais surtout je ne fais que de la copie brute, je ne sais pas comment supprimer la mise en page et copier les données sur seulement deux colonnes hauteur et volume sans titre ni présentation

Pour le moment j'ai une première feuille avec ca :

NOM du fichier Barème Bacxxx.xls

adresse fichier C:xxx\

table Barème

table 2 TableFond

8 debut données page 1

72 debut données page 2

136 debut données page 3

200 debut données page 4

264 debut données page 5

328 debut données page 6

392 debut données page 7

456 debut données page 8

520 debut données page 9

lignes 52 lignes de données par pages (colonnes) : ex si colonne A en 1 le suite sera colonne C en 53, colonne E en 105 et colonne G en 157

colonnes 4 nombres de paires de colonnes de donnée

voici ma macro actuelle :

Sub Baremage()

Dim wkA As Workbook, wkB As Workbook

Dim chemin As String, fichier As String, barémage As String, TableFond As String

'classeur A qui contient la macro

Set wkA = ThisWorkbook

'chemin ou se trouve le fichier B

chemin = Cells(3, 2)

'chemin table baremage

barémage = Cells(4, 2)

'chemin Table de fond

TableFond = Cells(5, 2)

'nom du fichier B

fichier = Cells(1, 2)

'ouvre le fichier B

Workbooks.Open chemin & fichier

'met en variable le classeur B

Set wkB = ActiveWorkbook

'copie les feuilles du classeur B dans le classeur A

wkB.Sheets(barémage).Copy before:=wkA.Sheets(barémage)

wkB.Sheets(TableFond).Copy before:=wkA.Sheets(TableFond)

MsgBox ("La feuille est maintenant copiée") 'message pour dire que la feuille est copiée.

wkB.Close False 'ferme et n'enregistre pas le classeur B

End Sub

Je n'ai jamais créé de macro et je n'utilise jamais vba, donc j'ai du mal imaginer le déroulement de ma macro.

au final je voudrais importer les données de la feuille Bareme de la source vers la feuille Bareme de mon fichier en le remettant sur seulement deux colonnes

j'arrive à peu pres à ecrire ma sequence langage automatisme (graphcet) mais je n'arrive pas a convertir cela en VBA

Vous trouverez ci-joint un exemple (pas le meilleur car sur la source deux tables en une alors que normalement le c'est sur deux feuilles) et le fichier txt final

Jusqu'à présent je faisais tout à la main mais vue le nombre de bacs et le nombre de tables à mettre à jour l'automatisation me ferait gagner bcp de temps

Merci à tous par avance

21baremage-xxx.txt (6.46 Ko)

Salut Justodge,

si j'ai bien compris...

La macro suivante ne reprend QUE les valeurs reprises sous rubriques HAUTEURS VOLUMES, à savoir 8 colonnes (complètes ou non) de 50 lignes qui se répètent X fois sur le document que tu récupères.

Pour repérer ces zones, je postule que 3 lignes avant, on trouvera TOUJOURS une cellule fusionnée contenant le mot BAREME.

Si tel ne devait pas être le cas, il conviendra de chercher un autre repère fixe et permanent, de document en document!

Private Sub cmdGO_Click()
'
Dim tTabO, tTabF()
iRow = Range("B" & Rows.Count).End(xlUp).Row
'
For x = 1 To iRow
    If Range("B" & x).Value = "BAREME" Then
        tTabO = Range("B" & x + 3 & ":I" & x + 53)
        For y = 1 To 7 Step 2
            For Z = 1 To UBound(tTabO, 1)
                If tTabO(Z, y) <> "" Then
                    iIdx = iIdx + 1
                    ReDim Preserve tTabF(2, iIdx)
                    tTabF(0, iIdx - 1) = tTabO(Z, y)
                    tTabF(1, iIdx - 1) = tTabO(Z, y + 1)
                End If
            Next
        Next
    End If
Next
With Worksheets("Extract")
    .UsedRange.ClearContents
    .Range("A1:B" & iIdx) = WorksheetFunction.Transpose(tTabF)
    .Activate
End With
'
End Sub

Bon travail!

A+

27baremagebac.xlsm (108.45 Ko)
Rechercher des sujets similaires à "copie donnees mise page"